달리는 자동차
JOIN 본문
- 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 피노키오 별빛달빛 A 나혼자 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;
블로그 참고 .. 미래학자님 덕에 한방에 이해했다.
'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