π 2023λ 11μ 21μΌ
μ€λλ μ΄μ λ°°μ΄ κ²μ DB 격리μμ€ λ³΅μ΅νκ³ , μλ‘μ΄ JOIN, UNION, SubQuery, GROUP BYλ₯Ό λ°°μ°κ³ λ§μ νλ‘κ·Έλλ¨Έμ€ λ¬Έμ λ₯Ό κ°μ¬λκ³Ό κ°μ΄ νμ΄λ΄€λ€. [DB 4μΌμ°¨]
JOIN :
μ¬λ¬ ν μ΄λΈμμ κ°μ Έμ¨ λ μ½λλ₯Ό μ‘°ν©νμ¬ νλμ ν μ΄λΈμ΄λ κ²°κ³Ό μ§ν©μΌλ‘ νν
- INNER JOIN :
μμͺ½ ν μ΄λΈμ λͺ¨λ λ§μ‘±νλ κ°λ§
- OUTER JOIN :
νμͺ½ ν μ΄λΈμ λ§μ‘±νλ λͺ¨λ κ°
(λ€λ₯Έ ν μ΄λΈμ λ§μ‘±νλ κ°μ΄ μμΌλ©΄ μλμΌλ‘ null κ°μ΄ λ€μ΄κ°λ€.)SELECT * FROM AUTHOR AS A INNER JOIN POSTS AS B ON A.ID = B.AUTH_ID; SELECT * FROM AUTHOR AS A LEFT OUTER JOIN POSTS AS B ON A.ID = B.AUTH_ID; SELECT A.NAME , B.TITLE -- νΉμ κ°λ§ κ°μ Έμ¬ μ μλ€ FROM AUTHOR AS A LEFT JOIN POSTS AS B ON A.ID = B.AUTH_ID; SELECT A.NAME , B.TITLE FROM AUTHOR AS A LEFT JOIN POSTS AS B ON A.ID = B.AUTH_ID WHERE A.AGE>=25; -- whereμ μ μ¬μ©ν΄μ 쑰건μ μΆκ°ν μ μλ€.
UNION :
μ¬λ¬ κ°μ SELECT λ¬Έμ κ²°κ³Όλ₯Ό νλμ ν μ΄λΈμ΄λ κ²°κ³Ό μ§ν©μΌλ‘ νν (μ€λ³΅μ κ±°)
- WITH RECURSIVE :
μ¬κ·λ¬ΈμΌλ‘μ μκΈ° μμ μ μ°Έμ‘°νμ¬ λ°λ³΅μ μΌλ‘ λ°μ΄ν°λ₯Ό μμ±νκ±°λ λ³ννλ©΄μ νλμ ν μ΄λΈμ λ§λλ μ©λ--- νΌλ³΄λμΉ μμ΄ WITH RECURSIVE Fibonacci (n, fib1, fib2) AS ( SELECT 1, 0, 1 UNION ALL SELECT n + 1, fib2, fib1 + fib2 FROM Fibonacci WHERE n < 10 -- μ¬κ· λ¨κ³ ) SELECT n, fib1 FROM Fibonacci;
SubQuery :
쿼리 λ΄λΆμ ν¬ν¨λμ΄ μλ SELECT λ¬Έμ μλ―Έ
- IN : ν¬ν¨
- NOT IN : ν¬ν¨ νμ§ μλ
SELECT HOUR, 0 AS 'COUNT' FROM NUMBER_SEQ WHERE HOUR NOT IN( -- μλΈ μΏΌλ¦¬ SELECT CAST(date_format(DATETIME, '%H') AS signed) AS HOUR FROM ANIMAL_OUTS ) UNION SELECT CAST(date_format(DATETIME, '%H') AS signed) AS HOUR, COUNT(*) AS COUNT FROM ANIMAL_OUTS GROUP BY HOUR ORDER BY HOUR
GROUP BY :
μ νλ λ μ½λμ μ§ν©μ νΉμ κ°μΌλ‘ κ·Έλ£Ήνν κ²°κ³Ό μ§ν©
- HAVING : κ·Έλ£Ήνλ νμ λ°μ΄ν°μ λν 쑰건μ μ€μ
- COUNT() : νμ κ°μλ₯Ό μΈμ΄μ€
- AVG() : ν μμ μλ κ°μ νκ· μ λ΄μ΄μ€
- MIN() : ν μμ μλ κ°μ μ΅μκ°μ λ°νν΄μ€
- MAX() : ν μμ μλ κ°μ μ΅λκ°μ λ°νν΄μ€
- SUM() : ν μμ μλ κ°μ ν©μ λ΄μ΄μ€
SELECT AUTH_ID, count(*) AS 'COUNT', round( avg(price) ) AS 'AVG', -- round : μμμ μ 리 MIN(price) AS 'MIN', MAX(price) AS 'MAX', SUM(price) AS 'SUM' FROM POSTS group by AUTH_ID; SELECT AUTH_ID, round( avg(price) ) AS 'AVG' FROM POSTS WHERE price>2000 -- κ° κ°μ 쑰건 group by AUTH_ID HAVING avg(price)>2000 -- κ·Έλ£Ή 쑰건
SELECT
FROM
JOIN
ON
WHERE
GROUP BY
HAVING
ORDER BY
SQLλ¬Έμ λλΆλΆ μμΌλ‘ μ§νλλ€.
μ€λμ λ§μ νλ‘κ·Έλλ¨Έμ€ λ¬Έμ λ₯Ό νμλ€
https://school.programmers.co.kr/learn/courses/30/lessons/59042
https://school.programmers.co.kr/learn/courses/30/lessons/144854
https://school.programmers.co.kr/learn/courses/30/lessons/59412
https://school.programmers.co.kr/learn/courses/30/lessons/133026
https://school.programmers.co.kr/learn/courses/30/lessons/151137
https://school.programmers.co.kr/learn/courses/30/lessons/131536
https://school.programmers.co.kr/learn/courses/30/lessons/59413