본문 바로가기
[커리어] 에디터의 자기계발/[도전] 비전공자 코딩 학습기록

[코딩 공부] 엘리스 SQL강의 수강일지 2강 1장 - 집합 연산자&계층형 질의

by 시루나 2022. 3. 2.
반응형

수업기록 5차. 

(강사님이 바뀌었다!)

1. 관계형 대수 : 관계형DB에서 원하는 정보를 유도하기 위한 기본 연산 집합

 -> 일반 집합 연산과 순수 관계 연산으로 이루어져있음

 1) 일반 집합 연산

 - 합집합 : 두 개 테이블의 모든 데이터를 추출 ⭐ 명령어 : UNION 

 - 교집합 : 두 개 테이블에서 공통되는 데이터만 추출 ⭐ 명령어 : INTERSECT

 - 차집합 : 두 개 테이블에서 특정 테이블에만 존재하는 데이터를 추출 ⭐ 명령어 : EXCEPT

 - 카디션 프로덕트 : 두 개 테이블에서 가능한 경우의 수를 추출 ⭐ 명령어 : CROSS JOIN

 2) 순수 관계 연산

 - 셀렉션 : 테이블에서 특정 행만 조회 ⭐ 명령어 : WHERE절

 - 프로젝션 : 테이블에서 특정 컬럼만 조회 ⭐ 명령어 : SELECT절

 - 조인 : 두 개의 테이블에서 새로운 테이블을 만드는 것⭐ 명령어 : 다양한 JOIN

 - 디비젼 : 두 개의 테이블에서 서로 연관된 부분만 조회  ⭐ 명령어 : 사용x

3) 집합 연산자 : 두 개 이상의 테이블에서 JOIN을 사용하지 않고 연관된 데이터를 조회하는 방법.

  ⭐ UNION 두 개의 테이블을 하나로 만드는 연산. 합친 후에 중복된 데이터는 제거한다. 즉 테이블1에는 있는 데이터와 테이블2에 있는 데이터 cf. UNION ALL은 중복제거X

    -> SELECT * / FROM 테이블 / UNION / SELECT * / FROM 테이블2;

  ⭐ INTERSECT 두 개의 테이블에서 공통되는 부분만 추출(중복된 결과는 제거). 즉 테이블1과 테이블2에 모두 있는 데이터 = 교집합

       -> SELECT 컬럼1,컬럼2 / FROM 테이블1 / INTERSECT / SELECT 컬럼1,컬럼2 / FROM 테이블2;

     주의 : MYSQL에서는 INTERSECT가 지원되지 않음 -> Oracle, Maria에서는 사용 가능.

  ⭐ EXCEPT 두 개의 테이블에서 겹치지 않는 부분만 추출하는 연산(중복된 결과는 제거). 즉 테이블1에는 있지만 테이블2에는 없는 데이터 = 차집합

       -> SELECT 컬럼1,컬럼2 / FROM 테이블1 / EXCEPT / SELECT 컬럼1,컬럼2 / FROM 테이블2;

    주의 : MYSQL에서는 EXCEPT가 지원되지 않음 -> Oracle(단, MINUS라는 명령어), Maria에서는 사용 가능.

 

2. 계층형 질의 : 계층형 데이터(상위-하위)가 존재하는 테이블에서 데이터를 조회하기 위해 사용하는 것

 -> 대표적인 DB로는 오라클, SQL Server가 있다.

 

ORACLE

    ⭐ SELECT level, 자식 컬럼, 부모 컬럼, 원하는 컬럼 / FROM 테이블 / START WITH or CONNECT BY

    ⭐ START WITH -> 부모 컬럼에서 최상위 데이터를 지정해줌.

    ⭐ CONNECT BY PRIOR -> 부모 컬럼과 자식 컬럼을 연결하는 방식을 지정해 줌. => 자식 컬럼의 A 부분 = 부모 컬럼의 B부분 (상하위가 없음)

    ⭐ CONNECT BY ROOT ->  현재 전개할 데이터의  최상위(=Root)값 표시

   ⭐ CONNECT BY ISLEAF ->  현재 전개할 데이터의  최하위(=Reaf)인지 아닌지 표시 -> 최하위이면 1 아니면 0

   ⭐ SYS CONNECT BY PATH(컬럼, 구분자) ->  루트 데이터에서 현재까지 전개한 경로 표시

START WITH 관리자 IS NULL -> 관리자가 없는 사원번호 1000이 최상위 데이터라는 의미

 

SQL SERVER

계층형 질의 : 계층형으로 테이블이 지속적으로 도출되는 형태. 재귀호출(1번째 순환 ~ N번째 순환)을 통해 도출됨.

 


 

1강과 2강의 차이인가... 계층형 질의는 이제껏 한 것 중에 제일 어렵고 복잡했다. @.@ 실무에서도 써먹어봐야 좀 더 익을 것 같은데 기회가 있을까 모르겠다. 재택근무가 끝나면 데이터팀의 직원이랑 얘기 좀 해봐야겠다고 생각!! 좀 어지럽지만 씩씩하게(?) 2강 2장으로 넘어가보자.

반응형

댓글