기록 > 기억
[MySQL] JOIN 절 예제 ① 본문
JOIN 절 예제 ①
조인은 외래 키(FK) 라는 공통 컬럼을 통해 하나 이상의 테이블 간에 데이터를 연결하는 방법
● 샘플 데이터 설정
CREATE TABLE members (
member_id INT AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (member_id)
);
CREATE TABLE committees (
committee_id INT AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (committee_id)
);
INSERT INTO members(name)
VALUES('John'),('Jane'),('Mary'),('David'),('Amelia');
INSERT INTO committees(name)
VALUES('John'),('Mary'),('Amelia'),('Joe');
member_id|name | committee_id|name |
---------+------+ ------------+------+
1|John | 1|John |
2|Jane | 2|Mary |
3|Mary | 3|Amelia|
4|David | 4|Joe |
5|Amelia|
① INNER JOIN
-- 구성원(member)이면서 위원회(committee) 구성원 조회
SELECT
m.member_id
, m.name "mName"
, c.committee_id
, c.name "cName"
FROM
members m
INNER JOIN committees c
ON m.name = c.name;
member_id|mName |committee_id|cName |
---------+------+------------+------+
1|John | 1|John |
3|Mary | 2|Mary |
5|Amelia| 3|Amelia|
# 구성원(members) = 위원회(committees) 구성원 인 행들만 필터링
SELECT
m.member_id
, m.name "mName"
, c.committee_id
, c.name "cName"
FROM
members m
INNER JOIN committees c
USING(name);
-- 일치시킬 컬럼이 같을경우 USING 절 사용가능
-- ON m.name = c.name 과 똑같음
② LEFT JOIN
SELECT
m.member_id
, m.name "mName"
, c.committee_id
, c.name "cName"
FROM
members m
LEFT JOIN committees c
USING(name);
member_id|mName |committee_id|cName |
---------+------+------------+------+
1|John | 1|John |
2|Jane | NULL|NULL |
3|Mary | 2|Mary |
4|David | NULL|NULL |
5|Amelia| 3|Amelia|
# 구성원(members) = 위원회(committees) 구성원 / 구성원(members)은 모든 데이터
⒜ 오른쪽 테이블에 일치하는 행이 있는지 여부에 관계없이, 왼쪽 테이블은 모든 데이터 선택
⒝ 오른쪽 테이블에 일치하는 행이 없는 경우, 결과 집합의 오른쪽 테이블의 행 열에 NULL 값 사용
SELECT
m.member_id
, m.name "mName"
, c.committee_id
, c.name "cName"
FROM
members m
LEFT JOIN committees c
USING(name)
WHERE c.committee_id IS NULL;
member_id|mName|committee_id|cName|
---------+-----+------------+-----+
2|Jane | NULL| NULL|
4|David| NULL| NULL|
# 위원회 구성원(committees)이 아닌 구성원(members)
③ RIGHT JOIN
SELECT
m.member_id
, m.name "mName"
, c.committee_id
, c.name "cName"
FROM
members m
RIGHT JOIN committees c
USING(name);
member_id|mName |committee_id|cName |
---------+------+------------+------+
1|John | 1|John |
3|Mary | 2|Mary |
5|Amelia| 3|Amelia|
NULL|NULL | 4|Joe |
# 구성원(members) = 위원회(committees)구성원 / 위원회(committees)는 모든 데이터
⒜ 왼쪽 테이블에 일치하는 행이 있는지 여부에 관계없이, 오른쪽 테이블은 모든 데이터 선택
⒝ 왼쪽 테이블에 일치하는 행이 없는 경우, 결과 집합의 왼쪽 테이블의 행 열에 NULL 값 사용
SELECT
m.member_id
, m.name "mName"
, c.committee_id
, c.name "cName"
FROM
members m
RIGHT JOIN committees c
USING(name)
WHERE m.member_id IS NULL;
member_id|mName|committee_id|cName|
---------+-----+------------+-----+
NULL| NULL| 4|Joe |
# 구성원(members) 테이블에 없는 위원회(committees) 구성원
'IT국비지원' 카테고리의 다른 글
[MySQL] GROUP BY / HAVING (0) | 2021.10.18 |
---|---|
[MySQL] 서브쿼리 (Subquery) (0) | 2021.10.18 |
[MySQL] JOIN 절 예제 ② (0) | 2021.10.11 |
[MySQL] SELECT 문 (0) | 2021.10.10 |
[MySQL] Sample Data 다운로드 (0) | 2021.10.08 |
[MySQL] 사용자 등록 / DB 생성 / 권한 부여 (0) | 2021.10.07 |
[SQL Client] DBeaver 설치 및 DB 연결 (0) | 2021.10.06 |
Comments