실습 준비 샘플 코드
USE tempdb
DROP TABLE IF EXISTS author;
CREATE TABLE author (
aid int NOT NULL,
name varchar(10) DEFAULT NULL,
city varchar(10) DEFAULT NULL,
profile_id int DEFAULT NULL,
PRIMARY KEY (aid)
)
INSERT INTO author VALUES (1,'egoing','seoul',1),(2,'leezche','jeju',2),(3,'blackdew','namhae',3);
DROP TABLE IF EXISTS profile;
CREATE TABLE profile (
pid int NOT NULL,
title varchar(10) DEFAULT NULL,
description varchar(20),
PRIMARY KEY (pid)
)
INSERT INTO profile VALUES (1,'developer','developer is ...'),(2,'designer','designer is ..'),(3,'DBA','DBA is ...');
DROP TABLE IF EXISTS topic;
CREATE TABLE topic (
tid int NOT NULL,
title varchar(45) DEFAULT NULL,
description varchar(20),
author_id varchar(45) DEFAULT NULL,
PRIMARY KEY (tid)
)
INSERT INTO topic VALUES (1,'HTML','HTML is ...','1'),(2,'CSS','CSS is ...','2'),(3,'JavaScript','JavaScript is ..','1'),(4,'Database','Database is ...',NULL);
LEFT(RIGHT) OUTER JOIN : 왼쪽(오른쪽)에만 있는 테이블 출력 SELECT 필드명(필드명 중복이 있을 경우 테이블명.필드명 으로 입력) FROM 첫번째 테이블 LEFT(RIGHT) JOIN 두번째 테이블 ON 조인 될 조건(테이블명.필드명1 = 테이블명.필드명2 로 식별자를 연결) [WHERE 검색조건]
|
SELECT * FROM topic;
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid;
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid
LEFT JOIN profile ON author.profile_id = profile.pid;
SELECT tid, topic.title, author_id, name, profile.title AS job_title FROM topic
LEFT JOIN author ON topic.author_id = author.aid LEFT JOIN profile ON author.profile_id = profile.pid;
SELECT tid, topic.title, author_id, name, profile.title AS job_title FROM topic
LEFT JOIN author ON topic.author_id = author.aid
LEFT JOIN profile ON author.profile_id = profile.pid WHERE aid = 1;
INNER JOIN(내부조인) : 실제 존재하는 것으로만 조인됨 SELECT 필드명(필드명 중복이 있을 경우 테이블명.필드명 으로 입력) FROM 첫번째 테이블 INNER JOIN 두번째 테이블 ON 조인 될 조건(테이블명.필드명1 = 테이블명.필드명2 로 식별자를 연결) [WHERE 검색조건]
|
SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid;
SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid
INNER JOIN profile ON profile.pid = author.profile_id;
FULL OUTER JOIN(외부조인) : 조건에 만족되지 않는 행까지도 포함 SELECT 필드명(필드명 중복이 있을 경우 테이블명.필드명 으로 입력) FROM 첫번째 테이블(LEFT 테이블) FULL OUTER JOIN 두번째 테이블(RIGHT 테이블) ON 조인 될 조건(테이블명.필드명1 = 테이블명.필드명2 로 식별자를 연결) [WHERE 검색조건]
|
SELECT * FROM topic FULL OUTER JOIN author ON topic.author_id = author.aid;
(왼쪽 테이블 기준 -> 오른쪽 테이블 기준 후 중복결과 삭제됨)
(SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid)
UNION (SELECT * FROM topic RIGHT JOIN author ON topic.author_id = author.aid);
EXCLUSIVE LEFT(RIGHT) JOIN() : 왼쪽(오른쪽)테이블에만 존재하는 테이블 출력 SELECT 필드명(필드명 중복이 있을 경우 테이블명.필드명 으로 입력) FROM 첫번째 테이블(LEFT 테이블) FULL OUTER JOIN 두번째 테이블(RIGHT 테이블) ON 조인 될 조건(테이블명.필드명1 = 테이블명.필드명2 로 식별자를 연결) WHERE 테이블명.필드명 IS NULL;
|
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid WHERE author.aid is NULL;