프로그래밍/SQLD

7. 2과목 제 2장 SQL 활용 (2) - 계층형 데이터

량아이 2022. 8. 27. 20:49

계층형 데이터란

동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.

예를들어, 사원 테이블에서는 사원들 사이에 상위 사원(관리자) 하위 사원 관계가 존재하고 조직 테이블에서는 조직들 사이에 상위 조직 하위 조직 관계가 존재한다.

 

계층형 질의

테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위한 구문

 

START WITH - 계층 구조 전개의 시작 위치 지정

CONNECT BY - 다음에 전개될 자식 데이터 지정, 부모&자식의 관계 지정

ㄴ PRIOR - 현재 읽은 칼럼을 지정한다.

                   PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터 (부모 -> 자식)방향으로 전개하는 순방향 전개를 한다.

                   PRIOR 부모 = 자식 (자식 -> 부모)방향으로 전개하는 역방향 전개를 한다.

94페이지 87번 문제

SQL Server에서의 계층형 질의문은

-CTE(Common Table Expression)를 재귀호출함으로서 계층 구조를 전개한다.

-앵커 멤버를 실행하여 기본결과 집합을 만들고 이후 재귀멤버를 지속적으로 실행한다.

ORACLE의 질의문에서

-WHERE 절은 모든 전개를 진행한 이후 필터조건으로서 조건을 만족하는 데이터만을 추출하는데 활용된다.

-PRIOR 키워드는 CONNECT BY, SELECT, WHERE절에서 사용가능하다

 

 

셀프조인(SELF JOIN)

동일 테이블 사이의 조인을 말한다.

FROM 절에 동일 테이블이 두 번 이상 나타난다.

동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 반드시 테이블 별칭(ALIAS)를 사용해야 한다.

 

 

DISTINCT - 중복 제거

SELECT COUNT (DISTINCT A | | B)

A 컬럼과 B 컬럼을 합친 상태로 중복 제거를 한다.

 

99페이지 94번 문제

SELECT 1 & SELECT 'X' 등등

이건 컬럼명이 아니라 자료가 있는가 없는가만 판별하는 역할

자료가 존재하면 1 출력 없으면 안나옴

 

101페이지 97번 문제

일반 서브 쿼리 - 하나의 변수처럼 사용, 쿼리 결과에 따라 다음과 같이 구분

  • 단일행 서브쿼리 - 쿼리 결과가 단일행만을 리턴하는 서브쿼리
  • 다중행 서브쿼리 - 쿼리 결과가 다중행을 리턴하는 서브쿼리
  • 다중 칼럼 서브쿼리 - 쿼리 결과가 다중칼럼을 리턴하는 서브쿼리 SQL Server에서는 현재 지원하지 않는 기능이다

 

단일행 서브쿼리 비교연산자

=, >, <, >=, ...

다중행 서브쿼리 비교연산자

IN, ALL, ANY, SOME ...

 

연관 서브쿼리 메인 쿼리에서 값을 제공받는다.

 

서브쿼리 사용시 주의사항

  1. 서브쿼리를 괄호로 감싸서 사용한다.
  2. 서브쿼리는 단일행 (Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다. 단일행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하이어야 하고 복수형 비교 연산자는 서브쿼리의 결과 건수와 상관없다.
  3. 서브쿼리에서는 ORDER BY를 사용하지 못한다. ORDER BY 절은 SELECT절에서 오직 한 개만 올 수 있기 때문에 ORDER BY절은 메인 쿼리의 마지막 문장에 위치해야 한다.

 

102 페이지 98번 문제