728x90
두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어내는 것
(사용자가 필요한 집합 결과 도출)
|
|
|
|
|
|
|
|
|
ex) A - member_level 테이블 pk(4레코드) / B - member 테이블 fk(15 레코드)
1. inner join - 15개
2. left join - 16개(하나의 레코드가 member 테이블과 교집합인게 없음) > member 테이블의 레코드들이 null값으로 나옴
3. right join - 15개(null이 없을 경우 inner join과 값이 같음)
실습1. 판매자마다 판매한 물건의 갯수를 아이디,이름과 함께 조회하라(상품 개수 출력 예시 : 10개)
SELECT
g.g_seller_id AS '판매자 아이디',
m.m_name AS '판매자 이름',
CONCAT(CAST(COUNT(g.g_code) AS CHAR),'개') AS '등록한 상품 갯수'
FROM
tb_member AS m
INNER JOIN
tb_goods AS g
ON
g.g_seller_id = m.m_id
INNER JOIN
tb_member_level AS l
ON
m.m_level = l.level_num
GROUP BY g.g_seller_id
;
실습2. 판매한 물건이 없는 판매자의 회원 정보를 조회하라
SELECT
m.*
FROM
tb_member AS m
INNER join
tb_member_level AS l
ON
m.m_level = l.level_num
left join
tb_goods AS g
on
g.g_seller_id = m.m_id
WHERE
l.level_name='판매자'
AND g.g_code IS null
;
실습3. 회원 등급 별 회원수를 집계하라
SELECT
l.level_name AS '등급'
,COUNT(m.m_id) AS '집계'
FROM
tb_member_level AS l
LEFT join
tb_member AS m
on
l.level_num = m.m_level
GROUP by
l.level_num;
UNION
- 여러개의 쿼리의 합집합
- 쉽게 풀어 설명하면, 조건없이 여러개의 테이블을 위아래로 붙임(JOIN은 조건을 기준으로 좌우로)
- union : 여러 개의 쿼리의 중복 값을 제거한 결과
- union all : 여러 개의 쿼리 결과가 중복이 되더라도 전부 결과에 반영
- 속도 : union all > union
규칙
- 각 select의 컬럼 수가 같아야 한다
- 컬럼명이 같아야 한다 (같지 않을 경우 alias를 사용하여 같게 만듦)
- 데이터타입이 같아야 한다 (반환 가능한 형태)
- order by절은 하나만
- select문들의 순서는 상관없다
(union을 할 수 있는 조건과 join과의 차이점을 알아둬야함)
'{ "Hello World!" }; > DataBase' 카테고리의 다른 글
(DB) 정규화 (0) | 2022.01.20 |
---|---|
(DB) 데이터베이스 설계 (0) | 2022.01.14 |
(DB) MySQL 내장 함수,연산자 (0) | 2021.12.29 |
(DB) 데이터 모델링, 관계형 데이터 모델 (0) | 2021.12.29 |
(DB) 데이터베이스, SQL (0) | 2021.12.23 |