SQL 안 쓴지 좀 되어서 SQL 고득점키트 풀면서 상기시간을 가져보자
다 MySQL 기준이다.
IS NULL
, IS NOT NULL
써야 한다.YEAR()
, MONTH()
등의 함수를 쓸 수 있다.DATE_FORMAT(DATE, "%Y-%m-%d")
와 같이 할 수 있다.,
로 구분해줘야 한다.INNER JOIN orders B ON A.id = B.id
LEFT JOIN orders B ON A.id = B.customer_id;
ROUND()
- 뒤에 숫자 지정하는 경우 해당 자릿수까지 포함FLOOR()
CEILING()
TRUNCATE(12.3456, 2)
%
: 0개 이상과 일치 _
: 정확히 1개와 일치. 아닌것 찾고싶으면 NOT LIKE
BINARY
연산자 사용 필요 WHERE name LIKE BINARY 'kim%';
UPPER()
소문자변환 LOWER()
IFNULL(some, replacement)
또는 COALESCE(some, replacement)
GROUP BY A, B
이후 HAVING count(*) > 1
하면 동일한 A, 동일한 B를 그룹화시키고 카운트를 세서 동일 건이 여러 개인 것을 확인 가능LIMIT 1
UNION
WHERE 'Python' IN (SKILL_1,SKILL_2,SKILL3)
DISTINCT
를 까먹지 말자.WHERE DATE_FORMAT(ORDER_DATE, '%Y-%m') BETWEEN '2020-08' AND '2020-11'
DATEDIFF(A, B)
으로 구할 수 있다. TIMESTAMPDIFF(단위, A, B)
를 하게 되면 지정한 단위로도 구할 수 있다. 예를 들면 MINUTE, HOUR, DAY, WEEK, MONTH, YEARSTR_TO_DATE('2022-05-01', '%Y-%m-%d')
SUBSTRING
, SUBSTR
를 까먹지 말자.다시 볼만한 문제들