everyday com-eat
작성일
2021. 12. 29. 18:21
작성자
갱수터
728x90

두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어내는 것

(사용자가 필요한 집합 결과 도출)

  • INNER JOIN
    - 교집합 (특정 컬럼 기준)
  • OUTTER JOIN
    - 한 쪽 집합 모두 출력(특정 컬럼 기준)
  • SELF JOIN
    - 동일 집합끼리 특정 컬럼 기준으로 집합 출력
    계층형 구조를 만들 때 사용 ex) 사원 구조

    더보기
    SELECT
    m1.m_id AS memberId1
    ,m2.m_id AS memberId2
    ,m2.m_addr AS memberAdr
    FROM
    tb_memberAS m1
    join tb_member AS m2
    on
    m1.m_id <> m2.m_id
    AND
    m1.m_addr = m2.m_addr
    ORDER BY memberId1;
  • CROSS JOIN
    - 두 집합의 곱집합 출력

  • NATURAL JOIN
    - 특정 집합의 같은 이름을 가진 컬럼 간의
    조인집합을 출력

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과의 차이점을 알아둬야함)

728x90

'{ "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