본문 바로가기
나혼자 웹사이트 만들기/DB

[ORACLE] 조인 종류 및 함수 예시

by coldbrew_ 2023. 1. 14.
반응형

Oracle에는 여러 테이블의 데이터를 결합하는 데 사용할 수 있는 여러 유형의 조인이 있습니다.

 

조인 종류

  1. 내부 조인: 두 테이블에서 일치하는 값을 가진 행만 반환합니다.
  2. 왼쪽 외부 조인: 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 결과에 NULL 값이 포함됩니다.
  3. 오른쪽 외부 조인: 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 결과에 NULL 값이 포함됩니다.
  4. 전체 외부 조인: 두 테이블의 모든 행을 반환하고 일치하지 않는 행에 대해 NULL 값을 포함합니다.
  5. 자체 조인: 테이블은 일반적으로 동일한 테이블 내의 값을 비교하는 데 사용되는 자체와 조인됩니다.
  6. 크로스 조인: 두 테이블의 데카르트 곱을 반환합니다. 즉, 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행과 결합됩니다.

 내부 조인 예시

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"라는 두 개의 테이블이 있는 경우 교차 조인을 사용하여 가능한 모든 고객 및 주문 조합을 반환할 수 있습니다.

이렇게 하면 고객 이름과 주문 번호가 포함된 각 행과 함께 가능한 모든 고객 및 주문 조합이 포함된 결과 집합이 반환됩니다. 결과 집합에는 많은 중복 행이 포함되며 테이블의 행 수가 많은 경우 결과 집합이 매우 커질 수 있습니다.

크로스 조인은 일반적으로 테이블의 가능한 모든 행 조합을 의미하는 데카르트 곱으로도 알려져 있음을 언급하는 것도 중요합니다.

반응형

댓글