MySQL

MySQL의 테이블 합치기 inner join, outer join(right, left)와 ifnull 이용해 null값 변경

HooSL 2021. 12. 16. 12:49
INSERT INTO students (first_name) VALUES 
('Caleb'), ('Samantha'), ('Raj'), ('Carlos'), ('Lisa');

INSERT INTO papers (student_id, title, grade ) VALUES
(1, 'My First Book Report', 60),
(1, 'My Second Book Report', 75),
(2, 'Russian Lit Through The Ages', 94),
(2, 'De Montaigne and The Art of The Essay', 98),
(4, 'Borges and Magical Realism', 89);

먼저 데이터를 입력해줍니다.

students테이블은 id(int), first_name(varchar(45)) 이고

papers테이블은 id(int), title(varchar(100)), grade(int), student_id(int)

 

foreign keys로 students의 id와 papers의 student_id를 연결했습니다.

 

두 테이블을 합쳐봅니다.

join의 기본값이 right join이기 때문에 right는 작정 안하셔도 됩니다.

select students.first_name,papers.title,papers.grade
from papers
join students -- join하기
	on students.id = papers.student_id -- 중복되지 않게 이어주기
order by grade desc; -- 점수가 높은 순으로 정렬

이렇게 join을 하시면 두 테이블에 일치하는 값만 출력하게 됩니다.

나머지 2명이 안보이죠?

 

이럴때 left join을 하면 됩니다.

select first_name,title,grade
from students
left join papers
	on students.id = papers.student_id;

left join을 하시면 두 테이블간에 없는 값 null값도 출력하게 됩니다.

 

null값을 다른 문자열로 출력 하고 싶을땐

ifnull을 사용하시면 됩니다.

select s.first_name,
ifnull(p.title,'MISSING') as title,
ifnull(p.grade,0) as grade -- null이면 missing으로 출력해라 
from students s -- 이렇게 테이블 이름을 줄일 수도 있습니다. students = s
left join papers p -- 이렇게 테이블 이름을 줄일 수도 있습니다. papers = p
	on s.id = p.student_id; -- 줄인 테이블 명으로 설정

ifnull( 테이블명 . 컬럼명 , '변경할 문자 또는 숫자' )