[서브쿼리/조인/GROUP BY/EXISTS SQL퀴즈예제]
- 프로그래밍언어별(programming_name) 프로그래머 수를 출력하세요.
(모든 프로그래밍 언어 표시, programming_name 오름차순)
PROGRAMMING_NAME COUNT(B.PROGRAMMER_ID)
----------------------- ----------------------
C 1
C# 1
JAVA 2
PYTHON 0
select a.programming_name, count(b.programmer_id)
from programming a left outer join programmer b
on a.programming_id = b.programming_id
group by a.programming_name
order by programming_name asc
select a.programming_name, count(b.programmer_id)
from programming a, programmer b
where a.programming_id = b.programming_id(+)
group by a.programming_name
order by a.programming_name asc
- NOT EXISTS를 사용하여 개발자가 한명도 없는 프로그래밍언어이름(programming_name)을 출력하세요.
PROGRAMMING_NAME
-------------------
PYTHON
select programming_name
from programming a
where not exists (select 1 from programmer b
where a.programming_id = b.programming_id)
- NOT IN을 이용하여 프로그래머가 한명도 없는 프로그래밍언어이름(programming_name)을 출력하세요.
PROGRAMMING_NAME
-------------------
PYTHON
select programming_name
from programming a
where a.programming_id not in (select programming_id from programmer b
where a.programming_id = b.programming_id)
- JAVA 프로그래머의 이름을 출력하세요.
PROGRAMMER_NAME
---------------
김길동
헐길동
select programmer_name
from programmer
where programming_id = (select programming_id from programming
where programming_name = 'JAVA')
- 프로그래밍이름(programming_name)별, product의 수, product의 최대가격(price)을
출력하세요.
PNAME CNT MAXPRICE
---------------- ---------- ----------
C# 1 3000
JAVA 2 2000
C 2 3000
- 프로그래머 경력3년 이상인 사람이 만든 Product을 구입한 고객의 이름을 출력하세요.
CUSTOMER_NAME
---------------
4번고객
select customer_name
from customer a1
where customer_id in (
select customer_id
from product_order a,
product b,
programmer c
where a.product_id = b.product_id
and c.programmer_id = b.programmer_id
and c.career >= 3
)
- 프로그래밍언어별, product_name별 주문건수 합계를 출력하세요.
programming_name product_name cnt
------------------------------------------------------
C# ANDROID APP 2
JAVA SHOPPING MALL 7
C iOS APP 1
JAVA ERP 1
select programming_name,
product_name,
sum(cnt) cnt
from programming a, programmer b, product c, product_order d
where a.programming_id = b.programming_id
and b.programmer_id = c.programmer_id
and c.product_id = d.product_id
group by programming_name, product_name
- product_name별, 주문년도별 주문금액 합계를 출력하세요.
(단 주문금액합계가 5000 이상인 데이터만,
주문내역이 없는 product_name도 출력 하세요.)
PRODUCT_NAME NVL(TO_ NVL(TO_C
-------------------- ------- --------
ANDROID APP 2015 6,000
SHOPPING MALL 2016 14,000
select product_name,
nvl(to_char(order_date,'yyyy'),'no data'),
nvl(to_char(sum(price*cnt),'999,999'), 0)
from product a, product_order b
where a.product_id = b.product_id(+)
group by product_name, to_char(order_date,'yyyy')
having sum(price*cnt) >= 5000
- 세로축은 product_name별, 가로축은 주문년도를 "2015년", "2016년"으로 구성하여
product_name별, 년도별 주문건수를 집계하세요.(주문건수가 없으로 0으로 표시)
product_name 2015년 2016년
---------------------------
ERP 0 1
ANDROID APP 2 0
SHOPPING MALL 0 7
iOS APP 1 0
select product_name,
nvl(sum(decode(to_char(order_date,'yyyy'),'2015',cnt)),0) "2015년",
nvl(sum(decode(to_char(order_date,'yyyy'),'2016',cnt)),0) "2016년"
from product a, product_order b
where a.product_id = b.product_id
group by product_name
- product_name별 구입한 고객의 이름을 콤마(,)로 구분하여 하나의 칼럼에 출력하세요.
(고객의 이름은 오름차순 정렬)
product_name customer_name
---------------------------
ANDROID APP 4번고객
ERP 1번고객
SHOPPING MALL 2번고객,3번고객
iOS APP 5번고객
select product_name,
listagg(customer_name, ',') within group(order by customer_name) customer_name
from customer a, product b, product_order c
where a.customer_id = c.customer_id
and b.product_id = c.product_id
group by product_name