조회(SELECT) - 조인(JOIN)
조인
테이블간의 관계성에 따라 복수의 테이블을 결합하여 하나의 테이블인 것처럼 결과를 출력
종류
OUTTER JOIN : 매칭이 되는 행이 없어도 결과를 가져오고 매칭되는 행이 없으면 NULL로 표시
LEFT JOIN과 RIGHT JOIN이 있음
INNER JOIN : 조인하는 두 개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져옴
테이블 재설정
student 테이블과 location 테이블 두 개 생성
1 2 3 4 5 6 7 8 9  | DROP TABLE IF EXISTS `student`; CREATE TABLE `student` (   `id` tinyint(4) NOT NULL,   `name` char(4) NOT NULL,   `sex` enum('남자','여자') NOT NULL,   `location_id` tinyint(4) NOT NULL,   `birthday` datetime NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  | cs | 
1 2 3 4 5 6 7  | DROP TABLE IF EXISTS `location`; CREATE TABLE `location` ( `id`  tinyint UNSIGNED NOT NULL AUTO_INCREMENT , `name`  varchar(20) NOT NULL , `distance`  tinyint UNSIGNED NOT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  | cs | 
1 2 3 4 5 6 7  | INSERT INTO `student` VALUES (1, '이주연', '여자', 1, '1982-11-16 00:00:00'); INSERT INTO `student` VALUES (2, '지한별', '남자', 2, '1985-10-26 00:00:00'); INSERT INTO `student` VALUES (3, '곽진성', '남자', 3, '1989-2-10 00:00:00'); INSERT INTO `student` VALUES (4, '박의성', '남자', 4, '1979-11-4 00:00:00'); INSERT INTO `student` VALUES (6, '백정헌', '여자', 5, '1985-1-1 00:00:00'); INSERT INTO `student` VALUES (7, '김대웅', '남자', 6, '1981-2-3 00:00:00'); INSERT INTO `student` VALUES (8, '전하람', '남자', 5, '1990-10-1 00:00:00');  | cs | 
1 2 3 4 5 6 7 8  | INSERT INTO `location` VALUES (1, '서울', 10); INSERT INTO `location` VALUES (2, '청주', 200); INSERT INTO `location` VALUES (3, '경주', 255); INSERT INTO `location` VALUES (4, '제천', 190); INSERT INTO `location` VALUES (5, '대전', 200); INSERT INTO `location` VALUES (6, '제주', 255); INSERT INTO `location` VALUES (7, '영동', 255); INSERT INTO `location` VALUES (8, '광주', 255);  | cs | 
- LEFT JOIN
 
가장 많이 사용
1  | SELECT s.name, s.location_id, l.name AS address, l.distance  FROM student AS s LEFT JOIN location AS l ON s.location_id = l.id;  | cs | 
- OUTTER JOIN vs INNER JOIN
 
Location에서 제주를 삭제 후 OUTTER JOIN과 INNER JOIN 비교
1 2 3 4 5  | DELETE FROM location WHERE name='제주';  SELECT s.name, s.location_id, l.name AS address, l.distance  FROM student AS s LEFT JOIN location AS l ON s.location_id = l.id;  SELECT s.name, s.location_id, l.name AS address, l.distance  FROM student AS s INNER JOIN location AS l ON s.location_id = l.id;  | cs | 
- 참고(출처)
 

실습
두 개의 테이블 생성
SELECT s.name, s.location_id, l.name AS address, l.distance FROM student AS s LEFT JOIN location AS l ON s.location_id=l.id
student AS s  | 
student 테이블을 s로 표시  | 
location AS l  | 
location 테이블을 l로 표시  | 
l.name AS address  | 
location 테이블의 name속성을 address로 표시  | 
student AS s LEFT JOIN location AS l  | 
student 테이블을 기준으로 location 테이블 조인  | 
ON s.location_id=l.id  | 
JOIN의 조건 = student 테이블의 location_id 속성값과 location 테이블의 id 속성값을 매치  | 
'제주'속성 지우고 OUTTER(LEFT) JOIN 과 INNER JOIN 비교
OUTTER(LEFT) JOIN
INNER JOIN
'Programming > DataBase' 카테고리의 다른 글
| SQL - 테이블(8) (0) | 2018.03.21 | 
|---|---|
| SQL - 테이블(7) (0) | 2018.03.21 | 
| SQL - 테이블(6) (0) | 2018.03.21 | 
| SQL - 테이블(5) (0) | 2018.03.21 | 
| SQL - 테이블(4) (0) | 2018.03.21 |