CASE 연산자는 값을 서로 비교하거나, 표현식의 논리값에 따라 다른 값을 반환한다.
1. CASE value
WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result] ...
[ELSE result]
END
2. CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result] ...
[ELSE result]
END
첫 번째 CASE 문에서는 value 값과 compare_value 값을 비교하여 같으면 THEN 절의 result를 반환한다.
두 번째 CASE 문에서는 condition 이 참이면 result를 반환한다.
만약 ELSE 절이 없고, 모두 조건을 만족하지 못한다면 NULL을 반환한다.
IF() 함수는 첫 번째 인수로 전달받은 표현식의 논리값에 따라 다른 값을 반환한다.
IF(expr1, expr2, expr3)
만약 expr1이 참이면 expr2를 반환하고, 거짓이면 expr3를 반환한다.
expr1의 값이 NULL이 아니면 expr1 그 자체를 반환하고, NULL이면 expr2를 반환다.
IFNULL(expr1, expr2)
NULLIF(expr1, expr2)
만약 expr1과 expr2의 값이 서로 같으면 NULL을 반환하고, 같지 않으면 expr1을 반환한다.
LIKE 연산자는 특정 패턴을 포함하는 데이터만을 검색하기 위해 사용합니다.
패턴을 포함하는 지 검색한다는 점에서 = 연산자와 차이가 있다.
EX) ~로 시작하는 데이터, ~로 끝나는 데이터
SELECT * FROM Reservation
WHERE Name LIKE '장%';
그 반대인 NOT LIKE 연산자도 있다.
- '%' : 0개 이상의 문자를 대체한다.
- '_' : 1개의 문자를 대체한다.
ex) WHERE RoomNum LIKE '20__';
// '' 로 감싸줘야 한다.
LIKE 연산자보다 더 복잡한 패턴을 검색할 때 사용한다.
LIKE와 마찬가지로 그 반대인 NOT REGEXP 연산자도 존재한다.
SELECT BINARY 'a' = 'A', // 결과 : 0
'a' = 'A'; // 결과 : 1
CAST(expr AS type)
1. CONVERT(expr, type)
2. CONVERT(expr USING transcoding_name)
제약 조건(constraint)이란 데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙을 의미합니다.
이러한 제약 조건은 CREATE 문으로 테이블을 생성할 때나 ALTER 문으로 필드를 추가할 때도 설정할 수도 있습니다.
NOT NULL 제약 조건을 설정하면, 해당 필드는 NULL 값을 저장할 수 없습니다.
즉, 이 제약 조건이 설정된 필드는 무조건 데이터를 가지고 있어야 합니다.
CREATE TABLE 테이블이름
(
필드이름 필드타입 NOT NULL,
...
)
ALTER TABLE 테이블이름
ADD 필드이름 필드타입 NOT NULL
ALTER TABLE 테이블이름
MODIFY COLUMN 필드이름 필드타입 NOT NULL
UNIQUE 제약 조건을 설정하면, 해당 필드는 서로 다른 값을 가져야 합니다.
즉, 이 제약 조건이 설정된 필드는 중복된 값을 저장할 수 없습니다.
1. CREATE TABLE 테이블이름
(
필드명 필드타입 UNIQUE,
...
)
2. CREATE TABLE 테이블이름
(
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름] UNIQUE (필드이름)
)
// 새로운 필드 생성
1. ALTER TABLE 테이블이름
ADD 필드이름 필드타입 UNIQUE
2. ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름] UNIQUE (필드이름)
// 기존 필드에 추가
1. ALTER TABLE 테이블이름
MODIFY COLUMN 필드이름 필드타입 UNIQUE
2. ALTER TABLE 테이블이름
MODIFY COLUMN [CONSTRAINT 제약조건이름] UNIQUE (필드이름)
각각 2번째에 있는 문법을 사용하면 제약조건 이름을 설정할 수 있다.
제약 조건에 이름을 설정하면 , DROP 문을 통해 조건을 삭제할 수 있다.
ALTER TABLE 테이블 이름
DROP INDEX 제약조건 이름
PRIMARY KEY 제약 조건을 설정하면, 해당 필드는 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가집니다.
이러한 PRIMARY KEY 제약 조건을 기본 키라고 합니다.
PRIMARY KEY는 테이블당 오직 하나의 필드에만 설정할 수 있습니다.
이러한 PRIMARY KEY 제약 조건은 테이블의 데이터를 쉽고 빠르게 찾도록 도와주는 역할을 합니다.
설정 방법은 UNIQUE와 완전히 동일하다.
다음 방법을 이용하여 설정된 PRIMARY KEY제약 조건을 삭제할 수 있다.
ALTER TABLE 테이블이름
DROP PRIMARY KEY
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름]
FOREIGN KEY (필드이름)
REFERENCES 테이블이름 (필드이름)
)
ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름]
FOREIGN KEY (필드이름)
REFERENCES 테이블이름 (필드이름)
ALTER TABLE 테이블이름
DROP FOREIGN KEY 제약조건이름
FOREIGN KEY 제약 조건에 의해 참조되는 테이블에서 데이터의 수정이나 삭제가 발생하면, 참조하고 있는 테이블의 데이터도 같이 영향을 받습니다.
이때 참조하고 있는 테이블의 동작은 다음 키워드를 사용하여 FOREIGN KEY 제약 조건에서 미리 설정할 수 있습니다.
ON DELETE
ON UPDATE
참조되는 테이블의 값이 삭제될 경우의 동작은 ON DELETE 구문으로 설정할 수 있습니다.
또한, 참조되는 테이블의 값이 수정될 경우의 동작은 ON UPDATE 구문으로 설정할 수 있습니다.
이때 설정할 수 있는 동작은 다음과 같습니다.
CASCADE : 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블에서도 삭제와 수정이 같이 이루어집니다.
SET NULL : 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 NULL로 변경됩니다.
NO ACTION : 참조되는 테이블에서 데이터를 삭제하거나 수정해도, 참조하는 테이블의 데이터는 변경되지 않습니다.
SET DEFAULT : 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 필드의 기본값으로 설정됩니다.
RESTRICT : 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없습니다.
DEFAULT 제약 조건은 해당 필드의 기본값을 설정할 수 있게 해줍니다.
설정 방법은 일반적인 제약조건과 동일하다.
CREATE TABLE 테이블이름
(
필드이름 필드타입 DEFAULT 기본값,
...
)
ALTER TABLE 테이블이름
ADD 필드이름 필드타입 DEFAULT 기본값