MySQL, DBMS

[MySQL] 서브쿼리(subquery)

jny0 2023. 3. 9. 19:02

서브쿼리는 다른 쿼리 내부에 포함되어있는 SELECT문이다.

서브쿼리는 쿼리를 구조화시켜, 쿼리의 각 부분을 명확하게 구분할 수 있게 해주고, 복잡한 JOIN이나 UNION보다 좀 더 읽기 수월하다.

  • 서브쿼리는 반드시 소괄호 ()로 감싸져야한다.
  • 서브쿼리에서는 ORDER BY 를 설정해도 효과가 없다
    • SQL standard에서 정한 DB 테이블의 정의에서는, 테이블을 채우고 있는 데이터의 order는 아무런 의미가 없기 때문
    • 서브쿼리 내 ORDER BY 뒤에 LIMIT를 설정하거나
    • ORDER BY를 제일 바깥 최상위 절로 옮기면 된다. (추천)
  • FROM절에서 사용되는 서브쿼리는 AS를 사용해 이름을 지정해주어야한다.
SELECT E.id, E.name, E.salary,
D.id AS deptId,
D.maxSalary
FROM emp AS E
INNER JOIN (
    SELECT E.deptId AS id,
    MAX(E.salary) AS maxSalary
    FROM emp AS E
    GROUP BY E.deptId
) AS D
ON E.deptId = D.id;