Search
Duplicate

SQL 활용

태그
JOIN
서브쿼리
함수
EQUI JOIN
EQUI JOIN (등가조인)
교집합
= 로 두 개의 테이블을 연결한다.
조인문에 추가 조건 및 정렬을 할 수 있다.
SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.ENAME LIKE '임%' ORDER BY ENAME;
SQL
복사
INNER JOIN
SELECT * FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTON AND EMP.ENAME LIKE '임%' ORDER BY ENAME;
SQL
복사
HASH JOIN
해시 조인은 먼저 선행 테이블을 결정하고 선행 테이블에서 주어진 조건에 해당하는 행을 선택한다. 해당 행이 선택되면 조인 키를 기준으로 해시 함수를 사용해서 해시 테이블을 메인 메모리에 생성하고 후행 테이블에서 주어진 조건에 만족하는 행을 찾는다.
후행 테이블의 조인 키를 사용해서 해시 함수를 적용하여 해당 버킷을 검색한다.
INTERSECT 연산
두 개의 테이블에서 교집함을 조회한다.
SELECT DEPTNO FROM EMP INTERSECT SELECT DEPTNO FROM DEPT;
SQL
복사
NON-EQUI JOIN
두 개의 테이블 조인시 = 를 사용하지 않고 >, <, ≥, ≤ 등을 사용한다.
정확하게 일치하지 않는 것을 조인하는 것이다.
OUTER JOIN
두 테이블 간에 교집합을 조회하고, 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다.
SELECT * FROM DEPT, EMP WHERE EMP.DEPTNO (+)= DEPT.DEPTNO;
SQL
복사
CROSS JOIN
조인구가 없기 때문에 카테시안 곱이 발생한다.
UNION
두 개의 테이블을 하나로 만드는 연산이다.
두 테이블의 칼럼 수, 칼럼의 데이터 형식 모두가 일치해야 한다.
중복된 데이터를 제거한다.
SORT 과정이 발생한다.
SELECT DEPTNO FROM EMP UNION SELECT DEPTNO FROM EMP; // UNION ALL : 중ㅁ복을 제거하거나 정렬을 유발하지 않는다. SELECT DEPTNO FROM EMP UNION ALL SELECT DEPTNO FROM EMP;
SQL
복사
MINUS
먼저 쓴 SELECT 문에는 있고, 뒤에 써는 SELECT 문에는 없는 집합을 조회하는 것이다.
MYSQL 에서는 EXCEPT 를 쓴다.
SELECT DEPTNO FROM DEPT MINUS SELECT DEPTNO FROM EMP;
SQL
복사
계층형 조회
CONNECT BY 키워드
LEVEL : 검색 항목의 깊이를 의미한다.
CONNECT_BY_ROOT : 계층 구조에서 가장 최상위 값을 표시한다.
CONNECT_BY_ISLEAF : 계층 구조에서 가장 최하위를 표시한다.
SYS_CONNECT_BY_PATH : 계층 구조의 전체 전개 경로를 표시한다.
NOCYCLE : 순환 구조가 발생지점까지만 전개된다.
CONNECT_BY_ISCYCLE : 순환 구조 발생 지점을 표시한다.
계층형 조회
START WITH 조건 : 계층 전개의 시작 위치를 지정한다.
PRIOR 자식 = 부모 : 순방향 전개
PRIOR 부모 = 자식 : 역방향 전개
NOCYCLE : 사이클 발생하지 않게 한다.
ORDER SIBLINGS BY ‘칼럼명’ : 동일한 LEVEL 인 형제노드 사이에서 정렬 수행
서브쿼리
SELECT 문 내에 다시 SELECT 문을 사용한다.
FROM 문에 SELECT 사용하면 인라인뷰이다.
WHERE 문에 SELECT 사용하면 서브쿼리이다.
단일행 서브쿼리
반환하는 행 수가 한 개
비교 연산자 ≤, <, ≥, >, <> 를 사용한다.
다중행 서브쿼리
IN : 서브쿼리의 결과 중 하나만 동일하면 참이된다. (OR 조건)
ALL
메인쿼리와 서브쿼리의 결과가 모두 동일하면 참이 된다.
< ALL : 최솟값을 반환한다.
> ALL : 최댓값을 반환한다.
ANY
메인 쿼리의 비교조건이 서브쿼리의 결과 중 하나 이상 동일하면 참이 왼다.
< ANY : 하나라도 크게 되면 참이 된다.
> ANY : 하나라도 작게 되면 참이 된다.
EXISTS
메인쿼리와 서브쿼리의 결과가 하나라도 존재하면 참이 된다.
어떤 데이터 존재 여부를 확인한다. 때문에 참 / 거짓을 반환한다.
스칼라 서브쿼리
반드시 한 행과 한 칼럼만 반환하는 서브쿼리이다.
연관 서브쿼리
서브쿼리 내에서 메인 쿼리 내의 칼럼을 사용하는 것을 의미한다.
GROUP FUNCTION
ROLLUP
SELECT DEPTNO, JOB, SUM(SAL) FROM EMP GROUP BY ROLLUP (DEPTNO, JOB); // 부서별, 직업별 합계를 구한다. // ROLLUP 은 SUBTOTAL 을 구한다.
SQL
복사
GROUPING
ROLLUP, CUBE, GROUPING SETS 에서 생성되는 합계값을 구분하기 위해 만들어졌다.
소계, 합계 등이 계산되면 1 을 반환한다.
SELECT DEPTNO, GROUPING(DEPTNO), JOB, GROUPING(JOB), SUM(SAL) FROM EMP GROUP BY ROLLUP (DEPTNO, JOB);
SQL
복사
GROUPING SETS
GROUP BY 에 나오는 칼럼의 순서와 관계없이 다양한 소계를 만들 수 있다.
개별적으로 모두 처리한다.
CUBE
결합 가능한 모든 집계를 계산한다.
다차원 집계를 제공한다.
윈도우 함수
SELECT WINDOW_FUNCTION(ARGUMENTS) OVER(PARTITION BY '칼럼' ORDER BY 'WINDOWING 절') FROM '테이블명';
SQL
복사
윈도우 함수 구조
ARGUMENTS(인수)
PARTITION BY : 전체 집합을 기준에 의해 소그룹으로 나눈다.
ORDER BY
WINDOWING
행 기준의 범위를 정한다.
ROWS 는 물리적 결과의 행 수 이고, RANGE 는 논리적인 값에 의한 범위이다.
ROWS : 행의 집합을 지정한다.
RANGE : 논리적인 주소에 의해 행 집합을 지정한다.
BETWEEN ~ AND : 윈도우의 시작과 끝의 위치를 지정한다.
UNBOUNDED PRECEDING : 윈도우의 시작 위치가 첫번째 행임을 의미
UNBOUNDED FOLLOWING : 윈도우 마지막 위치가 마지막 행임을 의미한다.
CURRENT ROW : 윈도우 시작 위치가 현재 행임을 의미
// 첫번째 행부터 현재 행까지의 합계를 구한다. SELECT EMPNO, ENAME, SAL, SUM(SAL) OVER (ORDER BY SAL ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) TOTSAL FROM EMP; // 현재 행부터 마지막 행까지의 합계이다. SELECT EMPNO, ENAME, SAL, SUM(SAL) OVER (ORDER BY SAL ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) TOTSAL FROM EMP;
SQL
복사
순위 함수
RANK : 동일한 순위는 동일한 값이 부여된다.
DENSE_RANK : 동일한 순위를 하나의 건수로 계산한다.
ROW_NUMBER : 동일한 순위에 대해서 고유의 순위를 부여한다.
SELECT ENAME, SAL, RANK() OVER (ORDER BY SAL DESC) ALL RANK, RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK FROM EMP;
SQL
복사
집계 함수
SUM
AVG
COUNT
MAX / MIN
행 순서 관련 함수
FIRST_VALUE (=MIN)
LAST_VALUE (=MAX)
LAG : 이전행을 가지고 온다.
LEAD : 특정 위치의 행을 가지고 온다.
비율 관련 함수
CUME_DIST
누적 백분율 조회
0 ~ 1 사이의 값을 가진다.
PERCENT_RANK
순서별 백분율 조회
0 ~ 1 사이의 값을 가진다.
SELECT DEPTNO, ENMAE, SAL, PERCENT_RENK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) AS PERCENT_SAL FROM EMP;
SQL
복사
NTITLE : 전체 건수를 ARGUMENT 값으로 N 등분한 결과 조회
SELECT DEPTNO, ENAME, SAL, NTITLE(4) OVER(ORDER BY SAL DESC) AS N_TITLE FROM EMP;
SQL
복사
RATIO_TO_REPORT : SUM 에 대한 행 별 칼럼값의 백분율을 소수점까지 조회한다.
테이블 파티션
파티션 기능
파티션은 대용량의 테이블을 여러 개의 데이터 파일에 분리해서 저장한다.
파티션 별로 독립적 관리 가능, 파티션 전용 인덱스 생성 가능
테이블 스페이스간 이동 가능
데이터 조회시 범위를 줄여서 성능 향상
RANGE PARTITION
값의 범위를 기준으로 여러 개의 파티션으로 데이터를 나누어 저장하는 것이다.
LIST PARTITION
특정 값을 기준으로 분할하는 방법이다.
HASH PARTITION
데이터베이스 관리 시스템이 내부적으로 해시 함수를 사용해서 데이터를 분할한다.
결과적으로 DBMS 가 알아서 분할하고 관리한다.
COMPOSITE PARTITION
여러 개의 파티션 기법을 조합해서 사용한다.
파티션 인덱스
GLOBAL INDEX : 여러 개의 파티션에서 하나의 인덱스를 사용한다.
LOCAL INDEX : 해당 파티션별로 각자의 인덱스를 사용한다.
PREFIXED INDEX : 파티션 키와 인덱스 키가 동일하다.
NON PREFIXED INDEX : 파티션 키와 인덱스 키가 다르다.