[SQL 쿡북 - sql server] 1장. 조회

박상준·2024년 6월 27일

SQL-쿡북

목록 보기
1/1
  • MSSQL 기준

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;
  • COALESCE
    • 로 null 값을 실제값으로 변경

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
ENAMESALCOMM
TURNER15000
ALLEN1600300
WARD1250500
MARTIN12501400
BLAKE2850null
CLARK2450null
SCOTT3000null
KING5000null
ADAMS1100null
JAMES950null
FORD3000null
MILLER1300null
JONES2975null
SMITH800null
  • 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
    ENAMESALCOMM
    SMITH800null
    JONES2975null
    BLAKE2850null
    CLARK2450null
    SCOTT3000null
    KING5000null
    ADAMS1100null
    JAMES950null
    FORD3000null
    MILLER1300null
    MARTIN12501400
    WARD1250500
    ALLEN1600300
    TURNER15000

    2.6 데이터 종속 키 기준으로 정렬하기

    SELECT ENAME, SAL, JOB, COMM
    FROM dbo.EMP
    ORDER BY CASE
                 WHEN JOB = 'SALESMAN' THEN COMM
                 ELSE SAL END
    ENAMESALJOBCOMM
    TURNER1500SALESMAN0
    ALLEN1600SALESMAN300
    WARD1250SALESMAN500
    SMITH800CLERKnull
    JAMES950CLERKnull
    ADAMS1100CLERKnull
    MILLER1300CLERKnull
    MARTIN1250SALESMAN1400
    CLARK2450MANAGERnull
    BLAKE2850MANAGERnull
    JONES2975MANAGERnull
    SCOTT3000ANALYSTnull
    FORD3000ANALYSTnull
    KING5000PRESIDENTnull
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글