Oracle에는 여러 테이블의 데이터를 결합하는 데 사용할 수 있는 여러 유형의 조인이 있습니다.
조인 종류
- 내부 조인: 두 테이블에서 일치하는 값을 가진 행만 반환합니다.
- 왼쪽 외부 조인: 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 결과에 NULL 값이 포함됩니다.
- 오른쪽 외부 조인: 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 결과에 NULL 값이 포함됩니다.
- 전체 외부 조인: 두 테이블의 모든 행을 반환하고 일치하지 않는 행에 대해 NULL 값을 포함합니다.
- 자체 조인: 테이블은 일반적으로 동일한 테이블 내의 값을 비교하는 데 사용되는 자체와 조인됩니다.
- 크로스 조인: 두 테이블의 데카르트 곱을 반환합니다. 즉, 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행과 결합됩니다.
내부 조인 예시
1
2
3
4
5
|
SELECT *
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;
|
s |
이 쿼리는 "orders" 테이블과 "customers" 테이블에서 모든 열을 선택하고 "orders" 테이블의 "customer_id" 값이 "customers" 테이블의 "customer_id" 값과 일치하는 행을 반환합니다.
INNER JOIN 키워드는 두 개 이상의 테이블 사이의 관련 열을 기반으로 행을 결합하는 데 사용됩니다. 이 경우 "customer_id" 열이 관련 열로 사용됩니다.
왼쪽 외부 조인
1
2
3
4
5
|
SELECT orders.order_id, customers.customer_name
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.customer_id;
|
cs |
이 쿼리는 "orders" 테이블의 모든 행과 "customers" 테이블의 일치하는 행을 선택합니다. 일치하는 항목이 없으면 "customers" 테이블의 열이 NULL 값으로 채워집니다.
이 유형의 조인을 왼쪽 외부 조인이라고 합니다. 오른쪽 테이블에 일치하는 행이 없더라도 왼쪽 테이블(이 경우 "orders")의 모든 행이 결과에 포함되기 때문입니다(이 경우 " 고객").
오른쪽 외부 조인
1
2
3
4
5
|
SELECT orders.order_id, customers.customer_name
FROM customers
RIGHT OUTER JOIN orders
ON customers.customer_id = orders.customer_id;
|
cs |
이 예에서 오른쪽 외부 조인은 "customers" 테이블의 모든 행과 "orders" 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 결과에 "orders" 테이블 열에 대한 NULL 값이 포함됩니다.
전체(full) 외부 조인
1
2
3
4
5
|
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.id = table2.id;
|
cs |
이 예에서 전체 외부 조인은 table1과 table2의 행을 결합합니다.
여기서 table1의 "id" 열 값은 table2의 "id" 열 값과 일치합니다.
table2에 일치하는 값이 없는 table1의 모든 행은 table1에 일치하는 값이 없는 table2의 모든 행과 함께 반환됩니다.
결과 테이블에는 table1과 table2의 모든 열이 포함됩니다.
둘 이상의 열에 조인하려면 ON 문을 연결해야 합니다.
자체(self) 조인
1
2
3
4
|
SELECT a.employee_name, b.employee_name AS manager_name
FROM employees a, employees b
WHERE a.manager_id = b.employee_id;
|
cs |
1
2
3
4
|
SELECT a.employee_name, b.employee_name AS manager_name
FROM employees a
JOIN employees b ON a.manager_id = b.employee_id;
|
cs |
이 쿼리는 레코드를 일치시키기 위해 "manager_id" 및 "employee_id" 열을 사용하여 "employees" 테이블을 자신과 조인합니다. 결과는 각 관리자 이름과 함께 직원 이름 목록입니다.
이것은 이전 구문이므로 Oracle은 ANSI 조인 구문을 사용할 것을 권장합니다.
크로스(cross) 조인
1
2
3
4
|
SELECT *
FROM table1
CROSS JOIN table2;
|
cs |
1
2
3
4
|
SELECT customers.name, orders.order_number
FROM customers
CROSS JOIN orders;
|
cs |
예를 들어 "customers" 및 "orders"라는 두 개의 테이블이 있는 경우 교차 조인을 사용하여 가능한 모든 고객 및 주문 조합을 반환할 수 있습니다.
이렇게 하면 고객 이름과 주문 번호가 포함된 각 행과 함께 가능한 모든 고객 및 주문 조합이 포함된 결과 집합이 반환됩니다. 결과 집합에는 많은 중복 행이 포함되며 테이블의 행 수가 많은 경우 결과 집합이 매우 커질 수 있습니다.
크로스 조인은 일반적으로 테이블의 가능한 모든 행 조합을 의미하는 데카르트 곱으로도 알려져 있음을 언급하는 것도 중요합니다.
'나혼자 웹사이트 만들기 > DB' 카테고리의 다른 글
[ORACLE] 중복 데이터 삭제 쿼리 (0) | 2023.01.13 |
---|---|
[ORACLE] FLASHBACK을 이용하여 데이터 복구 (0) | 2023.01.12 |
[ORACLE] 문자열 길이 구하기 (LENGTH, LENGTHB, LENGTHC 함수) (0) | 2022.09.14 |
[ORACLE] 첫 글자 대문자로 바꾸기 (INITCAP함수) (1) | 2022.09.13 |
[ORACLE] 소문자 바꾸기 (LOWER 함수) (0) | 2022.09.12 |
[ORACLE] 대문자 바꾸기 (UPPER 함수) (1) | 2022.09.11 |
댓글