지금은마라톤중

멋사 AI스쿨_SQL_TIL (5) 본문

멋쟁이사자처럼/SQL

멋사 AI스쿨_SQL_TIL (5)

달리는중 2023. 2. 2. 17:44

2023.01.27

 

집합

- 출처 : 위니브
- 출처 : 위니브

 

 

 

UNION(합집합)

- 두 집합을 합하는 것을 반환

• all : 중복 값을 포함한 모든 결과 확인 

select * from `weniv.weniv_user` as user1
UNION ALL
select * from `weniv.weniv_user3` as user3

• distinct : 중복 값을 제거한 모든 결과 확인 

select * from `weniv.weniv_user` as user1
UNION DISTINCT
select * from `weniv.weniv_user3` as user3

 

 

 INTERSECT(교집합)

- 두 집합 모두에 나타나는 것만 반환

select * from `weniv.weniv_user` as user1
INTERSECT DISTINCT
select * from `weniv.weniv_user3` as user3

 

 

● EXCEPT(차집합, A-B)

- A 집합에서 B 집합을 뺀 것을 나타냄

select * from `weniv.weniv_user` as user1
except DISTINCT
select * from `weniv.weniv_user3` as user3

 

 

 

서브쿼리와 WITH

 

 

● 서브쿼리(Sub Query)

- 다른 SQL문 안에 중첩된 SELECT 문

- select 절, from 절, where 절 등에서 사용 가능

 

# from 절에 사용한 예시

select id,
  a.first_name,
  a.last_name,
  b.order_count as order_count
from `thelook_ecommerce.users` a
left join (
    select user_id, count(order_id) as order_count 
    from `thelook_ecommerce.orders`
    group by user_id
  ) b on a.id = b.user_id
order by a.id
limit 10;

 

●  WITH (Common Table Expressions)

- 쿼리 내에서 임시 결과를 정의하고 사용

- 주요 사용 목적은 복잡한 추출 과정을 분할하여 단계적으로 처리하면서 전체 데이터 추출과정을 단순화시키는 것

- 표현식 : WITH CTE명 AS ( 쿼리 표현식 )

   * CTE(유사 테이블)

 

• 회원수가 4000명 이상인 국가명과 국가의 회원수

   -> 회원수가 4000명 이상인 국가명과 회원수를 나타내는 임시 테이블를 with로 정의하고 메인 from 절에서 불러온다.

WITH user_counts AS (
  select 
    country, 
    count(id) as user_count
  from `thelook_ecommerce.users`
  group by country
  having count(id)>=4000
)
select * from user_counts;

• 유사테이블 2개 이상을 만들 때는 , 로 구분한다. 

WITH user_order_counts AS (
  select user_id, count(order_id) as order_count 
  from `thelook_ecommerce.orders` 
  group by user_id
), user_event_counts AS (
  select user_id, count(id) as event_count 
  from `thelook_ecommerce.events` 
  group by user_id
) 
select 
  a.id,
  a.first_name,
  a.last_name,
  b.order_count,
  c.event_count
from `thelook_ecommerce.users` a
left join user_order_counts b on a.id = b.user_id 
left join user_event_counts c on a.id = c.user_id
order by b.order_count DESC, c.event_count DESC

 

 

 

 

 

 

 

 

 

'멋쟁이사자처럼 > SQL' 카테고리의 다른 글

멋사 AI스쿨_SQL_TIL (6)  (0) 2023.02.07
멋사 AI스쿨_SQL_TIL (4)  (0) 2023.02.02
멋사 AI스쿨_SQL_TIL (3)  (0) 2023.01.25
멋사 AI스쿨_SQL_TIL (2)  (0) 2023.01.20
멋사 AI스쿨_SQL_TIL (1)  (4) 2023.01.13
Comments