[MySQL] 조인

조인(Join)

조인이란?

조인은 관련 컬럼을 기반으로 여러 테이블의 데이터를 결합할 수 있는 기능입니다. 조인은 INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 등이 있습니다.

INNER JOIN(내부 조인)

INNER JOIN은 두 테이블이 조인을 하기 위해 사용된 컬럼의 값이 존재하는 행만 출력됩니다.

SELECT 컬럼1, ... FROM 기준테이블 [INNER] JOIN 참조테이블 ON 조인조건

예시

CREATE TABLE customers (
  customer_id INT PRIMARY KEY,
  customer_name VARCHAR(20),
  customer_age INT
);

INSERT INTO customers VALUES (1, '짱아', 1);
INSERT INTO customers VALUES (2, '짱구', 5);
INSERT INTO customers VALUES (3, '신형만', 35);
INSERT INTO customers VALUES (4, '봉미선', 29);

SELECT * FROM customers;
customer_idcustomer_namecustomer_age
1짱아1
2짱구5
3신형만35
4봉미선29
CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  order_price INT,
  customer_id INT
);

INSERT INTO orders VALUES (1, 2000, 1);
INSERT INTO orders VALUES (2, 3000, 2);
INSERT INTO orders VALUES (3, 4000, 3);

SELECT * FROM orders;
order_idorder_pricecustomer_id
120001
230002
340003

위의 두 테이블을 cutomer_id 컬럼 기반으로 내부 조인하면 다음과 같은 결과가 나옵니다.

SELECT * FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id;

-- 또는

SELECT * FROM customers JOIN orders ON customers.customer_id = orders.customer_id;
customer_idcustomer_namecustomer_ageorder_idorder_pricecustomer_id
1짱아1120001
2짱구5230002
3신형만35340003

조인할 때 사용하는 컬럼명이 같다면 USING 문을 사용해 중복을 줄일 수 있습니다.

SELECT * FROM customers JOIN orders USING (customer_id);
customer_idcustomer_namecustomer_ageorder_idorder_price
1짱아112000
2짱구523000
3신형만3534000

OUTER JOIN(외부 조인)

LEFT OUTER JOIN

LEFT OUTER JOIN은 조인 조건이 되는 컬럼의 값이 있는 행만 반환하는 INNER JOIN과 달리 왼쪽(기준) 테이블의 모든 행도 함께 포함됩니다. 오른쪽(참조) 테이블에 일치하는 항목이 없으면 결과에는 NULL 값이 포함됩니다.

SELECT 컬럼1, ... FROM 기준테이블 LEFT [OUTER] JOIN 참조테이블 ON 조인조건

예시에 있는 두 테이블을 왼쪽 외부 조인하면 다음과 같은 결과가 나옵니다.

SELECT * FROM customers LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id;

-- 또는

SELECT * FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id;
customer_idcustomer_namecustomer_ageorder_idorder_pricecustomer_id
1짱아1120001
2짱구5230002
3신형만35340003
4봉미선29NULLNULLNULL

RIGHT OUTER JOIN

RIGHT OUTER JOIN은 오른쪽(참조) 테이블의 모든 행이 포함됩니다.

SELECT 컬럼1, ... FROM 기준테이블 RIGHT [OUTER] JOIN 참조테이블 ON 조인조건

예시에 있는 두 테이블을 오른쪽 외부 조인하면 다음과 같은 결과가 나옵니다.

SELECT * FROM customers RIGHT OUTER JOIN orders ON customers.customer_id = orders.customer_id;

-- 또는

SELECT * FROM customers RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
customer_idcustomer_namecustomer_ageorder_idorder_pricecustomer_id
1짱아1120001
2짱구5230002
3신형만35340003

CROSS JOIN(교차 조인)

CROSS JOIN은 두 테이블의 가능한 모든 행의 조합을 결합하는데 사용되는 조인입니다.

SELECT 컬럼1, ... FROM 기준테이블 CROSS JOIN 참조테이블;

예시의 두 테이블을 교차 조인하면 다음과 같은 결과가 나옵니다.

SELECT * FROM customers CROSS JOIN orders;
customer_idcustomer_namecustomer_ageorder_idorder_pricecustomer_id
1짱아1340003
1짱아1230002
1짱아1120001
2짱구5340003
2짱구5230002
2짱구5120001
3신형만35340003
3신형만35230002
3신형만35120001
4봉미선29340003
4봉미선29230002
4봉미선29120001


© 2023.06. by 고개

Powered by 고개