나는 PostgreSQL, MySQL을 주로 사용한다.
실무에서는 아무래도 확장성이 좋은 PostgreSQL을 사용하지만,
간단한 SQL 문제를 풀기 위해서는 단일DB를 사용하는 MySQL을 사용하는것이 좋다.
그리 큰 차이는 없겠지만 SQL 문법은 MySQL에 맞추어 기술하겠다.
SELECT IFNULL(name, 'Unknown') FROM employees;
위 쿼리는 name열의 값이 null이면 Unknown을 출력한다.
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
위 쿼리는 현재 날짜를 YYYY-mm-dd 형식으로 출력된다.
즉, 2023-06-08 처럼 출력된다.
SELECT DATEDIFF(end_date, start_date) AS days_between
FROM table_name;
위 쿼리는 table_name 테이블에서 end_date 열과 start_date 열의 차이를 계산한다.
예를 들어,
state_date열이 2023-06-01 , end_date열이 2023-06-07 이라면 6을 반환한다.
SELECT
student_id,
student_name,
CASE
WHEN gender = 'male' THEN '남성'
WHEN gender = 'female' THEN '여성'
ELSE '기타'
END AS gender
FROM
students;
이 문법은 다음과 같은 결과를 반환한다
student_id | student_name | gender |
---|---|---|
1 | Alice | 여성 |
2 | Bob | 남성 |
3 | Carol | 기타 |
SELECT IF(age >= 18, "성인", "미성년자");
SELECT CONCAT("Hello", "World");
위 코드는 두 문자열을 결합하여 "Hello World" 를 반환한다.
이를 응용해서,
LEFT MID RIGHT를 사용해 전화번호 사이사이에 하이픈(-)을 넣을 수도 있다.
만약 번호가 01012346789 형식이라고 한다면
CONCAT( LEFT(USER.TLNO, 3) , '-',
MID(USER.TLNO, 4, 4), '-' ,
RIGHT(USER.TLNO, 4) )
AS '전화번호'
위 쿼리를 실행한 뒤 010-1234-6789 로 출력할 수 있다.
LEFT(USER.TLNO, 3) : USER.TLNO의 LEFT(처음)부터 3번째 까지 출력,
MID(USER.TLNO, 4, 4) : USER.TLNO의 MID(중간), 4번째부터 그 뒤의 4번째 까지 출력,
RIGHT(USER.TLNO, 4) : USER.TLNO의 RIGHT(끝)부터 4번째 앞부터 끝까지 출력