- 아래 SQL문과 같이 ORDER BY가 두 개 이상일 경우 안쪽 ORDER BY는 적용이 안된다.
- 최종 결과는 바깥쪽 ORDER BY에 의해 결정되므로 옵티마이저가 안쪽 ORDER BY는 실행 할 필요없다고 판단하고 해당 명령을 무시한다.
- 옵티마이저 : 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진
select *
from(
SELECT D2.name AS `부서명`,
E.name AS `사원명`,
DATE(E.regDate) AS `입사일`,
CONCAT(FORMAT(E.salary, 0), '만원') AS `연봉`
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
AND E.salary = D.maxSalary
INNER JOIN dept AS D2 # 추가 조인
ON E.deptId = D2.id
ORDER BY E.id desc # ORDER BY 적용 X
) as E
GROUP BY E.`부서명`;
- 하지만, ORDER BY 다음에 LIMIT 명령어가 온다면, LIMIT을 실행하기 위해서 ORDER BY가 실행된다.
ORDER BY E.id desc
limit 3