SQLD/SQL 기본과 활용
-
Oracle SQL) 계층형 쿼리와 셀프조인SQLD/SQL 기본과 활용 2020. 9. 1. 16:54
# 계층형 데이터 - 동일 테이블에 계층적으로 상위 및 하위 데이터가 포함된 데이터 ex) EMP 테이블의 사원번호 및 그 사원의 관리자번호 # 셀프조인 - FROM 절에 동일 테이블을 2번이상 기술하는 조인 (재귀호출) # 순방향 전개 - 자식 노드로 전개 # 역방향 전개 - 부모 노드로 전개 # 리프데이터 - 자식노드가 존재하지 않는 데이터 # 루트데이터 - 계층형데이터에서 최상위에 위치하는 데이터 (순방향이냐 역방향이냐에 따라 루트가 달라짐) # 사이클 - 데이터 전개 중 이미 나타났던 동일한 데이터가 다시 나타날때, 이것을 사이클이 발생했다고 지칭하며, 런타임 오류를 발생시킨다. # 계층형 쿼리(질의) (Hierarchical Query) # Oracle # Syntax SELECT ... FRO..
-
SQL) Top N 쿼리SQLD/SQL 기본과 활용 2020. 9. 1. 16:35
# Top N 쿼리 : 상위 n개의 데이터를 추출하는 쿼리 1. Oracle # ROWNUM Pseudo Column - WHERE 절에서 행의 갯수를 제한 - WHERE과 ORDER BY를 같이 쓰면 WHERE가 먼저 순서이므로, 무작위 데이터3개 중 정렬된 데이터가 출력됨. (상위 몇개를 뽑는 Top N 쿼리가 아님) - ROWNUM으로 Top N 쿼리를 만드려면 인라인뷰로 처리할 것 SQL> SELECT ENAME, SAL FROM (SELECT ENAME,SAL FROM EMP ORDER BY SAL DESC) WHERE ROWNUM SELECT TOP(3) [PERCENT] # 키워드 없을시 탑2개, 키워드 있을시 탑 2퍼센트 데이터 출력 [WITH TIES] # 동일 수치의 데이터는 추가 출력..
-
SQL) WINDOW 함수(2) -그룹별 행 순서함수, 그룹별 비율함수SQLD/SQL 기본과 활용 2020. 8. 31. 19:30
# 그룹별 행 순서함수 1. FIRST_VALUE, LAST_VALUE 함수 (SQL Server 지원 안함) - 파티션별 윈도우에서 가장 먼저 나온 값 리턴 - 같은값에 대해선 윈도우에 먼저나온 데이터가 우선순위로 취급 # FIRST VALUE & LAST VALUE SQL> SELECT DEPTNO, ENAME, SAL ,FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL DESC ROWS UNBOUNDED PRECEDING ) AS ENAME_FV ,LAST_VALUE(ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL DESC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING )..
-
SQL) WINDOW 함수(1) -그룹내 순위함수,일반 집계함수SQLD/SQL 기본과 활용 2020. 8. 31. 17:23
# WINDOW 함수 ( = RANK, ANALYTIC 함수) # WINDOW FUCTION SYNTAX - OVER 키워드가 필수로 포함되어야 한다. - SQL Server에서는 OVER 절 내에 ORDER BY절, WINDOWING절 사용 불가 # []는 옵션(선택사항) SELECT WINDOW_FUCNTION(arguments) OVER ([PARTITION BY 칼럼] [ORDER BY 절] [WINDOWING 절]) FROM 테이블명; # WINDOWING 절 # BETWEEN 사용 타입 ROWS | RANGE BETWEEN UNBOUNDED PRECEDING | CURRENT ROW | VALUE_EXPR PRECEDING/FOLLOWING AND UNBOUNDED PRECEDING | CUR..
-
SQL) ROLLUP, CUBE 함수에 대한 이해와 고찰SQLD/SQL 기본과 활용 2020. 8. 31. 16:20
# SQL 전문가 가이드만으로는 미천한 나의 머리가 따라가지 못했다. # ROLLUP 과 CUBE 함수의 작동원리가 너무 궁금한 나머지 구글링과 직접실험을 하여 얻은 지식을 여기에 공유하고자 한다. 1. ROLLUP 작동원리 위 그림 한장이면 충분하다고 본다. 그래도 이해가 되지않으면 밑의 CUBE 함수 작동원리 예제를 보며, 출력 값을 자세히 들여다보고, 실제로 ROLLUP 함수를 DB에서 돌려본다면 이해가 빠를것이다. 출처에 표기된 사이트의 포스팅도 참고하면 이해에 도움이 될 것이다. 2. CUBE 함수 작동원리 - SQL 전문가 가이드에서는 칼럼의 수가 N이라고 할때 2의 N제곱 LEVEL의 Subtotal을 생성한다고 한다. - 책에서 등장한 LEVEL 에 대한 예시와 설명은 단 한번 등장한다. ..
-
스칼라 서브쿼리(Scalar SubQuery), 인라인 뷰(Inline View), 뷰(View)SQLD/SQL 기본과 활용 2020. 8. 28. 19:10
1. 스칼라 서브쿼리(Scalar SubQuery) - 1 row, 1 column 만 리턴하는 서브쿼리 - 칼럼을 사용할 수 있는 대부분의 곳에서 사용 가능 SQL> SELECT PLAYER_NAME, HEIGHT ROUND((SELECT AVG (X.HEIGHT) FROM PLAYER X WHERE X.TEAM_ID = P.TEAM_ID),2) AS AVG_HEIGHT FROM PLAYER P; # 실행결과 PLAYER_NAME HEIGHT AVG_HEIGHT ------------------------------------------------------- 밀리토 169 177.89 스털링 178 180.01 고종수 188 175.66 김정환 170 179.99 노홍철 180 181.23 이승우 1..
-
단일행 서브쿼리(Single Row SubQuery), 다중행 서브쿼리(Multi Row SubQuery), 다중 칼럼 서브쿼리(Multi Column SubQuery), 연관 서브쿼리(Correlated Subquery)SQLD/SQL 기본과 활용 2020. 8. 27. 21:29
# 서브쿼리가 좋을지 조인이 좋을지는 옵티마이저가 판단하여 실행하므로, 서브쿼리로 인한 성능저하는 걱정하지 않아도 된다. # 하지만, 서브쿼리로 테이블 접근횟수가 늘어나는 것은 지양해야한다. # 서브쿼리는 괄호로 감싸서 기술한다. 1. 단일행 서브쿼리 - 리턴값이 1개 이하인 서브쿼리 - 단일행 비교연산자와 사용 ex) =, , SQL> SELECT PNAME, POSITION FROM PLAYER WHERE HEIGHT SELECT T_NAME FROM TEAM WHERE TEAM_ID IN (SELECT TEAM_ID FROM PLAYER WHERE PNAME = '이천수'); # 조인이 아니다. 단순 연산일뿐 # 실행결과 (서브쿼리의 리턴행은 2개이고 그 두개 행중에 속한다면 출력) T_NAME -..
-
OUTER JOIN 심화 (ANSI/ISO SQL 표준방식의 OUTER JOIN)SQLD/SQL 기본과 활용 2020. 8. 27. 19:51
참고1 ) (+)로 조인시, 불명확하게 보일 수도 있고, DMBS 마다 문법이 다르며, (+)가 누락된 조인 및 검색 조건 존재시 INNER JOIN으로 수행, FULL OUTER JOIN 미지원 등 불편함이 있다. 참고2 ) 그리하여, ANSI/ISO SQL 표준 방식의 OUTER JOIN 문법을 사용하면 높은 호환성을 가질 수 있다. 본문은 ANSI/ISO SQL 표준 방식을 사용할 것이다. (FROM절에서 정의한다.) 수행에 사용한 데이터 1. LEFT OUTER JOIN - 조인 수행시 좌측 테이블이 기준이 되며 먼저 읽는다. 우측 테이블에서 조인 대상 데이터를 읽어온다. - 즉, 우측 테이블에서 조인 조건을 만족하는 값이 없으면, NULL 값을 반환한다. - LEFT JOIN 으로 OUTER 키..