SELECT
[DISTINCT]
COLUMN, COLUMN ...
FROM TABLE
WHERE 조건
GROUP BY {col_name | expr}
[ASC | DESC]
HAVING 조건
ORDER BY {col_name | expr}
[ASC | DESC]
LIMIT row_count
COLUMN에 특정 조건을 통해 값을 다르게 할 수 있음
NULL이면 "NO NAME"으로 표시 -> IF(IS NULL(COLUMN), "NO NAME", COLUMN) = IFNULL(COLUMN, "NO NAME")
WHERE
WHERE 속성 BETWEEN 값1 AND 값2;
WHERE 속성 IN (조건1, 조건2); // 조건1이거나 조건2
WHERE 속성 LIKE 'A_'; // 속성이 첫글자가 A이고 나머지 한 글자가 있음
WHERE 속성 LIKE 'A%'; // 속성이 첫글자가 A
GROUP BY, HAVING
WHERE에는 집계함수를 쓸수 없지만 HAVING은 가능
SELECT
status, COUNT(*)
FROM
orders
GROUP BY status
HAVING COUNT(*) > 4;
// status 별로 그룹짓고
// status와 status별 갯수가 4개보다 큰 것만
status | COUNT(*) |
OPEN | 5 |
CLOSE | 6 |
집계함수
COUNT, SUM, AVG, MIN, MAX
COUNT(DISTINCT name) 이렇게 쓰면 중복제거한 name에 COUNT를 적용
LIMIT
LIMIT 3; // 0번째부터 3개 출력
LIMIT 3, 3; // 3번째부터 3개 출력
JOIN
SELECT g.name, s.title
FROM ggroup AS g
JOIN song AS s
ON g.song_id = s.id;
SELECT g.name, s.title
FROM ggroup AS g
LEFT JOIN song AS s
ON g.song_id = s.id;
SELECT g.name, s.title
FROM ggroup AS g
RIGHT JOIN song AS s
ON g.song_id = s.id;
JOIN(= INNER JOIN)은 교집합인 경우
LEFT JOIN은 ggrop에 대한 모든 튜플을 가져옵니다. 그리고 조건에 만족할 경우 s.title도 표시해주고 만족하지 않은 경우 null로 보여줍니다.
RIGHT JOIN은 song에 대한 모든 튜플을 가져옵니다. 그리고 조건에 만족할 경우 g.name도 표시해주고 만족하지 않은 경우 null로 보여줍니다.
DATE_FORMAT
날짜 시간 표기 방식 지정 가능
DATETIME : 2018-01-22 14:32:00
-> DATE_FORMAT(DATETIME, '%Y-%m-%d') : 2018-01-22
-> DATE_FORMAT(DATETIME, '%Y-%m-%d %H:%i:%s') : 2018-01-22 14:32:00
가상의 테이블 만들기
WITH RECURSIVE H AS(
SELECT 0 AS TIME
UNION ALL
SELECT TIME + 1 FROM H WHERE TIME < 23
)
SELECT H.TIME, COUNT(HOUR(OUTS.DATETIME))
FROM H
LEFT JOIN ANIMAL_OUTS OUTS
ON TIME = HOUR(OUTS.DATETIME)
GROUP BY H.TIME;
H라는 테이블의 TIME 컬럼에 0 - 23 까지 숫자가 있음
H라는 테이블을 이용해 조인
References
https://victorydntmd.tistory.com/138
https://futurists.tistory.com/17
https://lightblog.tistory.com/155
'코딩테스트' 카테고리의 다른 글
다시 풀어볼 문제 (0) | 2021.10.07 |
---|---|
투 포인터(Two Pointer) (0) | 2021.07.09 |