코딩테스트

코딩테스트 위한 SQL 문법 정리

Mev01 2021. 10. 9. 09:00
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