SQL로 데이터 다루기 II

.·2022년 1월 31일

집합연산자 & 계층형질의

STANDARD SQL

관계형 대수

  • 관계형 데이터베이스에서 원하는 정보를 유도하기 위한 기본 연산 집합
  • 일반 집합 연산, 순수 관계 연산이 있음

일반 집합 연산

순수 관계 연산

셀렉션은 행 프로젝션은 열 디비전은 두 번째 오는 테이블과 연관된 데이터만 출력(디비전은 DB를 다룰 때 사용하진 않음)


집합 연산자 개념 - UNION/UNION ALL

집합 연산자란?

  • 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나
  • 테이블에서 SELECT한 컬럼의 수와 각 컬럼의 데이터타입이 테이블 간 상호 호환 가능해야 한다.

UNION(합집합)

  • 두 개의 테이블을 하나로 만드는 연산
  • UNION에 사용할 컬럼의 수와 데이터 형식이 일치해야 하며 합친 후에 테이블에서 중복된 데이터는 제거. 이를 위해 UNION은 테이블을 합칠 때 정렬 과정을 발생시킴
  • 관계형 대수의 일반 집합 연산에서 합집합의 역할

    데이터 연결 및 (정렬 밑에 A4잘려있음)

UNION ALL

  • UNION과 거의 동일하지만 복 제거와 정렬을 하지 않음


집합 연산자 개념 - INTERSECT

INTERSECT

  • 두 개의 테이블에 대해 겹치는 부분을 추출하는 연산
  • 추출 후에는 중복된 결과를 제거
  • 관계형 대수의 일반 집합 연산에서 교집합의 역할
  • Oracle/Maria DB에서는 intersect 키워드가 지원되지만 MySQL에서는 지원x(mysql에선s join 등을 활용해야함)


집합 연산자 개념 - EXCEPT

EXCEPT

  • 두 개의 테이블에서 겹치는 부분을 앞의 테이블에서 제외하여 추출하는 연산
  • 추출 후에는 중복된 결과를 제거
  • 관계형 대수의 일반 집합 연산에서 차집합의 역할
  • Oracle/Maria DB에서는 intersect 키워드가 지원되지만 MySQL에서는 지원x(mysql에선s join 등을 활용해야함)


계층형 질의 - Oracle

계층형 질의란?

  • 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용하는 것

계층형 데이터

  • 동일 테이블에 계층적으로 상위와 하위 데이터가 포함되어 있는 데이터

계층형 질의 예시(ORACLE)


CONNECT BY 키워드(Oracle)

ISLEAF에서 최하위면 1 아니면 0으로 표시


계층형 질의 - SQL Server/MariaDB

무슨 소린지 모르겠고,, 나중에 다시 보기


JOIN 심화

JOIN

  • 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것

EQUI JOIN

  • 두 개의 테이블 간에 서로 정확하게 일치하는 경우를 활용한 조인
  • 등가 연산자('=')를 활용한 조인을 의미

Non EQUI JOIN

  • 두 개의 테이블 간에 서로 정확하게 일치하지 않는 경우를 활용한 조인
  • 등가 연산자 이외의 연산자를 활용한 조인을 의미

FROM절 JOIN형태 - INNER JOIN/ON

INNER JOIN


FROM절 JOIN형태 - INNER JOIN/USING/NATURAL JOIN

USING 조건절

NATURAL JOIN


FROM절 JOIN형태 - CROSS JOIN

CROSS JOIN

  • CROSS 생략 가능(inner join은 뒤에 on이 들어가기 때문에 구분 가능)

FROM절 JOIN형태 - OUTER JOIN

OUTER JOIN

  • 두 개의 테이블 간에 교집합을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회
  • 빈 곳은 NULL 값으로 출력
  • WHERE 조건절에서 한쪽에만 있는 데이터를 포함시킬 테이블 쪽으로 (+)를 위치

    (+)가 왼쪽에 있으므로 LEFT OUTER JOIN

표준 OUTER JOIN(LEFT JOIN)

왼쪽 테이블의 데이터는 다 출력이 되어야 한다.

표준 OUTER JOIN(RIGHT JOIN)

오른쪽 테이블의 데이터는 다 출력이 되어야 한다.

표준 OUTER JOIN(FULL OUTER JOIN)

FULL OUTER JOIN in MySQL

  • LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 UNION으로 합치면 FULL OUTER JOIN과 같은 결과를 출력할 수 있다.

FROM절 JOIN형태 - JOIN with WHERE

INNER JOIN

  • JOIN을 활용한 쿼리에서도 WHERE문을 이용하여 조건을 걸 수 있음


셀프조인

셀프 조인이란?

  • 동일 테이블 사이의 조인
  • 동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 별칭 필수

셀프 조인 예시 - 계층형 질의

ALPHA 관리자(+) = BETA.사원번호; 이렇게 되어야함(위에 잘못된거)


서브쿼리 심화

동작하는 방식에 따른 서브쿼리 분류

서브쿼리 분류

  • 서브쿼리에 메인쿼리의 컬럼이 포함되는지에 따라 구분
  • 연관 서브쿼리와 비연관 서브쿼리로 나눌 수 있음

연관 서브쿼리

  • 메인쿼리의 컬럼이 서브쿼리에 포함되며, 메인쿼리의 컬럼은 서브쿼리에 특정 조건으로 사용된다

비연관 서브쿼리

  • 메인쿼리 컬럼이 서브쿼리에 포함되지 않으며, 주로 메인쿼리에 특정한 값을 제공할 때 사용된다


반환되는 데이터 형태에 따른 서브쿼리 분류 - 단일 행 서브쿼리

서브쿼리 분류

  • 단일 행 서브쿼리
  • 다중 행 서브쿼리
  • 다중 컬럼 서브쿼리

단일 행 서브쿼리

  • 서브쿼리의 결과가 한 개의 행을 반환하며, 단일 행 비교 연산자(=,<,>,<=,>=)와 같이 사용된다


반환되는 데이터 형태에 따른 서브쿼리 분류 - 다중 행 서브쿼리

다중 행 서브쿼리

  • 서브쿼리의 결과가 두 개 이상 행을 반환할 수 있으며, 다중 행 비교 연산자(in, any, all, exists)와 같이 사용된다

다중 행 서브쿼리 - EXISTS


반환되는 데이터 형태에 따른 서브쿼리 분류 - 다중 컬럼 서브쿼리

다중 컬럼 서브쿼리

  • 서브쿼리의 결과가 여러 개의 컬럼을 반환하며, 메인쿼리의 조건과 동시에 비교된다


스칼라 서브쿼리

스칼라 서브쿼리

  • 스칼라 서브쿼리는 하나의 속성을 가지면서, 하나의 행만을 반환하는 쿼리이다. 그리고 이는 SELECT, WHERE, HAVING 절 등에서 사용할 수 있다.

스칼라 서브쿼리 예시 - DUAL

DUAL이란 테이블은 단순히 구문을 지키기 위해서 써주는 것이지 어떠한 값도 가지지 않음(MySQL이나 MariaDB에서는 DUAL 생략해도 상관 X)


뷰(VIEW)

VIEW

  • 뷰는 다른 테이블에서 파생된 테이블이다
  • 물리적으로 데이터가 저장되는 것이 아니라, 논리적으로만 존재하며 뷰를 사용한 질의 시에는 DBMS에서 뷰 정의에 따라 질의를 재작성하여 수행한다

VIEW의 장점

특징설명
독립성테이블 구조가 변경되어도 뷰를 사용하고 있는 응용 프로그램은 변경하지 않아도 된다
편리성자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해 놓으면, 추후 쿼리는 간단한 형태로 표현할 수 있다.
보안성사용자의 권한에 따라 열람 가능한 데이터를 다르게할 수 있다. 권한에 따라 확인 가능한 컬럼을 정의하여 뷰를 생성하면, 기본 테이블 노출 없이 접근 제어를 할 수 있다.

VIEW의 특징

  • 생성된 뷰는 또 다른 뷰를 생성하는데 사용될 수 있다.
  • 뷰의 정의는 변경할 수 없으며, 삭제 후 재생성이 필요하다.
  • 뷰를 통한 갱신에는 제약이 따른다. 갱신을 위해서는 기본적으로 원천 테이블의 기본키가 포함되어야 한다.
  • 원천이 되는 테이블이나 뷰가 삭제되면 이를 기반으로 하는 뷰도 함께 삭제된다.

VIEW 정의 쿼리


그룹 함수 & 윈도우 함수

데이터 분석을 위한 함수

  • 윈도우 함수
  • 집계 함수
  • 그룹 함수

윈도우 함수 - 순위 함수

0개의 댓글