LEFT JOIN
-- 왼쪽의 조건값이 null 혹은 오른쪽 값과일치하는 것이 없다면 그것을 감소하면서 가져오는게 left join
생활코딩님의 동영상을 보고 테이블 3개를 만들고 join에 대해서 공부해보았다
https://www.youtube.com/watch?v=pJqBR2TNe24&t=80s
-- DATA BASE 만들기
CREATE DATABASE join_prac;
USE join_prac;
SHOW TABLES;
CREATE TABLE topic (
`tid` INT NOT NULL,
`title` CHAR(20) DEFAULT NULL,
`description` CHAR(50) DEFAULT NULL,
`author_id` INT DEFAULT NULL
);
SHOW TABLES;
SELECT * FROM topic;
INSERT INTO topic
VALUES ('4','ORACLE','ORACLE is...', NULL);
CREATE TABLE profile (
`pid` INT NOT NULL,
`title` CHAR(20) DEFAULT NULL,
`description` CHAR(50) DEFAULT NULL
);
SHOW TABLES;
INSERT INTO profile
VALUES ('3','DBA', 'DBA is...');
SELECT * FROM
`profile`;
-- topic table을 기준으로 on 뒤에 조건
-- topic.author_id 와 오른쪽의 aid가 같은 짝으로
-- 데이터가 마치 뒤에 붙어서 기차같이? 출력된다
-- topic.author_id가 null인 row는 뒤에 null로 따라 붙는다
-- 왼쪽의 조건값이 null 이면 그것을 감소하면서 가져오는게 left join
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.ai
3개의 테이블을 join
-- topic.author_id = profile.pid; 조건에 맞게 profile table이 옆에 또 붙는다
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid
LEFT JOIN profile ON topic.author_id = profile.pid;
-- JOIN으로 SELECT하고 원하는 정보만 가져오기
-- title이란 column 명이 겹치므로 topic.title, profile.title 이런식으로 출처를 붙여준다
-- as 로 고유의 column명으로 가져올 수 있음
SELECT tid, topic.title, author_id, profile.title AS job_title FROM topic LEFT JOIN author ON topic.author_id = author.aid
LEFT JOIN profile ON topic.author_id = profile.pid;
SELECT tid, topic.title, city ,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 name = 'egoing';
INNER JOIN
LEFT JOIN과 달리 LEFT 조건값이 NULL 이면 그 ROW는 출력 안한다SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid;