by 유환 [SQL Query] [2024.08.01 00:00:30]
emp 테이블을 예로 들면
emp 테이블에 empno 와 order 컬럼이 있다고 가정하고
order 컬럼에 값이 있으면 이게 1순위 이고 없으면 empno 순으로 정렬 합니다.
1번과 2번 SQL 은 결고가 다른가요??? 같은거 같은대 GPT는 겱과가 다르다고 하네요.
1번
SELECT *
FROM emp
order by nvl(eorder , mpno )
2번
SELECT *
FROM emp
ORDER BY CASE WHEN order IS NOT NULL THEN 0 ELSE 1 END,
order,
empno;
의미가 다른 쿼리입니다.
그리고 order 과 같은 예약어는 명칭으로 사용하면 안됩니다.
다른 명칭을 사용하셔야 합니다.(예 : ord)
1번 쿼리는
- NVL(ord, empno) 의 결과값으로 전체 정렬을 하는 것이고
2번 쿼리는
- 그룹 정렬입니다. 0번 그룹(ord 가 있는 그룹)과 1번 그룹(ord 가 없는 그룹)
- 0번 그룹이 먼저 나오고 1번 그룹이 나중에 나온뒤
- 해당 그룹 안에서만 ord 와 empno 로 정렬이 됩니다.
- 그룹 간 데이터가 섞이지 않죠.(1번은 서로 섞입니다)
만약
- ord 의 값은 무조건 1자리 수이고
- empno 의 값은 4자리 수라고 가정하면
- 1번 쿼리도 동일한 결과가 나올 수는 있습니다.
그리고
- 2번 쿼리는 굳이 case 가 필요 없을 듯 하네요.
- ORDER BY ord, empno
- Oracle 기준으로 널이 나중에 나오기 때문, MSSQL 은 거꾸로