본문 바로가기
SQL 문제 풀기/2. SQLD 기출 : 2024.3.01~2024.4.25

<SQLD 44> 조인에 대한 기출문제

by HYEHYE_SON 2024. 4. 13.
728x90

매일 SQLD 기출 문제 풀기 챌린지


 


문제 44.

아래의 테이블에 대해서 주어진 SQL문을 수행한 결과로 알맞은 것은?  

 

[ 테이블 : TEST44_1 ]

JUMUN PRICE
10 2000
10 3000
20 4000
20 3500

 

[ 테이블 : TEST44_2 ]

 CUSTRANK       MINPRICE    MAXPRICE
VVIP 6000 6999
VIP 5000 5999
GOLD 4000 4999

 

[ SQL ]

SELECT A.JUMUN AS JUMUN, B.CUSTRANK AS CUSTRANK
    FROM (SELECT JUMUN, SUM(PRICE) AS TOTAL 
           FROM TEST44_1 GROUP BY JUMUN) A
      , TEST44_2 B
    WHERE A.TOTAL BETWEEN B.MINPRICE AND B.MAXPRICE;

 
① 

JUM CUSTRANK
10 VIP
20 GOLD

 

 


② 

JUM CUSTRANK
10 SILVER
20 GOLD

 

 


③ 

JUM CUSTRANK
10 VIP

 

 


④ 

JUM CUSTRANK
10 VIP
10 VIP
20 GOLD
20 GOLD

해설해보기

< 인라인뷰 >
먼저 TEST44_1 테이블의 JUMUN 별 PRICE의 합계를 출력하는데, 합계를 TOTAL 이라는 이름으로 출력합니다.
이 결과를 가지고 TEST44_2와 조인하기 위하여 인라인뷰 결과를 A로 지칭합니다. 

< 메인쿼리 >
인라인뷰 A의 결과와 TEST44_2를 조인하는데, 
동일한 값을 가진 컬럼이 없기 때문에 MINPRICE와 MAXPRICE를 사용합니다.
따라서 인라인뷰 A의 TOTAL 값이 MINPIRCE와 MAXPRICE 사이에 속하는 레코드를 선택하도록 하는 연결조건을 줍니다. 

마지막으로 JUMUN과 CUSTRANK를 출력하는데, 
JUMUN 10의 TOTAL 값은 2000+5000이기 때문에 CUSTRANK는 VIP가 됩니다.
그러나 연결조건에 의해 JUMUN이 20일때 TOTAL 값이 4000+3500=7500 이기 때문에 
MINPRICE와 MAXPRICE 사이라는 조건에 성립되지 않아 레코드 결과에 포함될 수 없습니다. 

따라서 이 쿼리의 실행 결과
JUMUN은 10이며, 고객 등급은 VIP 인 단 하나의 레코드만 출력됩니다. 

 
직접 실행해보기

SELECT A.JUMUN AS JUMUN, B.CUSTRANK AS CUSTRANK
    FROM (SELECT JUMUN, SUM(PRICE) AS TOTAL 
           FROM TEST44_1 GROUP BY JUMUN) A
      , TEST44_2 B
    WHERE A.TOTAL BETWEEN B.MINPRICE AND B.MAXPRICE;

 


관련 스크립트

#TEST44_1

create table TEST44_1
(
jumun number(10),
price number(10));

insert into TEST44_1 (jumun, price) values(10, 2000);
insert into TEST44_1 (jumun, price) values(10, 3000);
insert into TEST44_1 (jumun, price) values(20, 4000);
insert into TEST44_1 (jumun, price) values(20, 3500);

commit;


#TEST44_2

create table TEST44_2
(
custrank varchar2(20),
minprice number(10),
maxprice number(10));

insert into TEST44_2 (custrank, minprice, maxprice) values ('VVIP', 6000, 6999);
insert into TEST44_2 (custrank, minprice, maxprice) values ('VIP', 5000, 5999);
insert into TEST44_2 (custrank, minprice, maxprice) values ('GOLD', 4000, 4999);

commit;

 
 
 

반응형