✔ 표준 조인
순수 관계 연산자
- SELECT 연산
- WHERE 절로 구현
- PROJECT 연산
- SELECT 절로 구현
- (NATURAL) JOIN 연산
- 다양한 JOIN 기능으로 구현
- DIVDE 연산
- 현재 사용되지 않음
JOIN이란
- 두 개 이상의 테이블 등을 연결 또는 결합하여 데이터를 출력하는 것
- 일반적인 경우 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립되지만
어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능함 - 최소 N - 1개만큼의 JOIN 조건이 필요하며
DBMS 옵티마이저는 From 절에 나열된 테이블들을 항상 2개씩 짝을 지어 Join을 수행
FROM 절의 JOIN 형태
- INNER JOIN
- WHERE 절에서부터 사용하던 JOIN의 DEFAULT 옵션으로 JOIN 조건에서 동일한 값이 있는 행만 반환
- 내부 JOIN이라고 하며 동일한 값이 있는 행만 반환
- DEFAULT 옵션이므로 생략이 가능하지만, CROSS JOIN, OUTER JOIN과 같이 사용할 수 없음
- USING 조건절이나 ON 조건절을 필수적으로 사용

// WHERE절을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2, …
WHERE 테이블명1.속성명 = 테이블명2.속성명;
// INNER JOIN (NON-EQUI JOIN '>, <, <>, >=, <=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2, …
WHERE (NON-EQUI JOIN 조건);
- NATURAL JOIN
- 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 내부 JOIN (EQUI JOIN)을 수행
- JOIN 칼럼에 대해서는 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없음
// NATURAL JOIN절을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 NATURAL JOIN 테이블명2;
- USING 조건절
- 같은 이름을 가진 칼럼 중에서 원하는 칼럼에 대해서만 선택적으로 내부 JOIN (EQUI JOIN)을 수행
- JOIN 칼럼에 대해서는 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없음
// USING절을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 JOIN 테이블명2 USING(속성명);
- ON 조건절
- 명시적으로 JOIN 조건을 구분할 수 있음
- 칼럼명이 다르더라도 내부 JOIN 가능
- JOIN 칼럼에 대해서 ALIAS나 테이블 이름과 같은 접두사를 사용하여 사용되는 칼럼을 논리적으로 명확하게 지정
// SELF JOIN을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [별칭1.]속성명, [별칭2.]속성명, …
FROM 테이블명1 [AS] 별칭1 JOIN 테이블명1 [AS] 별칭2
ON 별칭1.속성명 = 별칭2.속성명;
- CROSS JOIN
- 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합
- 결과는 양쪽 집합의 M * N 건의 데이터 조합이 발생

// CROSS JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 CROSS JOIN 테이블명2
- OUTER JOIN (LEFT, RIGHT, FULL)
- LEFT OUTER JOIN
- 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후,
나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어오므로
같은 값이 없는 경우에는 우측 테이블에서 가져오는 칼럼들은 NULL 값으로 채움
- 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후,
- RIGHT OUTER JOIN
- 조인 수행시 나중 표기된 우측 테이블에 해당하는 데이터를 먼저 읽은 후,
먼저 표기된 좌측 테이블에서 JOIN 대상 데이터를 읽어오므로
같은 값이 없는 경우에는 좌측 테이블에서 가져오는 칼럼들은 NULL 값으로 채움
- 조인 수행시 나중 표기된 우측 테이블에 해당하는 데이터를 먼저 읽은 후,
- FULL OUTER JOIN
- 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과를 생성
즉, RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일 - UNION 기능과 같으므로 중복 데이터는 삭제하게 됨
- 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과를 생성
- LEFT OUTER JOIN

// LEFT OUTER JOIN
SELECT [테이블명 1.]속성명, [테이블명 2.]속성명, …
FROM 테이블명 1 LEFT OUTER JOIN 테이블명 2
ON 테이블명 1.속성명 = 테이블명 2.속성명;
SELECT [테이블명 1.]속성명, [테이블명 2.]속성명, …
FROM 테이블명 1, 테이블명 2
WHERE 테이블명 1.속성명 = 테이블명 2.속성명(+);
// RIGHT OUTER JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 RIGHT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명(+) = 테이블명2.속성명;
// FULL OUTER JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 FULL OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명
'Certificate > SQL개발자' 카테고리의 다른 글
[SQL개발자] SQL 활용 - 계층형 질의와 셀프 조인 (0) | 2023.10.20 |
---|---|
[SQL개발자] SQL 활용 - 집합 연산자 (0) | 2023.10.20 |
[SQL개발자] SQL 기본 - TCL (0) | 2023.10.19 |
[SQL개발자] SQL 기본 - DML (0) | 2023.10.19 |
[SQL개발자] SQL 기본 - DDL (0) | 2023.10.18 |
✔ 표준 조인
순수 관계 연산자
- SELECT 연산
- WHERE 절로 구현
- PROJECT 연산
- SELECT 절로 구현
- (NATURAL) JOIN 연산
- 다양한 JOIN 기능으로 구현
- DIVDE 연산
- 현재 사용되지 않음
JOIN이란
- 두 개 이상의 테이블 등을 연결 또는 결합하여 데이터를 출력하는 것
- 일반적인 경우 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립되지만
어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능함 - 최소 N - 1개만큼의 JOIN 조건이 필요하며
DBMS 옵티마이저는 From 절에 나열된 테이블들을 항상 2개씩 짝을 지어 Join을 수행
FROM 절의 JOIN 형태
- INNER JOIN
- WHERE 절에서부터 사용하던 JOIN의 DEFAULT 옵션으로 JOIN 조건에서 동일한 값이 있는 행만 반환
- 내부 JOIN이라고 하며 동일한 값이 있는 행만 반환
- DEFAULT 옵션이므로 생략이 가능하지만, CROSS JOIN, OUTER JOIN과 같이 사용할 수 없음
- USING 조건절이나 ON 조건절을 필수적으로 사용

// WHERE절을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2, …
WHERE 테이블명1.속성명 = 테이블명2.속성명;
// INNER JOIN (NON-EQUI JOIN '>, <, <>, >=, <=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2, …
WHERE (NON-EQUI JOIN 조건);
- NATURAL JOIN
- 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 내부 JOIN (EQUI JOIN)을 수행
- JOIN 칼럼에 대해서는 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없음
// NATURAL JOIN절을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 NATURAL JOIN 테이블명2;
- USING 조건절
- 같은 이름을 가진 칼럼 중에서 원하는 칼럼에 대해서만 선택적으로 내부 JOIN (EQUI JOIN)을 수행
- JOIN 칼럼에 대해서는 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없음
// USING절을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 JOIN 테이블명2 USING(속성명);
- ON 조건절
- 명시적으로 JOIN 조건을 구분할 수 있음
- 칼럼명이 다르더라도 내부 JOIN 가능
- JOIN 칼럼에 대해서 ALIAS나 테이블 이름과 같은 접두사를 사용하여 사용되는 칼럼을 논리적으로 명확하게 지정
// SELF JOIN을 이용한 INNER JOIN (EQUI JOIN '=')
SELECT [별칭1.]속성명, [별칭2.]속성명, …
FROM 테이블명1 [AS] 별칭1 JOIN 테이블명1 [AS] 별칭2
ON 별칭1.속성명 = 별칭2.속성명;
- CROSS JOIN
- 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합
- 결과는 양쪽 집합의 M * N 건의 데이터 조합이 발생

// CROSS JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 CROSS JOIN 테이블명2
- OUTER JOIN (LEFT, RIGHT, FULL)
- LEFT OUTER JOIN
- 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후,
나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어오므로
같은 값이 없는 경우에는 우측 테이블에서 가져오는 칼럼들은 NULL 값으로 채움
- 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후,
- RIGHT OUTER JOIN
- 조인 수행시 나중 표기된 우측 테이블에 해당하는 데이터를 먼저 읽은 후,
먼저 표기된 좌측 테이블에서 JOIN 대상 데이터를 읽어오므로
같은 값이 없는 경우에는 좌측 테이블에서 가져오는 칼럼들은 NULL 값으로 채움
- 조인 수행시 나중 표기된 우측 테이블에 해당하는 데이터를 먼저 읽은 후,
- FULL OUTER JOIN
- 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과를 생성
즉, RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일 - UNION 기능과 같으므로 중복 데이터는 삭제하게 됨
- 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과를 생성
- LEFT OUTER JOIN

// LEFT OUTER JOIN
SELECT [테이블명 1.]속성명, [테이블명 2.]속성명, …
FROM 테이블명 1 LEFT OUTER JOIN 테이블명 2
ON 테이블명 1.속성명 = 테이블명 2.속성명;
SELECT [테이블명 1.]속성명, [테이블명 2.]속성명, …
FROM 테이블명 1, 테이블명 2
WHERE 테이블명 1.속성명 = 테이블명 2.속성명(+);
// RIGHT OUTER JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 RIGHT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명(+) = 테이블명2.속성명;
// FULL OUTER JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 FULL OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명
'Certificate > SQL개발자' 카테고리의 다른 글
[SQL개발자] SQL 활용 - 계층형 질의와 셀프 조인 (0) | 2023.10.20 |
---|---|
[SQL개발자] SQL 활용 - 집합 연산자 (0) | 2023.10.20 |
[SQL개발자] SQL 기본 - TCL (0) | 2023.10.19 |
[SQL개발자] SQL 기본 - DML (0) | 2023.10.19 |
[SQL개발자] SQL 기본 - DDL (0) | 2023.10.18 |