01. MySQL에서의 JOIN
MySQL에서 JOIN은 두 개 이상의 테이블에서 데이터를 검색하는 데 사용됨.
두 개 이상의 테이블의 자료를 결합
✅JOIN의 종류
① (INNER) JOIN
👉 EQUI JOIN : 주어진 (열에 대한) 조인 조건을 만족하는 자료(행)
- 양쪽 모두에 값이 있는 행(NOT NULL) 반환
- 만약 동일 조인 내에 있는 컬럼들이 동일한 이름을 가지고 있으면, USING 함수를 사용할 수 있음.
👉 CROSS JOIN
- 두 개 이상의 테이블에서 모든 조합을 반환
- 왼쪽 테이블의 모든 행이 오른쪽 테이블의 모든 행과 결합
👉 NATURAL JOIN
- EQUI JOIN의 한 유형으로 조인 구문이 조인된 테이블에서 동일한 컬럼명을 가진 2개의 테이블에서
모든 컬럼들을 비교함으로써, 암시적으로 일어나는 구문
- 결과적으로 나온 조인된 테이블은 동일한 이름을 가진 컬럼의 각 쌍에 대한 단 하나의 컬럼만 포함
- 사용안하는 것이 좋음.
② OUTER JOIN
👉 LEFT [OUTER] JOIN
- 왼쪽 테이블에서 모든 행을 반환하고, 오른쪽 테이블에서는 일치하는 행만 반환
- 오른쪽 테이블에 일치하는 행이 없으면 NULL 값을 반환
👉 RIGHT [OUTER] JOIN
- 오른쪽 테이블에서 모든 행을 반환하고, 왼쪽 테이블에서는 일치하는 행만 반환
- 왼쪽 테이블과 일치하는 행이 없으면 NULL 값을 반환
👉 FULL OUTER JOIN
- 왼쪽과 오른쪽 테이블에서 일치하는 행을 모두 반환
- 일치하지 않는 행은 NULL 값을 반환
table_references:
escaped_table_reference [, escaped_table_reference] ...
escaped_table_reference: {
table_reference
| { OJ table_reference }
}
table_reference: {
table_factor
| joined_table
}
table_factor: {
tbl_name [PARTITION (partition_names)]
[[AS] alias] [index_hint_list]
| [LATERAL] table_subquery [AS] alias [(col_list)]
| ( table_references )
}
joined_table: {
table_reference {[INNER | CROSS] JOIN | STRAIGHT_JOIN} table_factor [join_specification]
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification
| table_reference NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_factor
}
join_specification: {
ON search_condition
| USING (join_column_list)
}
join_column_list:
column_name [, column_name] ...
index_hint_list:
index_hint [, index_hint] ...
index_hint: {
USE {INDEX|KEY}
[FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])
| {IGNORE|FORCE} {INDEX|KEY}
[FOR {JOIN|ORDER BY|GROUP BY}] (index_list)
}
index_list:
index_name [, index_name] ...
02. JOIN 실습
✅ 예제 테이블 생성
예제 테이블 출처
➡️ https://ko.wikipedia.org/wiki/Join_(SQL)
Join (SQL) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. join(조인) 또는 결합 구문은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 따라서 조인은 테이블로서 저장되거나, 그 자
ko.wikipedia.org
CREATE TABLE department
(
DepartmentID INT,
DepartmentName VARCHAR(20)
);
CREATE TABLE employee
(
LastName VARCHAR(20),
DepartmentID INT
);
INSERT INTO department(DepartmentID, DepartmentName)
VALUES(31, '영업부'),
(33, '기술부'),
(34, '사무부'),
(35, '마케팅');
INSERT INTO employee(LastName, DepartmentID)
VALUES('Rafferty', 31),
('Jones', 33),
('Steinberg', 33),
('Robinson', 34),
('Smith', 34),
('John', NULL);
✅ INNER JOIN
① JOIN
✔️JOIN 키워드 사용
SELECT *
FROM employee a
JOIN department b
ON a.DepartmentID = b.DepartmentID;
SELECT *
FROM employee a
JOIN department b
USING (DepartmentID);
✨조인하려는 테이블의 키값이 같으면 USING 함수를 사용할 수 있음
✔️WHERE문 사용
SELECT *
FROM employee a, department b
WHERE a.DepartmentID = b.DepartmentID;
② CROSS JOIN
✔️ CROSS JOIN 사용
SELECT *
FROM employee CROSS JOIN department;
✔️ CROSS JOIN 사용 X
SELECT *
FROM employee, department;
✅ OUTER JOIN
① LEFT [OUTER] JOIN
SELECT *
FROM employee a
LEFT JOIN department b
ON a.DepartmentID = b.DepartmentID;
② RIGHT [OUTER] JOIN
SELECT *
FROM employee a
RIGHT JOIN department b
ON a.DepartmentID = b.DepartmentID;
③ FULL [OUTER] JOIN
SELECT *
FROM employee a
FULL OUTER JOIN department b
ON a.DepartmentID = b.DepartmentID;
✨ORACLE의 경우 FULL OUTER JOIN 구문을 지원하지만 , MySQL의 경우 지원하지 않음
✔️ Oracle 에서 FULL OUTER JOIN
SELECT *
FROM employee a
FULL OUTER JOIN department b
ON a.DepartmentID = b.DepartmentID;
✔️ MySQL 에서 FULL OUTER JOIN
SELECT *
FROM employee a
LEFT OUTER JOIN department b
ON a.DepartmentID = b.DepartmentID
UNION ALL /* 중복허용 합집합*/
SELECT *
FROM employee a
RIGHT OUTER JOIN department b
ON a.DepartmentID = b.DepartmentID
WHERE a.DepartmentID IS NULL;
출처 및 참고 문헌(reference)
https://dev.mysql.com/doc/refman/8.0/en/join.html
MySQL :: MySQL 8.0 Reference Manual :: 13.2.13.2 JOIN Clause
MySQL supports the following JOIN syntax for the table_references part of SELECT statements and multiple-table DELETE and UPDATE statements: table_references: escaped_table_reference [, escaped_table_reference] ... escaped_table_reference: { table_referenc
dev.mysql.com
https://ko.wikipedia.org/wiki/Join_(SQL)
Join (SQL) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. join(조인) 또는 결합 구문은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 따라서 조인은 테이블로서 저장되거나, 그 자
ko.wikipedia.org
'SQL' 카테고리의 다른 글
SQL | MySQL | 서브쿼리 (Subquery) (0) | 2023.03.21 |
---|---|
SQL | MySQL | 테이블 집합 연산 - UNION, UNION ALL 등 (0) | 2023.03.15 |
SQL | MySQL | Window Functions (2) - 집계 함수 (0) | 2023.03.10 |
SQL | MySQL | Window Functions (1) - 데이터 순위 (0) | 2023.03.09 |
SQL | MySQL | 그룹에 따른 집계 - GROUP BY, HAVING (0) | 2023.03.09 |