• 계층형 조회는 Oracle 데이터베이스에서 지원하는 것으로 계층형으로 데이터를 조회할 수 있음

  • Connect by는 트리 형태의 구조로 질의를 수행하는 것으로 START WITH구는 시작 조건을 의미하고 CONNECT BY PRIOR는 조인 조건임

  • Root 노드로부터 하위 노드의 질의를 실행함

  • 계층형 조회에서 MAX(LEVEL)을 사용해 최대 계층 수를 구할 수 있음

  • , 계층형 구조에서 마지막 Leaf Node의 계층값을 구함

*CONNECT BY 키워드

  • LEVEL: 검색 항목의 깊이를 의미함(계층구조에서 가장 상위 레벨이 1이 됨)

  • CONNECT_BY_ROOT: 계층구조에서 가장 최상위 값을 표시함

  • CONNECT_BY_ISLEAF: 계층구조에서 가장 최하위를 표시함

  • SYS_CONNECT_BY_PATH: 계층구조의 전체 전개 경로를 표시함

  • NOCYCLE: 순환구조가 발생 지점 까지만 전개 됨

  • CONNECT_BY_ISCYCLE: 순환구조 발생 지점을 표시함

 

서브쿼리(Subquery)

1.     Main querySubquery

  • SubquerySELECT문 내에 다시 SELECT문을 사용하는 SQL문임

  • Subquery의 형태는 FROM구에 SELECT문을 사용하는 인라인 뷰와 SELECT문에 Subquery를 사용하는 스칼라 서브쿼리 등이 있음

  • WHERE구에 SELECT문을 사용하면 서브쿼리라고 함

  • 괄호 안에 있는게 서브쿼리임

  • FROM구에 SELECT문을 사용해 가상의 테이블을 만드는 효과를 얻을 수 있음(인라인 뷰라고함)

2.     단일 행 서브쿼리와 다중 행 서브쿼리

  • 단일 행 서브쿼리는 단 하나의 행만 반환하는 서브쿼리로 비교연산자(=, <, <=, >, >=, <>)를 사용함

  • 다중 행 서브쿼리는 여러 개의 행을 반환하는 것으로 IN, ANY, ALL, EXISTS를 사용해야 함

*단일 행 서브쿼리: 서브쿼리를 실행하면 그 결과는 반드시 한 행만 조회 됨(비교연산자 사용)

*다중 행 서브쿼리: 서브쿼리를 실행하면 그 결과는 여러 개의 행이 조회 됨(다중 행 비교연산자인 IN, ANY, ALL, EXISTS 사용)

3.     다중 행 서브쿼리

  • 다중 행 서브쿼리는 서브쿼리 결과가 여러 개의 행을 반환하는 것으로 다중 행 연산자를 사용해야 함

  • IN(서브쿼리): 메인쿼리의 비교조건이 서브쿼리의 결과 중 하나만 동일하면 참이 됨(OR조건)

  • ALL(서브쿼리): 메인쿼리와 서브쿼리의 결과가 모두 동일하면 참이 됨(<ALL: 최솟값을 반환함, >ALL최댓값을 반환함)

  • ANY(서브쿼리): 메인쿼리의 비교조건이 서브쿼리의 결과 중 하나 이상 동일하면 참이 됨(<ANY: 하나라도 크게 되면 참이 됨, >ANY: 하나라도 작게되면 참이 됨)

  • EXISTS(서브쿼리): 메인쿼리와 서브쿼리의 결과가 하나라도 존재하면 참이됨

4.     스칼라(Scala) 서브쿼리

  • 스칼라 서브쿼리는 반드시 한 행과 한 칼럼만 반환하는 서브쿼리임

  • 만약 여러 행이 반환되면 오류가 발생함

5.     연관(Correlated) 서브쿼리

  • 연관 서브쿼리는 서브쿼리 내에서 메인 쿼리 내의 칼럼을 사용하는 것을 의미함

+ Recent posts