YJ의 새벽
sqld (4) - SQL 활용 본문
- 집합 연산자
-- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 때 사용.
-- SELECT 절의 컬럼 수가 동일하고, SELECT 절의 동일 위치에 존재하는 컬럼의 데이터 타입이 상호 호환일때 사용
- 일반 집합 연산자
UNION : 합집합 ( 중복 행 1개로 .. )
UNION ALL : 합집합 ( 중복행 모두 표시 )
INTERSECT : 교집합 ( 중복행 1개로 .. )
MINUS : 차집합 ( 중복행 1개로 .. )
CROSS JOIN : 곱집합 , product
- 순수 관계 연산자
SELECT --> WHERE 절로 구현
PROJECT --> SELECT 절로 구현
NATRUAL JOIN --> 다양한 JOIN 으로 구현
DIVIDE -- 현재사용 x
- JOIN
1. INNER JOIN : JOIN 조건에서 동일한 값이 있는 행만 반환.
USING 이나 ON 절을 필수적으로 사용
2. NATURAL JOIN : 두 테이블간 동일한 이름을 갖는 모든 컬럼에 대해 EQUI JOIN 수행
3. USING 조건절 : 같은 이름을 가진 컬럼들중 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN 할수있다.
ALIAS 나 테이블 이름과 같은 접두사를 붙일 수 없다 .
4. ON 조건절 : 컬럼명과 다르더라도 JOIN 조건을 사용할 수 있다., ALIAS, 테이블명 반드시 사용
5. CROSS JOIN : 양쪽 집합의 M * N 건의 데이터 조합이 발생. == 카테시안 곱
6. OUTER JOIN ( LEFT, RIGHT , FULL )
JOIN 조건에서 동일한 값이 없는 행도 반환 가능하다.
USING 이나 ON 조건절 반드시 사용해야 함.
SQL 식에서 (+) 안붙은 쪽으로 JOIN 한다.
-- LEFT OUTER JOIN : 먼저 표기된 좌측 테이블에 해당하는 데이터를 읽은 후,
나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다.
같은 값이 없는경우 NULL 값으로 채운다.
-- RIGHT OUTER JOIN : LEFT OUTER JOIN 과 반대.
-- FULL OUTER JOIN : 좌우측 테이블의 모든 데이터를 읽어 JOIN 하며 결과를 생성.
중복 데이터는 삭제한다.
- 셀프 조인
한 테이블 내 두 컬럼이 연관 관계가 있을때, 동일 테이블에 사이의 조인,
- 계층형 질의
테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용 ex ) 사원과 팀장
START WITH : 계층 구조 전개의 시작 위치 지정
CONNECT BY : 다음에 전개될 자식 데이터 지정
PRIOR : CONNECT BY 절에 사용되며, 현재 읽은 컬럼을 지정한다.
PRIOR 자식 = 부모 형태를 사용하면 부모 -> 자식 형태로 전대하는 순방향 전개.
PRIOR 부모 = 자식 역방향 전개.
NOCYCLE : 동일한 데이터가 전개되지 않음.
ORDER SIBLINGS BY~ : 형제 노드간의 정렬 수행 . ( 동일 LEVEL )
WHERE : 모든 전개를 수행한 후, 지정된 조건을 만족하는 데이터만 추출.
LEVEL : 루트데이터이면 1 , 그 하위는 2 , 리프데이터까지 1씩 증가
CONNECT_BY_ISCYCLE : 해당 데이터가 조상이면 1, 아니면 0 ( CYCLE 옵션을 사용했을시만 사용가능 )
- 서브 쿼리
하나의 SQL 문 안에 포함되어 있는 또다른 SQL문, 알려지지 않은 기준을 이용한 검색에 사용.
-- 서브쿼리는 괄호로 감싸서 사용한다.
-- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.
단일행 비교 연잔자는 서브쿼리의 결과가 반드시 1건 이하여야 하고,
복수행 비교 연산자는 결과 건수와 상관없다.
-- 서브쿼리에서는 ORDER BY 절 사용 X
*** 단일행 비교 연산자 : = , < , > , <> 등.
*** 다중행 비교 연산자 : IN, ALL , ANY , SOME 등
- 스칼라 서브쿼리
한 행, 한 컬럼만을 반환하는 단일행 서브쿼리.
- 인라인 뷰
FROM 절에서 사용되는 서브쿼리. ( 메인쿼리의 컬럼 참조 불가 )
ORDER BY 사용가능.
- 순위 관련 함수
RANK : 동일한 값에 동일순위 부여 ( 1, 2 , 2 , 4 )
DENSE_RANK : 동일한 값에 대해 동일한 순위 부여 ( 1, 2, 2, 3 )
ROW_NUMBER : 동일한 값이라도 고유 순위 부여 ( 1, 2, 3, 4 )
- 조인 연산
1. Nested Loop Join
-- 하나의 집합을 기준으로 순차적으로 연결 테이블의 row 를 결합
-- Random Access ( 좁은 범위에 유리 ) --> 부하 가능성
-- 후행 테이블에 조인을 위한 인덱스 필요.
-- 온라인 트랜잭션 처리 (OLTP) 에 유리.
2. Sort Merge Join
-- 양쪽 테이블 처리 범위를 각자 access .
-- 마땅한 인덱스 없을때 / 조인의 범위가 넓을 때
-- 정렬후 merge
3. Hash Join
-- sort 대신 hash 값을 이용해 table 조인.
-- 대용량 처리에 best
-- 연산자가 '=' 일때만 사용 가능, == EQUI JOIN
-- 두 개 테이블 중 더 작은 테이블을 hash 메모리에 로딩.
'SelfStudy > sqld' 카테고리의 다른 글
sqld (3) - SQL 기본 (0) | 2024.02.21 |
---|---|
sqld (2) - 데이터 모델과 성능 (0) | 2024.02.21 |
sqld (1) - 데이터 모델링의 이해 (0) | 2024.02.21 |