[SQL 기초 강의] 10강. 두 테이블을 묶는 JOIN(INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN)을 보고 정리했습니다.

참고로 MySQL 에는 Full outer join 이 없으므로 left outer join 과 right outer join 을 union하는 식으로 outer join 해야한다.
내부조인
두 테이블을 연결할 때 가장 많이 사용되는 것이 내부 조인이다. 그냥 조인이라 부르면 내부 조인을 의미한다
두 테이블의 조인을 위해서는 테이블이 일대다(one to many) 관계로 연결되어야 한다.
기본 내부 조인형식
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
INNER JOIN 을 그냥 JOIN이라고 써도 INNER JOIN으로 인식한다.
내부조인 실습(유튜브 ~9:22)
user market_db;
select *
from buy
inner join member
on buy.mem_id = member.mem_id (두 테이블에서 같은 걸 조인하라는 조건을 붙는다. inner join의 거의 필수 조건)
where buy.mem_id='GRL'; (두 테이블 중 이 정보에 대해서만 알고 싶은 것이다.)
where 절 빼고 실행하면 전체가 join 된다.
select *
from buy
innmer join member
on buy.mem_id = member.mem_id;
테이블이 2개니까 같은 컬럼명이면 테이블 이름을 명시한다.
잘못된 예 :첫째줄 mem_id 보면 된다.
select mem_id, mem_name, prod_name, addr, concat(phon1, phone2) as '연락처'
from buy
innmer join member
on buy.mem_id = member.mem_id;
올바른 예
select buy.mem_id, mem_name, prod_name, addr, concat(phon1, phone2) as '연락처'
from buy
innmer join member
on buy.mem_id = member.mem_id;
member 테이블에도 mem_id가 있으니까 member.mem_id 해도 되지만 구매 테이블을 기준으로 조회하는거기 때문에 buy.mem_id 로 했다.
외부조인
내부 조인은 두 테이블에 모두 데이터가 있어야만 결과가 나온다. 이와 달리 외부 조인은 한 쪽에만 데이터가 있어도 결과가 나온다.
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON(조인될 조건)
[WHERE 검색 조건];
LEFT OUTER JOIN 한다고 할 때 from 절 보면 왼쪽을 기준으로 데이터가 다 나온다는 뜻
RIGHT OUTER JOIN 한다고 하면 오른쪽 기준으로 데이터가 다 나온다는 뜻이다.
LEFT 만 알아도 된다. RIGHT 를 써야하면 RIGHT 안쓰고 테이블 위치만 바꿔서 LEFT 쓰면 되기 때문이다.
FULL 은 양쪽 테이블 다 나온다 LEFT RIGHT 다 합친 것이다.
외부조인 실습(15:46~)
LEFT JOIN
select M.mem_id, M.mem_name, B.prod_name, M.addr
from member M
left outer join buy B
on M.mem_id = B.mem_id
order by M.mem_id;

proud_name 에 빈칸이 있다. 왼쪽 기준으로 모든 데이터가 다 나오기 때문에 오른쪽 테이블에 데이터가 없어도 다 출력이 된다. <대표적인 형태>
RIGHT JOIN
select M.mem_id, M.mem_name, B.prod_name, M.addr
from buy B
right outer join member M
on M.mem_id = B.mem_id
order by M.mem_id;
left join 에서 테이블 위치만 서로 바꾸면 된다.
CROSS JOIN
테이블 A와 테이블 B를 조건없이 모두 매칭 한 결과다
https://royzero.tistory.com/entry/SQL-JOIN%EC%9D%B4%EB%9E%80-CROSS-JOIN
'SQL' 카테고리의 다른 글
| SQL 프로그래머스 131530 가격대 별 상품 개수 구하기 (0) | 2024.02.08 |
|---|---|
| SQL 프로그래머스 131537 오프라인/온라인 판매 데이터 통합하기 (0) | 2024.01.21 |
| 133026 성분으로 구분한 아이스크림 총 주문량 (0) | 2024.01.21 |
| SQL 프로그래머스 131529 카테고리 별 상품 개수 구하기 (0) | 2024.01.21 |
| SQL 프로그래머스 157342 자동차 평균 대여 기간 구하기 (0) | 2024.01.21 |