OUTER JOIN
외부 조인은 관련 열의 값을 기반으로 하나 이상의 테이블에서 행을 검색하는 데 사용됩니다. 여기에는 다른 테이블에 일치 항목이 없을 수도 있는 행도 포함됩니다. MySQL에는 세 가지 유형의 외부 조인이 있습니다.
-- OUTER JOIN 교집합 (INNERJOING) + INNER JOIN에서 제외된 데이터를 함께 출력
-- 형식 : SELECT 칼럼명
-- FROM 테이블1 INNER JOIN 테이블 2 ON 조인칼럼
-- LEFT OUTER JOIN / RIGHT OUTER JOIN ON 조인칼럼
-- 오라클 형식 : E.EMP_ID = V.EMP_ID (+)
-- 최근형식 : FROM 테이블 1 LEFT OUTER JOIN / RIGHT OUTER JOIN 테이블 2 ON 조인칼럼
-- OUTER JOIN 사용 시 반드시 누락되는 데이터가 없도록 확인
예제
-- 모든 부서의 정보와 소속 본부명을 함께 조회 (hrdb2019 DB)

SELECT d.dept_id ,d.dept_name, u.unit_name
FROM department d left outer JOIN unit u ON d.unit_id =u.unit_id;
/*오라클방식 */
SELECT d.dept_id ,d.dept_name, u.unit_name
FROM department d , unit u
where d.unit_id(+) =u.unit_id;
unit id에 전략기획부의 id 가 누락되어서 inner join을 쓰면 누락되는 STG(전략기획부)의 값도
outter join으로 출력이 된다
추가설명
LEFT OUTER JOIN(또는 간단히 LEFT JOIN): 이 유형의 조인은 왼쪽 테이블(LEFT JOIN 키워드 앞에 지정된 테이블)의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 오른쪽 테이블의 열에 대해 NULL 값이 반환됩니다.
RIGHT OUTER JOIN(또는 간단히 RIGHT JOIN): LEFT JOIN의 반대입니다. 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 오른쪽 테이블의 일치하지 않는 행은 왼쪽 테이블의 열에 대해 NULL 값을 반환합니다.
FULL OUTER JOIN(또는 FULL JOIN): 이 유형의 조인은 두 테이블의 모든 행을 반환하고 일치 항목이 없는 열에 대해 NULL 값을 포함합니다.
다음은 "orders "과 "customers "이라는 두 개의 테이블을 사용하는 예입니다.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
order_total DECIMAL(10, 2)
);
INSERT INTO customers (customer_id, customer_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
INSERT INTO orders (order_id, order_date, customer_id, order_total) VALUES
(101, '2023-01-15', 1, 100.00),
(102, '2023-02-20', 2, 75.50),
(103, '2023-03-10', 1, 50.25);
이제 customers 및 orders orders에 대한 정보를 검색하기 위해 외부 조인을 수행해 보겠습니다.
모든 customers 및 orders 목록을 얻으려면 LEFT JOIN을 사용하세요(있는 경우).
SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
결과에는 orders 이 없더라도 모든 customers 이 포함됩니다. "orders " 테이블의 일치하지 않는 행은 orders 관련 열에 대해 NULL 값을 갖게 됩니다.
모든 orders orders과 해당 customers 목록을 얻으려면 RIGHT JOIN을 사용하세요.
SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
일치하는 customers 이 없더라도 모든 orders 이 반환됩니다. 일치하지 않는 customers 은 customers 관련 열에 대해 NULL 값을 갖게 됩니다.
일치 항목이 없는 NULL 값을 포함하여 모든 customers 및 모든 orders 목록을 가져오려면 FULL JOIN을 사용하세요.
SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
FULL JOIN orders ON customers.customer_id = orders.customer_id;
이 쿼리는 일치 항목이 없는 행을 포함하여 모든 customers customers과 모든 orders orders을 반환합니다. customers 또는 orders 관련 열에 NULL 값이 발생할 수 있습니다.
이것이 MySQL 외부 조인의 기본 사항입니다. 이를 사용하여 여러 테이블의 데이터를 결합하고 테이블 중 하나에 일치 항목이 없을 수 있는 상황을 처리할 수 있습니다.
'프로그래밍 > MYSQL' 카테고리의 다른 글
mysql 테이블 복제 create as select (CAS) (1) | 2023.10.19 |
---|---|
mysql Subquery (서브쿼리) (1) | 2023.10.17 |
my sql 최소값min(),최대값max(), group by ,소계 with rollup (0) | 2023.10.13 |
mysql sum() 합계 구하기 ,avg()평균 값 구하기 (1) | 2023.10.13 |
mysql 문자열 결합 : concat() 함수 (0) | 2023.10.12 |