Notice
Recent Comments
Recent Posts
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Today
Total
관리 메뉴

기록 > 기억

[MySQL] JOIN 절 예제 ① 본문

IT국비지원

[MySQL] JOIN 절 예제 ①

BY SON 2021. 10. 11. 18:00

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