SQL _ (Basic) mini Quiz

jaam._.mini·2023년 12월 24일
0
post-thumbnail

1

  • 테이블 생성
    CREATE TABLE oil_price
    (
    ID int,
    상호 varchar(16),
    주소 varchar(255),
    가격 int,
    셀프 char,
    상표 varchar(16),
    구 varchar(8)
    );
  • 데이터 생성
    INSERT INTO oil_price VALUES (1, '타이거주유소', '서울 은평구 수색로 188(중산동)', 1484, 'N', 'SK에너지', '은평구');
    INSERT INTO oil_price VALUES (2, '(주)명연에너지', '서울 은평구 수색로 236(수색동)', 1485, 'Y', '현대오일뱅크', '은평구');
    INSERT INTO oil_price VALUES (3, '성락주유소', '서울 영등포구 가마산로 414(신길동)', 1498, 'Y', 'S-OIL', '영등포구');
    INSERT INTO oil_price VALUES (4, '(주)MS주유소', '서울특별시 영등포구 대림로 230(대림동)', 1498, 'N', '현대오일뱅크', '영등포구');
    INSERT INTO oil_price VALUES (5, '쌍문주유소', '서울특별시 도봉구 도봉로 547(쌍문동)', 1509, 'Y', 'S-OIL', '도봉구');
    INSERT INTO oil_price VALUES (6, '21세기주유소', '서울 동작구 시흥대로 616(신대방동)', 1598, 'Y', 'SK에너지', '동작구');
    INSERT INTO oil_price VALUES (7, '살피재주유소', '서울 동작구 상도로 334(상도동)', 1635, 'N', 'SK에너지', '동작구');
    INSERT INTO oil_price VALUES (8, '뉴서울(강남)', '서울 강남구 언주로 716(논현동)', 2160, 'N', 'SK에너지', '강남구');
    INSERT INTO oil_price VALUES (9, '신길주유소', '서울특별시 영등포구 신길로 74(신길동)', 1498, 'Y', 'GS칼텍스', '영등포구');

✅ 셀프 주유가 가능하고 가격이 1500원보다 비싼 주유소 중 상호순으로 정렬하면 두번째 주유소 상호는?

✅ 첫글자가 ‘서울’로 시작하고 세번째 글자가 공백인 주소를 가진 주유소 중 구 이름으로 정렬했을 때 마지막 주유소 상호는?

✅ 가격이 2000원보다 비싸거나 1500원보다 싼 주유소를 상표순으로 정렬했을 때 3번째 주유소 상호는?

✅ 상호에 ‘주유소’가 포함되지 않거나 주소에 ‘특별시’가 포함되지 않은 주유소를 가격순으로 정렬했을 때 4번째 주유소 상호는?

✅ 상표가 SK에너지, S-OIL, GS칼텍스 중 하나이면서 위치(구)가 은평구, 강남구, 영등포구 중 하나가 아닌 주유소 상호는?

📌 가격이 1498원과 1598원 사이이거나 셀프주유가 아닌 주유소 중, 위치(구) 이름이 4글자 이상인 주유소를 상호순으로 정렬했을 때 두번째 주유소 상호는?

✅ 상호가 ‘주유소’로 끝나고 주소에 '시'가 포함된 주유소를 위치(구) 이름의 역순으로 정렬했을 때 세번째 주유소 상호는?

✅ 주소에 ‘특별시’가 포함되지 않거나 상표가 SK에너지, S-OIL 이 아닌 주유소 중에서 상호에 ‘(주)’ 가 포함되지 않은 주유소를 가격의 역순으로 정렬했을때 3번째 주유소 상호는?

✅ 위치(구) 이름에 은평구 이거나 셀프주유가 아니거나 주소에 '가' 가 포함된 주유소 중 가격이 1485원과 2000원 사이인 주유소를 상호순으로 정렬했을 때 2번째 주유소 상호는?

✅ ID가 짝수이면서 가격이 1500원보다 비싸거나, ID가 홀수이면서 상표가 'S'로 시작하는 주유소를 위치(구)이름으로 정렬했을때 5번째 주유소 상호는?


2

✅ 퀴즈 테이블 생성

CREATE TABLE refueling
(
ID int,
이름 varchar(32),
주유소 varchar(16),
주유일 date,
금액 int
);

✅ 퀴즈 데이터 생성

INSERT INTO refueling VALUES (1, '유재석', '뉴서울(강남)', '2021-10-01', 50000);
INSERT INTO refueling VALUES (2, '이미주', '뉴서울(강남)', '2021-10-01', 120000);
INSERT INTO refueling VALUES (3, '이효리', '제주주유소', '2021-10-03', 80000);
INSERT INTO refueling VALUES (4, '아이유', '타이거주유소', '2021-10-03', 80000);
INSERT INTO refueling VALUES (5, '유재석', '뉴서울(강남)', '2021-10-03', 60000);
INSERT INTO refueling VALUES (6, '강동원', '타이거주유소', '2021-10-10', 50000);
INSERT INTO refueling VALUES (7, '유재석', '쌍문주유소', '2021-10-10', 60000);
INSERT INTO refueling VALUES (8, '이미주', '타이거주유소', '2021-10-10', 50000);
INSERT INTO refueling VALUES (9, '아이유', '뉴서울(강남)', '2021-10-14', 150000);
INSERT INTO refueling VALUES (10, '아이유', '뉴서울(강남)', '2021-10-14', 120000);
INSERT INTO refueling VALUES (11, '유재석', '쌍문주유소', '2021-10-14', 80000);
INSERT INTO refueling VALUES (12, '유재석', '뉴서울(강남)', '2021-10-16', 110000);
INSERT INTO refueling VALUES (13, '이미주', '타이거주유소', '2021-10-16', 50000);
INSERT INTO refueling VALUES (14, '이효리', '제주주유소', '2021-10-20', 80000);
INSERT INTO refueling VALUES (15, '이상순', '제주주유소', '2021-10-20', 50000);
INSERT INTO refueling VALUES (16, '이상순', '타이거주유소', '2021-10-20', 140000);

  1. celeb 테이블과 refueling 테이블을 연예인 이름을 기준으로 inner join 하고 나이순으로 정렬했을 때 7번째 데이터의 연예인 이름은?
select refueling.이름, celab.age
from celab
INNER JOIN refueling
ON refueling.이름 = celab.name
ORDER BY age;
  1. oil_price 테이블과 refueling 테이블을 주유소 상호를 기준으로 left join 하고 oil_price 테이블의 가격으로 정렬했을 때 6번째 데이터의 상호는?
select oil_price.상호, oil_price.가격
from oil_price
LEFT JOIN refueling
ON refueling.주유소 = oil_price.상호
order by 가격;
  1. oil_price 테이블과 refueling 테이블을 주유소 상호를 기준으로 right join 하고 refueling 테이블의 이름으로 정렬했을 때 3번째 데이터의 상호는?
select refueling.이름, oil_price.상호
from oil_price
RIGHT JOIN refueling
ON refueling.주유소 = oil_price.상호 ORDER BY 이름;
  1. celeb 테이블과 refueling 테이블을 연예인 이름을 기준으로 full outer join 했을때 celeb.name 이 아이유인 데이터는 총 몇개?
SELECT celab.ID AS celab_ID, celab.name AS celab_name, refueling.ID AS refueling_ID, refueling.이름 AS refueling_name
FROM celab
LEFT JOIN refueling
ON celab.name = refueling.이름
UNION
SELECT celab.ID AS celab_ID, celab.name AS celab_name, refueling.ID AS refueling_ID, refueling.이름 AS refueling_name
FROM celab
RIGHT JOIN refueling ON celab.name = refueling.이름;
SELECT COUNT(*) AS 아이유_개수
FROM
(SELECT celab.ID AS celab_ID, celab.name AS celab_name, refueling.ID AS refueling_ID, refueling.이름 AS refueling_name
FROM celab
LEFT JOIN refueling
ON celab.name = refueling.이름
UNION
SELECT celab.ID AS celab_ID, celab.name AS celab_name, refueling.ID AS refueling_ID, refueling.이름 AS refueling_name
FROM celab
RIGHT JOIN refueling ON celab.name = refueling.이름) AS combined_data
WHERE combined_data.celab_name = '아이유';
  1. celeb 테이블과 refueling 테이블을 연예인 이름을 기준으로 self join 하여 소속사와 주유소 정보를 가져올때 중복을 제거하고 소속사 이름순으로 정렬하면 3번째 데이터는 다음중 무엇인가? (힌트. distinct agency, 주유소)
select distinct celab.agency, refueling.주유소
from celab, refueling
where celab.name = refueling.이름
order by agency;
  1. 직업이 가수이거나 텔런트인 연예인 중, 주유금액이 가장 큰 연예인의 이름은?
    힌트. celeb 테이블과 refueling 테이블을 연예인 이름을 기준으로 self join, 조건문 괄호 주의
select job.name, refueling.금액
from (select celab.name, celab.job_title from celab where job_title LIKE '%가수%' OR job_title LIKE '%텔런트%') AS job, refueling
where job.name = refueling.이름
order by refueling.금액 DESC;
  1. 강남구에 있는 주유소에서 가장 적은 금액을 주유한 연예인의 이름은?
    힌트. oil_price 테이블과 refueling 테이블을 연예인 이름을 기준으로 self join
select oil_price.상호, oil_price.from oil_price
where oil_price.= '강남구';
select refueling.이름, refueling.금액
from (select oil_price.상호, oil_price.from oil_price where oil_price.= '강남구') AS gangnam, refueling
where refueling.주유소 = gangnam.상호
order by refueling.금액;
  1. 주유소 상호에 ‘주유소’를 포함하지 않고 셀프주유가 아닌 주유소에서 가장 최근 주유한 연예인 이름은?
    힌트. oil_price 테이블과 refueling 테이블을 연예인 이름을 기준으로 self join
select oil_price.상호, oil_price.셀프 from oil_price where 상호 NOT LIKE '%주유소' AND 셀프 = 'N';
select refueling.이름, refueling.주유소, refueling.주유일
from (select oil_price.상호, oil_price.셀프 from oil_price where 상호 NOT LIKE '%주유소' AND 셀프 = 'N') AS con, refueling
where con.상호 = refueling.주유소
order by 주유일 desc;
profile
비전공자의 데이터 공부법

0개의 댓글