달리는 자동차

JOIN 본문

SQL/MySQL

JOIN

@또또 2020. 9. 16. 15:03

- JOIN은 데이터베이스 내의 여러테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해준다.

- SELECT 문과 함께 자주 사용된다.

- 서로 다른 테이블간에 설정된 관계가 결합하여 1개 이상의 테이블에서 데이터를 조회하기 위해 사용된다.

-각각의 테이블에 분리된 연관성이 있는 데이터를 연결하거나 조합할 때 이런 작업을 조인이라고 한다.

-조인의 처리에서 어느 테이블을 먼저 읽을지 결정하는것은 값이 달라지므로 중요하며 INNER JOIN은 어느

테이블을 먼저 읽어도 결과가 달라지지 않으나 OUTER JOIN은 OUTER가 되는 테이블을 먼저 잘 읽어야한다.

1. INNER JOIN

  • ON절과 함께 사용되며, ON절의 조건을 만족하는 데이터만 가져온다.
<!--표준 SQL-->

첫번째테이블이름 INNER JOIN 두번째테이블이름 ON 조건
첫번째 테이블이름 JOIN 두번째테이블이름 ON 조건

ON 절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.
표준SQL과 달리 MYSQL에서는 JOIN,INNER JOIN,CROSS JOIN이 모두 같은 의미로 사용된다.

<!--MySQL-->
SELECT * FROM Reservation, Customer WHERE Reservation.Name = Customer.Name;

<!-- 별칭(alias)사용-->
SELECT * FROM Reservation AS r, Customer AS c WHERE r.Name = c.Name;

Reservation 과 Customer은 테이블 이름이다. 


우선 JOIN을 할 두 테이블을 생성 

CREATE TABLE girl_group
(
	_id INT PRIMARY KEY AUTO_INCREMENT,
	name varchar(32) NOT NULL,
	debut DATE NOT NULL,
	hit_song_id INT
);

CREATE TABLE song
(
	_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(32) NOT NULL,
    lyrics VARCHAR(32)
);

INSERT INTO song(_id, title, lyrics) VALUES (101, 'Tell Me', 'tell me tell me tetetete tel me');
INSERT INTO song(title, lyrics) VALUES ('Gee','Gee Gee Gee Gee');
INSERT INTO song(title, lyrics) VALUES ('미스터','이름이 뭐야 미스터');
INSERT INTO song (title, lyrics) VALUES ('Abracadabra', '이러다 미쳐 내가 여리여리'); 
INSERT INTO song (title, lyrics) VALUES ('8282', 'Give me a call Baby baby');
INSERT INTO song (title, lyrics) VALUES ('기대해', '기대해');
INSERT INTO song (title, lyrics) VALUES ('I Don\'t car', '다른 여자들의 다리를'); 
INSERT INTO song (title, lyrics) VALUES ('Bad Girl Good Girl', '앞에선 한 마디 말도');
INSERT INTO song (title, lyrics) VALUES ('피노키오', '뉴예삐오');
INSERT INTO song (title, lyrics) VALUES ('별빛달빛', '너는 내 별빛 내 마음의 별빛'); 
INSERT INTO song (title, lyrics) VALUES ('A', 'A 워오우 워오우워 우우우');
INSERT INTO song (title, lyrics) VALUES ('나혼자', '나 혼자 밥을 먹고 나 혼자 영화 보고'); 
INSERT INTO song (title, lyrics) VALUES ('LUV', '설레이나요 '); 
INSERT INTO song (title, lyrics) VALUES ('짧은치마', '짧은 치마를 입고 내가 길을 걸으면'); 
INSERT INTO song (title, lyrics) VALUES ('위아래', '위 아래 위위 아래'); 
INSERT INTO song (title, lyrics) VALUES ('Dumb Dumb' , '너 땜에 하루종일');



INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('원더걸스', '2007-09-12', 101); 
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('소녀시대', '2009-06-03', 102); 
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('카라', '2009-07-30', 103); 
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('브라운아이드걸스', '2008-01-17', 104);
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('다비치', '2009-02-27', 105); 
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('2NE1', '2009-07-08', 107); 
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('f(x)', '2011-04-20', 109); 
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('시크릿', '2011-01-06', 110); 
INSERT INTO girl_group (name, debut, hit_song_id) VALUES ('레인보우', '2010-08-12', 111); 
INSERT INTO girl_group (name, debut) VALUES ('에프터 스쿨', '2009-11-25'); 
INSERT INTO girl_group (name, debut) VALUES ('포미닛', '2009-08-28');

 

_id title lyrics
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Tell Me
Gee
미스터
Abracadabra
8282
기대해
I don't care
bad Girl
피노키오
별빛달빛

나혼자
LUV
짧은치마 
위아래
Dump Dump
tell me tell me tetetete tel me
gee gee gee gee
이름이 뭐야 미스터
이러다 미쳐 내가 여리여리
geiv me a call
기대해
다른여자
앞에선 한 마디 말도 
뉴예삐오 
너는 내 별빛 내 마음의 별빛
A 워오우 워오우워 우우우
나 혼자 밥을 벅고 나혼자 
설레이나 
짧은 치마를 입고
위아래 위위 아래
너땜에 하루종일
_id name debut hit_song_id
1
2
3
4
5
6
7
8
9
10
11
원더걸스
소녀시대
카라
브라운아이드걸스
다비치
2NE1
F(x)
시크릿
레인보우
애프터스쿨
포미닛
2007-09-12
2009-06-03
2009-07-30
2008-01-17
2009-02-27
2009-07-08
2011-04-20
2011-01-06
2010-08-12
2009-11-25
2009-08-28
101
102
103
104
105
107
109
110
111
NULL
NULL
_id name title
1
2
3
4
5
6
7
8
9
원더걸스
소녀시대
카라
브라운아이드걸스
다비치 
2NE1
f( x )
시크릿
레인보우
Tell Me
Gee
미스터
Abracadabra
8282
I Don't Care
피노키오
별빛달빛
A

 


히트곡이 저장되어있지 않은 애프터스쿨, 포미닛의 경우, 곡이 표시도지 않더라도 보이고 싶을 때는 하나의 테이블 기준으로 합치는 조인을 사용할 수 있다. 

 SELECT gg._id, gg.name, s.title FROM girl_group AS gg LEFT JOIN song AS s ON s._id = gg.hit_song_id;

LEFT JOIN 대신 LEFT를 사용해도 같은 기능을 수행한다.

SELECT gg.id, gg.name, s.title FROM girl_group AS gg LEFT song AS s ON s.id = gg.hit_song_id;

SELECT gg._id, gg.name, s.title FROM girl_group AS gg RIGHT OUTER JOIN song AS s ON s._id = gg.hit_song_id;

RIGHT JOIN 대신 RIGHT 를 사용하여도 된다.

SELECT s._id, stitle, gg.name FROM girl_group AS gg RIGHT song AS s ON s._id = gg.hit_song_id;

futurists.tistory.com/17

 

[MySQL] 7장 조인 : JOIN (INNER, LEFT, RIGHT)

조인은 관계형 데이터 베이스에서 일반적으로 많이 사용하며, 충분한 이해 없이 사용하기 쉬운 내용이다. 이번 시간에는 여러 조인의 종류가 그 사용하는 예에 대해서 공부해보자. INNER 조인 LEFT

futurists.tistory.com

블로그 참고 .. 미래학자님 덕에 한방에 이해했다.

'SQL > MySQL' 카테고리의 다른 글

상용서버를 복제하기 (테스트용 서버 생성)  (0) 2021.03.09
MariaDB 사용법  (0) 2020.09.16
테이블 조인 (JOIN)  (0) 2020.09.15
레코드 변경 삭제  (0) 2020.09.15
집계함수  (0) 2020.09.15
Comments