1.8 SELECT 문에서 조건식 사용하기
SELECT ENAME,
SAL,
(CASE
WHEN SAL <= 2000 THEN 'UNDERPAID'
WHEN (2000 < SAL AND SAL < 4000) THEN 'OK'
WHEN 4000 <= SAL THEN 'OVERPAID' END) AS 'STATUS'
FROM dbo.EMP
1.10 테이블에서 n개의 무작위 레코드 반환하기
SELECT ENAME, JOB
FROM dbo.EMP
ORDER BY NEWID();
- NEWID() 를 ORDER BY 절에서 사용할 때, 쿼리의 각 행마다 새로운 GUID 를 생성해야 하기에, 대량의 데이터를 처리하는 경우 성능 저하가 발생할 수 있다.
- 인덱스된 열에 NEWID()를 사용하면 인덱스의 무작위 삽입으로 인해 인덱스 단편화가 발생할 수 있음.
1.12 null을 실젯값으로 변환하기
SELECT COALESCE(comm, 0)
FROM dbo.EMP;
2.3 부분 문자열로 정렬하기
SELECT ENAME, JOB
FROM dbo.EMP
ORDER BY SUBSTRING(JOB, LEN(JOB) - 1, 2)
2.4 혼합 영숫자 데이터 정렬하기
CREATE VIEW v AS
SELECT ename + ' ' + CAST(deptno AS VARCHAR) AS name
FROM dbo.EMP
SELECT *
FROM v
2.5 정렬할 때 null 처리하기
SELECT ENAME, SAL, COMM
FROM (SELECT ENAME
, SAL
, COMM
, IIF(COMM IS NULL, 1, 0) AS COMM_IS_NULL
FROM dbo.EMP) x
ORDER BY COMM_IS_NULL, COMM
| ENAME | SAL | COMM |
|---|
| TURNER | 1500 | 0 |
| ALLEN | 1600 | 300 |
| WARD | 1250 | 500 |
| MARTIN | 1250 | 1400 |
| BLAKE | 2850 | null |
| CLARK | 2450 | null |
| SCOTT | 3000 | null |
| KING | 5000 | null |
| ADAMS | 1100 | null |
| JAMES | 950 | null |
| FORD | 3000 | null |
| MILLER | 1300 | null |
| JONES | 2975 | null |
| SMITH | 800 | null |
- null 값을 앞으로
SELECT ENAME, SAL, COMM
FROM (SELECT ENAME
, SAL
, COMM
, IIF(COMM IS NULL, 1, 0) AS COMM_IS_NULL
FROM dbo.EMP) x
ORDER BY COMM_IS_NULL DESC , COMM DESC
| ENAME | SAL | COMM |
|---|
| SMITH | 800 | null |
| JONES | 2975 | null |
| BLAKE | 2850 | null |
| CLARK | 2450 | null |
| SCOTT | 3000 | null |
| KING | 5000 | null |
| ADAMS | 1100 | null |
| JAMES | 950 | null |
| FORD | 3000 | null |
| MILLER | 1300 | null |
| MARTIN | 1250 | 1400 |
| WARD | 1250 | 500 |
| ALLEN | 1600 | 300 |
| TURNER | 1500 | 0 |
2.6 데이터 종속 키 기준으로 정렬하기
SELECT ENAME, SAL, JOB, COMM
FROM dbo.EMP
ORDER BY CASE
WHEN JOB = 'SALESMAN' THEN COMM
ELSE SAL END
| ENAME | SAL | JOB | COMM |
|---|
| TURNER | 1500 | SALESMAN | 0 |
| ALLEN | 1600 | SALESMAN | 300 |
| WARD | 1250 | SALESMAN | 500 |
| SMITH | 800 | CLERK | null |
| JAMES | 950 | CLERK | null |
| ADAMS | 1100 | CLERK | null |
| MILLER | 1300 | CLERK | null |
| MARTIN | 1250 | SALESMAN | 1400 |
| CLARK | 2450 | MANAGER | null |
| BLAKE | 2850 | MANAGER | null |
| JONES | 2975 | MANAGER | null |
| SCOTT | 3000 | ANALYST | null |
| FORD | 3000 | ANALYST | null |
| KING | 5000 | PRESIDENT | null |