Data Story

데이터 사이언스, 쉽게 설명하기

Coding Test

SQL - [AS, JOIN, UNION]

_data 2022. 12. 7. 23:23

AS

as, alias는 맨 마지막에 할당되기 때문에 alias로 필터링을 할 수 없다.

Where문이나 Having절 같은 곳에서는 사용할 수 없다.

따라서 원래 열 이름이나 원래 함수 중 하나를 선택해야 한다.

 

select customer_id , sum(amount) as total_spent from payment
group by customer_id having sum(amount) > 100 ;

JOIN

[inner join]

select * from TableA inner join TableB on TableA.col_match = TableB.col_match

e.g.

그림 1

/^그림 1*/
select payment_id, payment.customer_id,first_name from payment inner join customer on payment.customer_id = customer.customer_id;

[outer join]

/*grammer*/
select * from TableA full outer join TableB on TableA.col_match = TableB.col_match

e.g.

select * from customer full outer join payment on customer.customer_id = payment.customer_id 
where customer.customer_id is NULL or payment.payment_id is NULL

[left outerjoin]

왼쪽 테이블을 기준, 오른쪽 테이블에만 있는 경우, 그 결과는 NULL

/*grammer*/
select * from TableA left join TableB on TableA.col_match = TableB.col_match

e.g.,

select film.film_id, film.title, inventory_id,store_id from film left join inventory 
on inventory.film_id = film.film_id 
where inventory.film_id is null /*차집합 A*/

UNION

2개 이상의 SELECT문의 결과 세트를 결합

e.g.

그림 2
select column_name from table1 UNION select column_name from table2;

단, 두 문장이 논리적이어야 하며 서로의 바로 위에 결과를 쌓을 수 있도록 열이 일치해야 한다.


[예상문제]

1. "California에 거주하는 사람의 이메일 주세요."

그림 3

select address.district, customer.email from address inner join customer 
on address.address_id = customer.address_id where district = 'California';

2. "Nick Wahlberg가 출현하는 영화 작품들을 주세요."

그림 4

select first_name, last_name,title from actor inner join film_actor 
on actor.actor_id = film_actor.actor_id inner join film on film.film_id = film_actor.film_id 
where last_name = 'Wahlberg' and first_name = 'Nick';

'Coding Test' 카테고리의 다른 글

SQL - [CASE, COALESCE, CAST, NULLIF]  (0) 2022.12.13
SQL - [Table Command]  (0) 2022.12.13
SQL - [DB, Table]  (0) 2022.12.13
SQL - [고급 SQL]  (2) 2022.12.07
SQL - [Practice]  (0) 2022.12.07