두 테이블(Students, Grades)에 대한 JOIN 연산을 수행할 때, 부등호(>=, <=) 또는 BETWEEN을 통해 범위를 지정해줘야 한다.
SELECT
CASE
WHEN G.Grade < 8 THEN NULL
ELSE S.Name
END AS Display_Name,
G.Grade,
S.Marks
FROM
Students AS S
JOIN
Grades AS G
ON
S.Marks >= G.Min_Mark
AND S.Marks <= G.Max_Mark
-- S.Marks BETWEEN G.Min_Mark AND G.Max_Mark
ORDER BY
G.Grade DESC,
CASE
WHEN G.Grade < 8 THEN S.Marks
ELSE Display_Name
END ASC;
위의 쿼리에서 G.Grade가 8 미만인 경우, Display_Name은 NULL로 같다.
따라서 CASE 문을 사용하지 않고, 정렬 인자를 추가하는 방식으로 쿼리를 작성해도 된다.
SELECT
CASE
WHEN G.Grade < 8 THEN NULL
ELSE S.Name
END AS Display_Name,
G.Grade,
S.Marks
FROM
Students AS S
JOIN
Grades AS G
ON
S.Marks >= G.Min_Mark
AND S.Marks <= G.Max_Mark
ORDER BY
G.Grade DESC,
Display_Name ASC,
S.Marks ASC;