매일 매일 미라클 코딩

SQLD 오답노트 (4) - SQL 기본 및 활용 본문

데이터베이스

SQLD 오답노트 (4) - SQL 기본 및 활용

뚜벅-뚜벅 2022. 9. 1. 13:34

SQL 문장들의 종류

명령어의 종류 명령어 설명
데이터 조작어
DML (Data Manipulation Language)
SELECT
INSERT
UPDATE
DELETE
데이터 조회 및 변형하는 명령어
데이터 정의어
DDL (Data Definition Language)
CREATE
ALTER
DROP
RENAME
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어. 테이터 구조를 생성, 변경, 혹은 삭제하거나 이름을 바꾼다
데이터 제어어
DCL (Data Control Language)
GRANT
REVOKE
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어
트랜잭션 제어어
TCL (Transaction Control Language)
COMMIT
ROLLBACK
DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어

 

비절차적 / 절차적 데이터 조작어

비절차적 데이터 조작어(DML)는 사용자가 무슨 데이터(What) 를 원하는지 명세

절차적 대이터 조작어 : 어떻게(How) 데이터를 접근해야하는지 명세 -> PL/SQL(오라클), T-SQL(SQL Server)

 

 

PK제약조건 생성방법

 

1) CREATE TABLE 후 ALTER 문으로 제약조건 생성

-> ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY (PK컬럼명);

 

2) CREATE TABLE 시 제약조건 생성

-> CREATE TABLE 테이블명 (
속성1,
속성2,
...,
CONSTRAINT 제약조건명 PRIMARY KEY (PK컬럼명)
);

 

 

제약조건

- NOT NULL: 명시적으로 NULL 의 입력을 방지한다

- UNIQUE : 테이블 내에서 중복되는 값이 없어야함 (NULL 허용)

- PK : UNIQUE + NOT NULL = 주 키로 테이블당 1개만 생성 가능하다 (PK에 해당하는 여러 컬럼이 한 개)

- FK : 외래키는 테이블간의 관계를 정의하기 위해 기본키(PK)를 다른테이블의 외래키가 참조하도록 생성. 테이블 생성시 설정할  수 있으며, NULL 값을 허용한다. 한테이블에 여러개 존재할 수 있지만 참조무결성 제약을 받을 수 있다. 

- CHECK: 데이터의 무결성을 유지하기 위해 테이블의 특정 컬럼에 설정하는 제약

 

 

REFERENCE 옵션

DELETE CASCADE master 삭제시 child 같이 삭제
SET NULL master 삭제시 child의 해당 필드  NULL
SET DEFAULT master 삭제시 child 필드 default 값으로 설정
RESTRICT child 테이블에 PK 값이 없는 경우만 master 삭제 허용
NO ACTION 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음
INSERT AUTOMATIC master 테이블에 PK 가 없는 경우 master PK를 생성 후 child 입력
SET NULL master 테이블에 PK 가 없는 경우 child 외부키를 NULL 값으로 처리
SET DEFAULT master 테이블에 PK 가 없는 경우 child 외부키를 지정된 default 값으로 입력
DEPENDENT master 테이블에 PK 가 존재 할때만 child 입력 허용
NO ACTION 참조무결성을 위반하는 입력 액션을 취하지 않음

 

 

트랜잭션의 특성

원자성 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아있어야 한다.
일관성 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다. 
고립성 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
지속성 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

* 트랜잭션에 대한 격리성이 낮은경우 발생할 수 있는 문제점

- Dirty Read : 다른 트랜잭션에 의 해 수정되었지만 아직 커밋되지 않은 데이터를 읽는것

- Non-Repeatable Read  : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상

- Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상

 

TRANSACTION 구문

1) 트랜잭션 시작

 BEGIN TRANSACTION : 

2) 트랜잭션 종료 

 COMMIT (TRANSACTION ) 혹은 ROLLBACK (TRANSACTION)

3) 지정점(save point) 정의 

[Oracle]

SAVEPOINT 포인트명; ROLLBACK TO  포인트명;

[SQL Server]

SAVE TRANSACTION 포인트명;

ROLLBACK TRANSACTION  포인트명; 

-> 지정점을 정의하면 현 시점에서 지정점까지 트랜잭션의 일부만 롤백할 수 있다.

 

Oracle / SQL Server

oracle 의 경우 INSERT 시 공백문자를 입력하면 NULL 로 저장된다

SQL Server 는 공백문자 그대로를 입력값으로 받는다

 

함수의 종류

- 내장함수 : 함수의 입력 행수에 따라 아래와 같이 구분한다

1) 단일행 함수 : select, where, order by, update set 절에 사용 가능

2) 다중행 함수 : 집계 함수 / 그룹함수 / 윈도우함수 

-> 다중행 함수도 단일행함수와 동일하게 단일값을 반환한다