끄적끄적 코딩
article thumbnail
Published 2023. 4. 16. 22:47
[데이터베이스] JOIN 데이터베이스
728x90

JOIN 이란

- 둘 이상의 테이블에서 데이터가 필요한 경우 테이블 조인이 필요
- 일반적으로 조인 조건을 포함하는 WHERE 절을 작성해야 한다.
- 조인 조건은 일반적으로 각 테이블의 PK 및 FK로 구성됩니다.


JOIN 종류

- inner join
- outer join
  - left outer join
  - right outer join


JOIN 조건의 명시에 다른 구분

- natural join
- cross join(full join, cartesian join)


JOIN 시 주의 사항

- 조인의 처리는 어느 테이블을 먼저 읽을지를 결정하는 것이 중요
- INNER JOIN : 어느 테이블을 먼저 읽어도 결과가 달라지지 않아 MySQL 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다.
- OUTER JOIN : 반드시 OUTER가 되는 테이블을 먼저 읽어야 하므로 옵티마이저가 조인 순서를 선택할 수 없다.


INNER JOIN

가장 일반적인 JOIN의 종류이며 교집합이다.

등등 조인(Equl-Join)이라고도 하며, N개의 테이블 조인 시 N-1개의 조인 조건이 필요 함



OUTER JOIN

LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분 됨

어느 한 쪽 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않을 경우 그 데이터가 검색되지 않는 문제점을 해결하기 위해 사용



LEFT OUTER JOIN

왼쪽 테이블을 기준으로 JOIN 조건에 일치 하지 않는 데이터까지 출력


RIGHT OUTER JOIN

오른쪽 테이블을 기준으로 JOIN 조건에 일치 하지 않는 데이터까지 출력


FULL OUTER JOIN

양쪽 테이블을 기준으로 JOIN 조건에 일치 하지 않는 데이터까지 출력



SELF JOIN

같은 테이블끼리 JOIN


None-Equi JOIN

table의 PK, EK가 아닌 일반 column을 join 조건으로 지정

 

서브 쿼리 (Subquery)

- 서브 쿼리란 다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미한다.
- 서브 쿼리를 포함하고 있는 쿼리를 외부 쿼리 또는 메인 쿼리라고 부르며, 서브 쿼리는 내부 쿼리라고도 부른다.
- 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호’()’로 감싸져 있어야만 한다.


서브 쿼리의 종류

중첩 서브 쿼리(Nested Subquery) WHERE 문에 작성하는 서브 쿼리
1. 단일 행
2. 복수(다중) 행 - IN, ANY, ALL
3. 다중 컬럼
인라인 뷰 (Inline View) - FROM 문에 작성하는 서브 쿼리
스칼라 서브 쿼리 (Scalar Subquery) - SELECT 문에 작성하는 서브 쿼리


서브 쿼리 주의 사항

- 서브 쿼리는 반드시 ( )로 감싸야 한다.
- 서브 쿼리는 단일 행 또는 다중 행 비교 연산자와 함께 사용된다.


서브 쿼리가 사용이 가능 한 곳

- SELECT
- FROM
- WHERE
- HAVING
- ORDER BY
- INSERT문의 VALUES
- UPDATE문의 SET


Nested Subquery

단일 행 - 서브쿼리의 결과가 단일행을 리턴


다중 행 - 서브쿼리의 결과가 다중행을 리턴 : IN, ANY, ALL


다중 열 - 서브쿼리의 결과가 다중열을 리턴

 

인라인 뷰(Inline View)

- FROM절에 사용되는 서브 쿼리를 인라인 뷰(Inline View)라 한다.
- 서브 쿼리가 FROM절에 사용되면 뷰(View)처럼 결과가 동적으로 생성된 테이블로 사용 가능
- 임시적인 뷰이기 때문에 데이터베이스에는 저장되지 않는다.
- 동적으로 생성된 테이블이기 때문에 column을 자유롭게 참조 가능


스칼라 서브 쿼리 (Scalar Subquery)

- SELECT 절에 있는 서브 쿼리
- 한 개의 행만 반환

'데이터베이스' 카테고리의 다른 글

[데이터베이스] 데이터베이스 모델링  (0) 2023.04.17
[데이터베이스] View  (0) 2023.04.16
[데이터베이스] Index  (0) 2023.04.16
[데이터베이스] DDL  (0) 2023.04.16
[데이터베이스] JDBC  (0) 2023.02.07

검색 태그