본문 바로가기

분류 전체보기

(125)
[불친절한 SQL 프로그래밍] [15장] Top-N 쿼리 - 15.1 기본 문법 (ROWNUM 방식, 분석함수(ROW_NUMBER, PERCENT_RANK) 방식) 15.1.1 ROWNUM 문법 ORDER BY 절로 행을 정렬하고, 정렬된 행을 ROWNUM 슈도 칼럼으로 제한한다. ROWNUM 슈도 칼럼은 행이 반환되는 순서대로 순번을 반환한다. 1부터 시작하고 행이 반환될 때마다 순번이 증가한다. Top-N 쿼리는 시스템 성능에 미치는 영향이 크기 때문에 작성 표준을 신중하게 결정해야 한다. 현재까지는 ROWNUM 방식을 가장 많이 사용하고 있다. SELECT empno, sal, ROWNUM AS rn WHERE ROWNUM = 2; 위의 쿼리는 결과가 반환되지 않는다. ROWNUM 슈도 칼럼은 1부터 시작하고 행이 반환될 때마다 순번이 증가하기 때문에 ROWNUM = 2 조건은 항상 FALSE 다. sal을 오름차순으로 정렬하여 상위 5개의 행을 조회할 때, ..
[불친절한 SQL 프로그래밍] [14장] 분석 함수 - 14.2 분석 함수 (LAG, LEAD, LISTAGG 함수) 379p 14.2.6 기타 함수 LAG 함수 LAG 함수는 현재 행에서 offset 이전 행의 value_expr을 반환한다. offset은 행 기준이며 기본값은 1이다. default에 이전 행이 없을 경우 반환할 값을 지정할 수 있다. default의 기본값은 널이다. LAG (value_expr [, offset [, default]]) [IGNORE NULLS] OVER ([query_partition_clause] order_by_clause) LEAD 함수 LEAD 함수는 현재 행에서 offset 이후 행의 value_expr을 반환한다. LEAD (value_expr [, offset [, default]]) [IGNORE NULLS] OVER ([query_partition_clause] ..
[불친절한 SQL 프로그래밍] [12장] 서브 쿼리 - 12.5 WITH절 12.5.1 SUBQUERY FACTORING 절 SUBQUERY FACTORING 절을 사용하면 서브 쿼리에 이름을 부여하고, 이름이 부여된 서브쿼리를 메인 쿼리에서 반복 사용할 수 있다. WITH query_name AS (subquery) [, query_name AS (subquery)]... SELECT * FROM query_name;
[불친절한 SQL 프로그래밍] [10장] GROUP BY절과 HAVING절 - 10.2 GROUP BY 절의 확장 기능(ROLL UP, CUBE, GROUPING SETS) p.204 10.2.1 ROLLUP ROLLUP은 지정한 표현식의 계층별 소계와 총계를 집계한다. ROLLUP(expression_list [, expression_list] ...) ROLLUP은 아래와 같이 동작한다. expr을 뒤쪽부터 하나씩 제거하는 방식이다. 결과에서 (a, b, c)는 a, b, c의 소계, ()는 총계를 의미한다. GROUP BY 결과 ROLLUP (a) (a), ( ) ROLLUP (a, b) (a, b), (a), ( ) ROLLUP (a, b, c) (a, b, c), (a, b), (a), ( ) 10.2.2 CUBE CUBE는 지정한 표현식의 모든 조합을 집계한다. CUBE (expression_list [, expression_list] ...) CUBE는 아래와 ..
[불친절한 SQL 프로그래밍] [7장] WHERE절 - 7.6 널 조건 (LNNVL 함수) p.156 LNNVL 함수 LNNVL 함수는 condition이 FALSE나 UNKNOWN이면 TRUE, TRUE면 FALSE를 반환한다. WHERE절과 CASE 표현식에 사용할 수 있다. LNNVL(condition) SELECT ename, comm FROM emp WHERE (comm IS NULL OR comm = 0); 두 쿼리는 논리적으로 동일하다.
[불친절한 SQL 프로그래밍] [7장] WHERE절 - 7.4 IN조건 IN조건은 expr의 목록과 일치하거나 일치하지 않는 행을 반환한다. expr [NOT] IN (expr [,expr]) IN조건은 널이 입력되어도 결과가 반환된다. 위 쿼리는 SELECT ename, mgr FROM emp WHERE mgr = 7839 OR mgr = NULL; 의 쿼리로 해석된다. mgr = NULL 조건은 UNKNOWN으로 평가되고, OR 조건은 조건이 하나라도 TRUE이면 TRUE이므로 mgr = NULL 조건이 무시된다. NOT IN 조건의 expr에 널이 입력되면 결과가 반환되지 않는다. IN 조건을 아래와 같은 방식으로 사용할 수도 있다. 위 쿼리는 SELECT ename, empno, mgr FROM emp WHERE (empno = 7839 OR mgr = 7839); ..
[불친절한 SQL 프로그래밍] [6장] 단일 행 함수 - 6.6 비교 함수 (LEAST / GREATEST) 비교 함수(general comparison function)는 값 집합의 최소값이나 최대값을 결정하는 함수다. LEAST 함수 LEAST 함수는 expr 중 최소값을 반환한다. expr에 널이 입력되면 널을 반환한다. LEAST(expr [, expr] ...) GREATEST 함수 GREATEST 함수는 expr 중 최대값을 반환한다. expr에 널이 입력되면 널을 반환한다. GREATEST(expr [, expr] ...) LEAST 함수와 GREATEST 함수는 expr의 데이터 타입이 동일해야 한다. 데이터타입이 다른 expr은 첫 번째 expr의 데이터 타입으로 변환된다.
[불친절한 SQL 프로그래밍][6장] 단일 행 함수 - 6.5 널 관련 함수 NVL 함수 NVL 함수는 expr1이 널이 아니면 expr1, 널이면 expr2를 반환한다. NVL(expr1, expr2) NVL2 함수 NVL2 함수는 expr1이 널이 아니면 expr2, 널이면 expr3를 반환한다. NVL2(expr1, expr2, expr3) COALESCE 함수 COALESCE 함수는 널이 아닌 첫 번째 expr을 반환한다. NVL 함수의 기능을 확장한 함수다. COALESCE(expr [, expr] ...) NULLIF 함수 NULLIF 함수는 expr1과 expr2가 다르면 expr1, 같으면 널을 반환한다. NULLIF(expr1, expr2)