LEFT OUTER JOIN (= LEFT JOIN)
왼쪽 테이블 기준으로 오른쪽 테이블을 합침
SELECT
i.id,
i.name,
s.item_id,
s.inventory_count
FROM item AS i LEFT OUTER JOIN stock AS s #테이블에 alias 붙여줌
ON i.id = s.item_id #테이블 조인 조건
조인할 때는 SQL 문이 길어지기 때문에 테이블 이름에 alias를 붙여주는 게 좋다.
RIGHT OUTER JOIN (= RIGHT JOIN)
오른쪽 테이블 기준으로 왼쪽 테이블을 합침
SELECT
i.id,
i.name,
s.item_id,
s.inventory_count
FROM item AS i RIGHT OUTER JOIN stock AS s #테이블에 alias 붙여줌
ON i.id = s.item_id #테이블 조인 조건
INNER JOIN
기준이 되는 테이블이 따로 없음
집합으로 치면 두 테이블의 교집합을 구하는 것과 같음
두 테이블 모두 기준 컬럼에 (ON) 값이 있는 row가 합쳐짐
그래서 LEFT, RIGHT 조인 처럼 NULL 값이 있지는 않음
SELECT
i.id,
i.name,
s.item_id,
s.inventory_count
FROM item AS i INNER JOIN stock AS s
ON i.id = s.item_id #테이블 조인 조건
Join(조인)의 조건을 설정할 때 ON 절을 사용하는데
만약 조인 조건으로 쓰인 두 컬럼의 이름이 같으면 ON 대신 USING을 쓰는 경우도 있다.
아래 두 쿼리문은 결과가 같다.
조인 조건으로 사용되는 컬럼들의 이름이 같으면 그냥 USING이라고 쓰고 그 안에 컬럼 이름을 쓰는 것도 가능하다.
UNION, UNION ALL
두 테이블의 합집합을 구해주는 집합 연산자 UNION
일반적으로는 같은 종류의 두 테이블의 합집합을 구하기 위해 사용하지만,
서로 다른 종류의 테이블도, 조회하는 컬럼을 일치시키면 집합 연산이 가능하다.
(총 컬럼의 수와, 각 컬럼의 데이터 타입만 일치하면 UNION 연산이 가능)
예시 >
두 테이블의 공통 컬럼들인 id, nation, count로 바꿔주고 UNION 실행
UNION은 두 테이블이 공통적으로 갖고 있는 원소들, 즉 두 테이블의 교집합에 해당하는 영역의 row들은 중복을 제거하고, 그냥 딱 하나의 row만 보여준다.
UNION ALL은 UNION처럼 두 테이블의 합집합을 보여준다는 점은 같다.
하지만 겹치는 것을 중복 제거하지 않고, 겹치는 것들도 모두 다 보여준다.
예시 >
서로 다른 3개의 테이블 조인하기
조인은 2개, 3개의 테이블 뿐아니라 더 많은 수의 테이블도 조인할 수 있다.
예시 >
위 첫번째 노란 박스가 먼저 조인되고, 조인된 결과 테이블이 아래 노란 박스의 member 테이블과 조인 되는 것이다.
= item 테이블과 review 테이블이 조인되고, 그렇게 만들어진 결과 테이블이 member 테이블과 조인 되는 것이다.
예시 >
여성 회원들이 좋은 평점을 준 상품들 정렬해서 보기 (리뷰수는 2개이상인 상품들)
SELECT i.id, i.name, AVG(star), COUNT(*)
FROM
item AS i LEFT OUTER JOIN review AS r #item 테이블과 review 테이블 조인
ON r.item_id = i.id
LEFT OUTER JOIN member AS m # 위 결과 테이블과 member 테이블 조인
ON r.mem_id = m.id
WHERE m.gender = 'f'
GROUP BY i.id, i.name
HAVING COUNT(*) > 1
ORDER BY
AVG(star) DESC,
COUNT(*) DESC;
출력 결과>
'IT > SQL' 카테고리의 다른 글
[MySQL] 데이터베이스 컬럼의 데이터타입 (0) | 2022.02.02 |
---|---|
[MySQL] 데이터베이스 생성하기 (0) | 2022.02.02 |
[MySQL] 뷰 (VIEW) 만들기 (0) | 2022.02.01 |
[MySQL] 서브쿼리 사용법 (0) | 2022.02.01 |
[MySQL] SELECT 문 각 절들의 사용 순서, 실제 실행 되는 순서 (0) | 2022.01.26 |
댓글