반응형
JOIN 은 SQL에서 테이블 간의 관계를 정의하고 데이터를 결합할 때 사용됩니다.
INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN 여섯가지를 알아보도록 하겠습니다!
실습할 테이블 만들기 >
CREATE TABLE myhero (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20),
class INT NOT NULL,
tier CHAR(5));
INSERT INTO myhero (id, name, class, tier) VALUES
(1, 'Izuku', 773, '1++'), (2, 'All Might', 7800, '3'),
(4, 'Toga', 91, '0+'), (6, 'Bakugo', 199, '1++'),
(7, 'Todoroki', 206, '0+'), (8, 'Asui', 71, '0+'),
(9, 'Shigaraki', 14000, '3'), (13, 'Hado', 374, '0+');
CREATE TABLE ability (
id INT NOT NULL PRIMARY KEY,
intelligence INT,
strength INT,
speed INT,
durability INT);
INSERT INTO ability (id, intelligence, strength, speed, durability) VALUES
(1, 80, 75, 50, 35), (2, 70, 100, 50, 40), (3, 80, 80, 50, 40),
(4, 55, 25, 30, 15), (5, 55, 25, 25, 30), (6, 55, 50, 50, 25),
(7, 75, 25, 25, 40), (8, 60, 25, 25, 14), (9, 75, 100, 75, 45),
(10, 55, 20, 5, 10), (11, 90, 1, 5, 10), (12, 65, 90, 35, 35);
이렇게 myhero 테이블과 ability 테이블 두 개를 이용할 예정입니다~
1. (INNER) JOIN
두 테이블에서 공통된 데이터만 가져오는 방식
SELECT name, intelligence, strength FROM myhero m
INNER JOIN ability a ON m.id = a.id;
결과는 myhero와 ability의 id가 일치하는 데이터만 가져옵니다. 즉, 두 테이블에 모두 존재하는 데이터가 반환됩니다.
2. LEFT JOIN / RIGHT JOIN
: 한쪽 테이블의 모든 데이터와 반대쪽 테이블에서 일치하는 데이터를 결합. 반대쪽 테이블에 일치하는 데이터가 없으면, NULL로 채워짐.
INNER JOIN과 사용 방법은 같습니다.
SELECT name, intelligence, strength FROM myhero m
LEFT JOIN ability a ON m.id = a.id;
SELECT name, intelligence, strength FROM myhero m
RIGHT JOIN ability a ON m.id = a.id;
3. OUTER JOIN
: 두 테이블에서 일치하지 않는 데이터까지 모두 가져옴. MySQL에서는 UNION을 사용해 비슷한 기능 구현 가능.
SELECT name, intelligence, strength, speed FROM myhero m
LEFT JOIN ability a ON m.id = a.id
UNION
SELECT name, intelligence, strength, speed FROM myhero m
RIGHT JOIN ability a ON m.id = a.id;
UNION은 중복된 데이터를 제거하므로 FULL OUTER JOIN처럼 작동
- 중복된 데이터 제거하지 않으려면 UNION ALL
4. CROSS JOIN
: 두 테이블의 모든 가능한 데이터 조합을 반환. (각 테이블의 모든 행을 곱셈 방식으로 결합)
SELECT name, durability FROM myhero
CROSS JOIN ability;
5. SELF JOIN
: 테이블을 자기 자신과 결합하는 방식. 같은 테이블 내에서 특정 데이터를 비교하거나 관련 데이터를 찾을 때 유용하게 사용됨.
테이블에 별칭을 사용해 서로 다른 두 테이블처럼 취급.
SELECT A.name AS Hero1, B.name AS Hero2, B.class
FROM myhero A
JOIN myhero B
ON A.class = B.class;
반응형
'Database > MySQL' 카테고리의 다른 글
[MySQL] SQL 명령어 - DDL / DML / DCL / TCL (0) | 2024.10.11 |
---|---|
[MySQL] 제약조건(Constraints): 데이터 무결성 유지하기 (0) | 2024.10.11 |
[MySQL] 외래 키(Foreign Key)란? (1) | 2024.10.10 |
[MySQL] 조건문 - IF / IFNULL / CASE~WHEN (0) | 2024.10.10 |
[MySQL] 데이터 그룹화 - GROUP BY / HAVING (0) | 2024.10.10 |