소개
이것은 깊은 기술적인 문제가 아니라 뛰어난 프로그래밍 능력입니다. 이는 반드시 개인의 개발 능력과 직접적인 관련이 있는 것은 아니지만 이를 아는 것은 SQL 작성, 문제 해결 및 최적화에 큰 도움이 될 것입니다. 복잡한 지식 포인트가 아니라 아주 기본적인 SQL 기초입니다. 이것을 모르면 일반 시멘트로 집을 짓고 있는 것이고, 이것을 알면 고급 시멘트로 집을 짓는 것입니다.
하지만 이렇게 작은 지식 포인트라면 주변의 동료나 친구들을 조사해 보면 어쩌면 '놀라움'을 얻을 수도 있습니다.
이 글은 갑자기 작성되었기 때문에 아래에 작성된 SQL 문은 테스트를 거치지 않았습니다.
다음 SQL 문을 살펴보세요.
SELECT ID,COUNT(ID) AS TOTAL FROM STUDENT GROUP BY ID HAVING TOTAL>2
SELECT ID,COUNT(ID) AS TOTAL FROM STUDENT GROUP BY ID ORDER BY TOTAL
SELECT FIRSTNAME+' '+LASTNAME AS NAME, COUNT(*) AS COUNT FROM STUDENT GROUP BY NAME
성공적으로 실행될 수 없는 SQL 문은 무엇이라고 생각하시나요?
Closer to home
다음은 SELECT 문의 논리적 실행 순서입니다.
FROM
ON
JOIN
어디에서
GROUP BY
WITH CUBE 또는 WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
MICROSOFT에서는 쿼리 프로세서가 다르기 때문에 SELECT 문의 실제 물리적 실행 순서가 이 순서와 다를 수 있다고 지적했습니다.
여러 예
예 1
SELECT ID,COUNT(ID) AS TOTAL FROM STUDENT GROUP BY ID HAVING TOTAL>2
이 SQL 문이 익숙하다고 생각하시나요? 예, 매우 기본적인 그룹 쿼리입니다. 그러나 HAVING의 실행 순서가 SELECT보다 높기 때문에 성공적으로 실행될 수 없습니다.
실제 실행 순서는 다음과 같습니다.
FROM STUDENT
GROUP BY ID
HAVING TOTAL>2
SELECT ID, COUNT(ID ) AS TOTAL
당연히 TOTAL은 SELECT ID의 마지막 문장인 COUNT(ID) AS TOTAL이 실행된 후 생성된 새로운 별칭입니다. 따라서 HAVING TOTAL>2를 실행하면 TOTAL을 인식할 수 없습니다.
예 2
SELECT ID,COUNT(ID) AS TOTAL FROM STUDENT GROUP BY ID ORDER BY TOTAL
실제 실행 순서는 다음과 같습니다.
FROM STUDENT
GROUP BY ID
SELECT ID , COUNT(ID) AS TOTAL
ORDER BY TOTAL
이번에는 문제 없이 성공적으로 실행될 수 있습니다. ORDER BY TOTAL이 ORDER BY COUNT(ID)로 바뀌면 어떻게 되나요?
SELECT ID,COUNT(ID) AS TOTAL FROM STUDENT GROUP BY ID ORDER BY COUNT(ID)
실제 실행 순서:
FROM STUDENT
GROUP BY ID
SELECT ID,COUNT(ID) AS TOTAL
ORDER BY COUNT(ID)
네, 성공적으로 실행 가능합니다. SQL 실행 계획을 보면 위의 ORDER BY TOTAL과 같습니다. ORDER BY는 SELECT 이후에 실행되므로 별칭 TOTAL을 사용할 수 있습니다.
예제 3
SELECT FIRSTNAME+' '+LASTNAME AS NAME, COUNT(*) AS COUNT FROM STUDENT GROUP BY NAME
실제 실행 순서:
FROM STUDENT GROUP BY NAME SELECT FIRSTNAME+' '+LASTNAME AS NAME,COUNT(*) AS COUNT
분명히 GROUP BY NAME이 있을 때 별칭 NAME이 생성되지 않았습니다. 따라서 성공적으로 실행할 수 없습니다.
요약
예전에 이 질문을 무작위로 몇몇 사람들에게 했던 기억이 나며, 누가 모른다고 해도 우리는 일부러 비웃었습니다. 물론 한 사람의 비웃음은 아니었습니다. 남의 조롱. 하지만 아직도 이 지식 포인트를 눈치 채지 못하는 사람들이 있다는 것이 밝혀졌습니다. 저는 단지 친근하게 상기시키기 위해 여기에 게시합니다.