3주차에서는 Join 명령어에 대해 공부했다. 데이터베이스에는 여러 정보들을 테이블 별로 나누어 담기 마련인데 Join를 이용하면 이런 나누어진 테이블을 연결하여 데이터를 도출 할 수 있게 된다. 물론 연결 시킬 테이블들에 동시에 존재하는 필드 값인 'key'가 필요하다.
사용 프로그램 : DBeaver, 사용 DB : 스파르타 코딩클럽
학습자료
Join 명령어는 크게 3가지가 있지만 inner join> left join> outer join순으로 많이 사용 된다. outer join은 극히 쓰일 일이 없으므로 넘어가고 left join 부터 알아보자.
left join
왼쪽의 테이블에 다른 테이블을 붙여 넣는 join을 의미한다.
select * from users u
left join point_users p
on u.user_id = p.user_id;
left join에서 주의 할 점은 순서로 from 뒤에 있는 테이블에 left join 뒤에 있는 테이블을 붙인다는 것을 꼭! 기억하자.
user_id 필드값이 point_users 테이블에 존재하지 않는 경우 빈 데이터 [NULL]로 표시된다.
NULL
비어 있는 데이터를 의미하며 Where is NULL이나 Where is not NULL 같은 조건문으로 이용 할 수 있다.
별칭 Alias
여기서 users 뒤의 u나 point_users의 p는 쿼리가 길어지는 것을 방지하기 위한 별칭이다. 마지막 줄의 u.user_id는 users 테이블에 있는 user_id를 지칭 하는 의미가 된다.
select u.name, count(u.name) as count_name from orders o
inner join users u
on o.user_id = u.user_id
where u.email like '%naver.com'
group by u.name
이런 식으로 as count_name으로 별칭하여 결과값에 표시되게 할 수 있다.
inner join
두 테이블의 교집합이라고 생각하면 편하다. 교집합이기 때문에 left join과 다르게 빈 데이터가 생성되지 않는다.
쓰는 방법은 위의 left join 식에서 left를 inner로 바꾸기만 하면 된다.
join을 여러 개 사용하는 경우는?
select * from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
이렇게 이어서 뒤에 붙여서 쓰면 된다.
데이터를 한번에 모아보고 싶은 경우 사용한다. 두개를 완전히 붙이는 것이기 때문에 필드명이 동일한 경우에만 사용 가능 하다.
연결할 결과값들을 ( )로 묶어서 사이에 union all만 써주면 된다.
! Uion 사용 시 내부정렬은 풀리므로 주의 !