SQL 첫걸음 14-15강 정리

책을 보면서 공부한 내용 복습 및 정리
기본설정
  1. Mysql 서버 켜기
  2. Mysql 실행하기
  3. sample database 사용 설정하기
$ mysql.server start
$ sudo mysql
mysql> use sample;

14강

시스템 날짜를 확인할 때는 표준 SQL에서 제공하는 CURRENT_TIMESTAMP 함수를 이용하면 된다. FROM 구를 생략하고 SELECT 구만으로도 실행된다.

crt_timestamp.png

날짜 시간형 데이터는 기간형 수치데이터와 덧셈과 뺄셈을 할 수 있으며, 결과는 날짜 시간형 데이터가 반환된다. CURRENT_DATE는 시스템 날짜의 날짜만 확인하는 함수이며 INTERVAL 1 DAY는 ‘1일 후’라는 기간형 상수이다.

interval.png

날짜 시간형 데이터 간에 뺄셈도 할 수 있다. MySQL에서는 DATEDIFF를 이용한다.

datediff

15강

CASE 문을 이용하면 조건에 따라 데이터를 변환할 수 있다. 아래 예제에서는 a 값이 NULL일 때는 0이 되도록 하였다. WHEN 절에 참 또는 겆시을 반환하는 조건식을 쓰고 조건식을 만족하는 경우 THEN 절이 처리된다.

case_1

단지 NULL을 처리하는 문제라면 CASE보다는 COALESCE 함수를 사용하는 것이 더 간단하다. 아래 예제에서는 a의 값이 NULL인지 확인하고 NULL일 경우, 두번째 인수에 있는 0으로 대체한다.

coalesce

CASE 문은 검색 구문과 단순 구문으로 나눌 수 있다. 검색 구문은 CASE WHEN 조건식 THEN 식... 형태이고, 단순 구문은 CASE 식 WHEN 식 THEN 식... 형태이다. CASE 뒤에 식이 있으면 WHEN 뒤에는 조건식이 아닌 식이 온다는 점이 다르다. 아래의 예는 검색 CASE로 WHEN 절에 a=1, a=2라는 조건식이 나온다.

case_2

단순 케이스에서는 CASE에 비교할 항목을 지정하기 때문에 WHEN에는 비교할 값만 들어가게 된다.

case_3

CASE 문을 사용할 때는 주의할 것이 몇 가지 있다. 먼저 ELSE를 생략하면 ELSE NULL이 되므로 생략하는 것보다 지정하는 것이 낫다. WHEN에서 NULL을 지정할 때는 단순 CASE 문보다는 검색 CASE 문을 사용하는 것이 좋다. 위의 단순 CASE 예제로 보면 a=1일 때, a=2일 때 그 외의 경우로 나뉘어 지는데 만약 WHEN NULL THEN ~ 의 식으로 한다면 a=null이라는 조건식이 되게 된다. null은 비교연산자로 판정할 수 없고 IS NULL로 판정할 수 있으므로 검색 CASE 문을 이용하여 WHEN a IS NULL THEN ~의 식을 사용해야 한다.