SQL JOIN

김형민·2021년 7월 25일
0

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;
profile
항해 중인 개발자

0개의 댓글