[MySQL] JOIN, UNION

thingzoo·2023년 6월 1일
0

MySQL

목록 보기
13/17
post-thumbnail

JOIN

두 개이상의 테이블을 결합하여 데이터를 검색하는 방법

  • 관련있는 컬럼 기준으로 행을 합쳐주는 연산
  • 주로 공통된 정보인 PK/FK을 이용

    종류: Inner Join, Natural Join, Outer Join(Left/Right Join), Cross Join 등
    이중에서 가장 많이 쓰는 Left Join, Inner Join을 알아보자

Inner Join

  • Equi Join: 공통 존재 컬럼의 값이 같은 경우를 추출
  • Natural Join: 두 테이블의 모든 컬럼을 비교해, 같은 컬럼명을 가진 값이 같은 경우를 추출
  • Cross Join: 조인 조건이 없는 모든 데이터 조합을 추출

표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용

(INNER) JOIN

select * from users u
(inner) join point_users p
on u.user_id = p.user_id;

-- 동일한 동작을 함
select * from users u, point_users p
where u.user_id = p.user_id;

Outer Join

  • Left Outer Join: 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출
  • Right Outer Join: 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출
  • Full Outher Join: 양쪽의 모든 데이터를 추출

LEFT (Outher) JOIN

  • 오른쪽이든 왼쪽이든 상관없기 때문에 주로 왼쪽 조인 가장 많이 씀
select * from users u
left join point_users p
on u.user_id = p.user_id;

예제

-- 네이버 이메일 사용하는 유저의 성씨별 주문건수 세어보기
select u.name, count(u.name) as count_name from orders o
inner join users u
on o.user_id = u.user_id 
where u.email like '%naver.com'
group by u.name
  • 쿼리 실행 순서: from → join → where → group by → select

join은 항상 from 다음에 실행

집합 연산자

두 개 이상의 SQL 쿼리문을 결합하는 데 사용

  • SELECT절의 컬럼 수가 동일해야 하며, 같은 위치에 있는 컬럼들은 데이터 타입이 호환 가능해야함
SELECT[집합 연산자]
SELECT
  • UNION: 결과를 합칠때 중복되는 행은 하나만 표시(합집합)
  • UNION ALL: 중복제거를 하지 않고 모두 합침(합집합, 중복허용)
  • INTERSECT: 결과를 합칠때 중복되는 행만 표시(교집합)
  • EXCEPT(MINUS): 첫번째 SQL문의 결과에서 두번째 SQL문의 결과를 뺌(차집합)

MySQL에는 교집합과 차집합을 다루는 INTERSECT, MINUS 연산자가 없으므로 다음과 같이 표현한다.

  • 교집합: IN 연산자 이용
  • 차집합: NOT IN 연산자 이용
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글