2과목(2장: SQL활용)

2과목(2장: SQL활용)

JOIN

- Left join이라고 말하면 Left outer join을 말하는 것.

- ORACLE에서 OUTER JOIN 구문을 + 기호로 사용하여 처리할 수 있음

- JOIN에서 ON을 통해 조건을 걸 수 있음

M*N cartesian product(카티시안곱) => CROSS JOIN

SELF JOIN은 하나의 테이블에서 두개의 칼럼이 연관관계를 가질 때 사용

동일 테이블 조인을 수행하면 테이블과 칼럼이름이 모두 동일하기 때문에 식별을 위해서 반드시 별칭ALIAS를 사용

SINGLE ROW 단일행 서브쿼리 - 서브쿼리 실행결과가 항상 1건 이하

- = < <= > >= < > MULTI ROW 다중행 서브쿼리 - 실행결과가 여러건

- 다중행 비교연산자(IN, ALL, ANY, EXISTS, SOME)와 함께 사용 MULTI COLUMN 다중 칼럼 서브쿼리 - 실행결과가 여러칼럼

- 메인 쿼리 조건절에 여러 칼럼을 동시에 비교

- 서브쿼리와 메인쿼리의 비교하고자하는 칼럼 개수와 칼럼 위치가 동일해야 함

*다중행 비교연산자는 단일행 서브쿼리에도 사용 가능

EXISTS

EXISTS(~~~) : 괄호 안 조건에 충족하는 결과를 반환

NOT EXISTS(~~~) : 괄호 안 조건에 충족하는 결과를 제외한 모든 것을 반환

SELECT A, B FROM TAB1 EXCEPT

SELECT A, B FROM TAB2

=> 묶여있던 SELECT A, B를 NOT IN으로 바꿔서 표현할때 A와 B를 동시에 진행해야 함.

만약, A에서 NOT IN~~ , B에서 NOT IN~~~ 이런식으로 따로따로 NOT IN을 진행하면 값이 달라짐.

IN과 EXISTS의 차이

IN : 모든 값을 확인한 뒤, 수행 중단

EXISTS : 해당 ROW에 조건만족하는 결과의 존재여부를 확인 후, 수행 중단

EXCEPT

- 차집합(LEFT/RIGHT OUTER ONLY와 같은)에서 연산으로 NOT IN 또는 NOT EXISTS로 대체하여 처리 가능

개념정리

UNION : 여러개 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만듦(=중복제거)

UNION ALL : 중복된 행이 포함된 합집합(같은내용 여러개 일 수도)

INTERSECT : 여러 SQL문의 교집합. 중복된 행은 하나의 행(=중복값없음)

EXCEPT : 중복행은 하나로(일부 DB에서는 MINUS를 사용) => SQL가 - SQL나 = SQL가에서 나를뺀 차집합

UNION은 UNION

INTERSECTION은 INTERSECTION

DIFFERENCE는 EXCEPT (ORACLE은 MINUS)

PRODUCT는 CROSS JOIN 으로 기능 구현

UNION ALL

- UNION ALL을 사용하는 경우, ALIAS(표 속성명이나 이름을 나타내는 별칭)은 첫번쨰 SQL모듈 기준으로 표시되고 정렬 기준은 마지막 SQL모듈에 표시

- UNION ALL 이후 UNION을 수행하게되면 UNION이 중복값을 제거하고 정렬이 발생함.

- 중복레코드를 유지하는 UNION ALL은 ORDER BY가 없으면 정렬발생하지 않음.

(UNION은 중복값이 없어서 자동으로 정렬을 하게 됨)

ORACLE 계층형 질의

- START WITH절은 계층구조의 시작점

- 순방향 : 부모기준 자식 정렬

- ORDER SIBLINGS BY : 형제 노드 사이 정렬

- 루트 노드 LEVEL 값은 1

* START WITH에서 부모데이터의 조건을 지정

* ORDER SIBLINGS BY는 형제노드(동일레벨에서)로 수행

PRIOR

- CONNECT BY에서 사용

- PRIOR 부모 = 자식 => 자식 ⊃ 부모 (역방향)

- PRIOR 자식 = 부모 => 자식 ⊂ 부모 (순방향)

계층형질의(Hierachival Query)

계층형 데이터가 존재할 때, 데이터 조회를 위해 계층형질의(Hierachival Query)이용

계층형 데이터? 동일 테이블에 계층적으로 상위/하위 데이터가 포함됨을 말함

- SQL SERVER에서 계층형 질의문은 CTE(Common Table Escpression)을 재귀호출 함으로서 계층 구조를 전개

- 계층형 질의문은 앵커멤버를 실행하여 기본 결과 집합을 만들고, 이후 재귀멤버를 지속적으로 실행

- ORACLE 계층형 질의문에서 where절은 모든 전개를 진행한 이후 필터 조건으로서 조건에 부합하는 데이터만을 추출하는 데 활용

- priror 키워드는 select, where, connect by절에서 사용가능

from http://moonday.tistory.com/216 by ccl(A) rewrite - 2021-09-02 11:26:12