** left/right join에서 주의해야 할 사항 → 내가 정한 기준은 빠지지 않음!!!! + 데이터의 수가 늘어날 수도 있다!!!
연결이 1:1 → 그대로 유지!!
연결이 1:n → 데이터의 수가 증가가 됨!!!
단순히 갯수로 체크하다보면,,,안 맞을 때가 있음!!!! 주의!!!!!!!
USE `test_join`;
show tables;
# --> members // movies
select * from members;
select * from movies;
비디오 대여점
movies
모든 대여 가능한 영화 정보들
id코드값, title제목, category 장르
members
대여한 정보들 (고객 중심 + 무엇을 대여)
id 대여기록 순서(순차적으로기록.. 중간 누락 반납)
first_name./ last_name : 빌려간 고객 이르름
movie_id 빌려간 영화 정보
#cross join : 양쪽 테이블을 특정 기준에 맞춰서 모든 조합 출력
select * from movies cross join members;
#
select * from members cross join movies;
#==> 공식적인 2개의 테이블의 모든 조합을 생성,,, 연결의 기준은 필요없음
# 참고) 비공식적인 방법
select * from movies, members;
#inner join : 두 테이블에서 모두 정보가 있는 데이터만 정리
# ==> 양쪽을 연결해주는 기준 on : 어느 테이블의 어느 필드명을 기준으로 할 것인가
select * from movies; -- 빌려간 영화/ 아직 안 빌려간 영화
#
select * from members; -- 오로지 지금 빌려간 영화만 있음 -> 뭔 영화 빌려갔는지 안 보임
# ==> 빌려간 영화 정보 : 영하 코드값으로 보임/ 제목이나 장르로는 보이지 않음
#***고객들이 별려간 영화에 대해서만 보자!!! 고객+영화 제목 다 보자
select * from members inner join movies on members.movie_id = movies.id;
# ==> 좀 귀찮은 점--> 반복 별로야ㅣ...
select * from members ME inner join movies M on ME.movie_id = M.id;
#==> 또 불편한 점 --> 보고자 하는 항목들이 선택 --> movie_id, id
select id, title, first_name, last_name
from members ME
inner join movies M on ME.movie_id = M.id; -- 오류남, id 어디서 가지고 와야하는지 애매함
#==> --> 명시적으로 어느 테이블의 필드를 볼지 소속을 얘기하면 됨
select M.id, M.title, ME.first_name, ME.last_name
from members ME
inner join movies M on ME.movie_id = M.id;
# q)기준: 영화 테이블을 기준(L), 혹시 빌려간 고객이 있다면 고객의 정보도 같이 보자
# ==> 영화 테이블에는 빌려간 영화 + 아직 안 빌려간 영화
select * from movies M
left join members ME on M.id = ME.movie_id;
# ==> movies 테이블에 있는 레코드들은 절대로 누락이 되지 않음
# ++ 단, 늘어날 수는 있다!
# --> movies의 레코드 수 확인 : count(1)
select count(1) from movies; -- 10건의 영화들 리스트업
#
select count(1) from movies M
left join members ME on M.id = ME.movie_id; -- 11건 영화 관련 + 고객 정....??????????
# ==> 영화를 기준으로 했지만 매칭기준에 의해서 1:n 인 경우가 있어서 데이터가 늘어날 수 있다alter
# Q) 위의 영화정보들을 기준으로 빌려간 고객들의 정보들이 있으면 보고, 없으면 말자
# ==> 보려는 항목 : 영화 id, 제목, 빌려간 고객 이름
select M.id, M.title,ME.first_name,ME.last_name
from movies M
left join members ME on M.id = ME.movie_id;
# Q) 위의 결과와 동일하게 나올 수 있도록, 영화 테이블을 오른쪽, 고객 정보 테이블을 왼쪽에 세팅
select M.id, M.title,ME.first_name,ME.last_name
from members ME
right join movies M on ME.movie_id = M.id;
# Q) 대여해간 고객들의 정보들을 기준으로 빌려가신 영화가 있다면 무슨 영화를 빌려갔는지 같이 보자
# ==> 볼 항목 : 고객 이름, 영화제목, 영화장르
select * from members ME
left join movies M on ME.movie_id = M.id;
-- 고객 정보 테이블의 수 : 6 --> 위의 결과 레코드 수 : 6 ==> 운 좋아서 일치 (1:1) (달라서 데이터 늘어날수도있음)
select ME.first_name, ME.last_name, M.title, M.category
from members ME
left join movies M on ME.movie_id = M.id;