Skip to Content
Suffering builds character

4.추가 연습문제 해답

1. actor 테이블 내 모든 컬럼이 포함된 전체 데이터(행) 조회

sql
SELECT * FROM actor;

2. actor 테이블에서 last_name 컬럼만 포함된 전체 데이터 조회

sql
SELECT last_name FROM actor;

3. film 테이블에서 영화 제목, 영화 설명, 대여 기간(rental_duration), 대여 비용(rental_rate), 총 렌탈 비용(직접 생성할 새로운 컬럼)에 해당하는 데이터를 상위 10개만 조회

컬럼 설명

  • rental_duration: 대여 기간(day 기준), → The length of the rental period, in days
  • rental_rate: rental_duration 컬럼에 저장된 기간 동안 film을 대여하는데 필요한 비용 The cost to rent the film for the period specified in the rental_duration column
sql
SELECT rental_duration, rental_rate, (`rental_duration` * `rental_rate`) AS "total_rental_cost" FROM film LIMIT 5;

4. actor 테이블에서 서로 다른(겹치지 않는) last_name열에 해당하는 모든 데이터 조회

sql
SELECT DISTINCT last_name FROM actor;

5. address 테이블에서 서로 다른 postal_code열에 해당하는 모든 데이터 조회

sql
SELECT DISTINCT postal_code FROM address;

6. film 테이블에서 영화 제목, 줄거리, rating(영화 등급), length(영화 러닝타임, minutes 기준) 열에 해당하는 모든 데이터를 조회하되, 러닝타임이 3시간 이상인 데이터만 필터링하여 조회

sql
SELECT title, description, rating, length AS "러닝타임" FROM film WHERE `length` >= 180;

7. payment 테이블에서 payment_id, 금액, 지불날짜 열에 해당하는 모든 데이터를 조회하되, 2005년 8월 23일 자정 이후에 지불된 데이터만 필터링하여 조회

sql
SELECT payment_id, amount, payment_date FROM payment WHERE `payment_date` >= "2005-08-23 00:00:00";

8. payment 테이블에서 payment_id, 금액, 지불날짜 열에 해당하는 모든 데이터를 조회하되, 지불날짜가 2005년 8월 23일만 해당하는 모든 데이터 조회

payment_date 컬럼의 데이터 타입이 datetime일 경우, 다음의 쿼리로 조회 불가

sql
SELECT payment_id, amount, payment_date FROM payment WHERE payment_date = "2005-05-27"; // Empty set

BETWEEN, LIKE, DATE()를 활용하여 해결

BETWEEN

sql
SELECT payment_id, amount, payment_date FROM payment WHERE payment_date BETWEEN "2005-08-23 00:00:00" AND "2005-08-24 00:00:00";

LIKE

sql
SELECT payment_id, amount, payment_date FROM payment WHERE payment_date LIKE '2005-08-23%';

DATE()

sql
SELECT payment_id, amount, payment_date FROM payment WHERE DATE(payment_date) = "2005-08-23";

9. customer 테이블에서 모든 열에 해당하는 데이터를 조회하되, last_name이 s로 시작하고, first_name이 n으로 끝나는 데이터만 필터링하여 조회

sql
SELECT * FROM customer WHERE last_name LIKE 's%' AND first_name LIKE '%n';

10. customer 테이블에서 모든 열에 해당하는 데이터를 조회하되, 휴면 사용자(active 컬럼 참고) 이면서, last_name이 m으로 끝나는 데이터만 필터링하여 조회

sql
SELECT * FROM customer WHERE active = "false" OR last_name LIKE 'M%';

11. category 테이블에서 모든 열에 해당하는 데이터를 조회하되, category_id가 4보다 크고, name 열에 해당하는 데이터가 c로 시작하거나, s로 시작하거나, t로 시작하는 데이터로 필터링하여 조회

sql
SELECT * FROM category WHERE category_id > 4 AND name LIKE 'C%' OR `name` LIKE 'S%' OR name LIKE 'T%';

12. address 테이블에서 phone, 구역(district) 컬럼을 조회하되, 구역이 California, England, Taipei, West Java에 해당하는 구역만 필터링하고, district 컬럼을 기준으로 오름차순 정렬하여 조회

sql
SELECT `phone`, `district` FROM address WHERE `district` IN ("California", "England", "Taipei", "West Java") ORDER BY `district`;

13. payment 테이블에서 payment_id, 금액, 지불날짜 열에 해당하는 데이터를 조회하되, 지불날짜가 2005년 8월 23일, 24일, 25일에 해당하는 데이터만 조회(IN, Date() 활용)

sql
SELECT payment_id, amount, payment_date FROM payment WHERE DATE(payment_date) IN ("2005-05-25","2005-05-27","2005-05-29") ORDER BY payment_date;

14. film 테이블에서 모든 열에 해당하는 데이터를 조회하되, rate(등급)가 G, PG-13, NC-17에 해당되는 데이터만 조회

sql
/* IN 연산자 활용 */ SELECT * FROM film WHERE `rating` IN ("G","PG-13","NC-17") ORDER BY `title`; /* NOT IN 연산자 활용 */ SELECT * FROM film WHERE `rating` NOT IN ("PG","R") ORDER BY `title`;

15. payment 테이블에서 모든 열에 해당하는 데이터를 조회하되, payment_date가 2005년 8월 23일에만 해당하는 데이터 조회

sql
/* 날짜만으로 조회 */ SELECT * FROM payment WHERE `payment_date` BETWEEN "2005-05-25" AND "2005-05-26" ORDER BY `payment_date`; /* 날짜 + 시간으로 조회 */ SELECT * FROM payment WHERE `payment_date` BETWEEN "2005-05-25 00:00:00" AND "2005-05-25 23:59:59" ORDER BY `payment_date`;

16. film 테이블에서 제목, 줄거리, 출시연도, 총 대여비용(rental_duration, rental_rate 활용)열에 해당하는 데이터를 조회하되, 러닝타임이 100 ~ 120분 사이에 해당하는 데이터만 조회

sql
SELECT title, description, release_year, (rental_duration * rental_rate) AS "total_rental_cost" FROM film WHERE length BETWEEN 100 AND 120 ORDER BY title;

17. film 테이블에서 제목, 줄거리, 출시연도에 해당하는 데이터를 조회하되, 줄거리가 ‘A Thoughtful’로 시작하는 데이터를 영화 제목을 기준으로 오름차순 정렬하여 조회

sql
SELECT title, description, release_year FROM film WHERE description LIKE "A Thoughtful%" ORDER BY title;

18. film 테이블에서 제목, 줄거리, 대여기간에 해당하는 데이터를 조회하되, 줄거리가 ‘~Boat’로 끝나는 데이터를 영화 제목을 기준으로 내림차순 정렬하여 조회

sql
SELECT title, description, rental_duration FROM film WHERE description LIKE '%Boat' ORDER BY title DESC;

19. film 테이블에서 제목, 러닝타임, 줄거리, 대여 비용에 해당하는 모든 데이터를 조회하되, 줄거리에 ‘database’라는 텍스트가 포함되어 있고, 러닝타임이 180분 보다 긴 데이터를 제목을 기준으로 오름차순 정렬하여 조회

sql
SELECT title, length, description, rental_rate FROM film WHERE description LIKE '%database%' AND length > 180 ORDER BY title;

20. payment 테이블에서 모든 열에 해당하는 데이터를 조회하되, 상위 20개의 행만 조회

sql
SELECT * FROM payment LIMIT 20;

21. payment 테이블에서 지불날짜와 금액에 해당하는 데이터를 조회하되, 금액이 5달러보다 높고, 상위 10개 행으로 제한하되, 20번째 행부터 조회

→ 20번째 행부터 상위 10개 데이터 조회

sql
SELECT payment_id, payment_date, amount FROM payment WHERE amount > 5 LIMIT 10 OFFSET 20;

22. customer 테이블에서 모든 열에 해당하는 데이터를 조회하되, 200번째 행부터 상위 100개 데이터 조회

→ 101 ~ 200번째 행 조회

sql
SELECT customer_id FROM customer LIMIT 100 OFFSET 200;

23. film 테이블에서 제목, 줄거리, 영화 특징(special_features), 러닝타임, 대여 기간에 해당하는 데이터를 조회하되, 영화 특징으로 ‘Behind the Scenes’만 해당되고, 러닝타임은 2시간 미만이고 대여기간은 5일에서 7일 사이에 해당하는 모든 데이터를 조회, 정렬 조건은 러닝타임을 기준으로 내림차순 정렬하여 상위 10개 데이터만 조회

sql
SELECT title, description, special_features, length, rental_duration FROM film WHERE special_features = "Behind the Scenes" AND length < 120 AND rental_duration BETWEEN 5 AND 7 ORDER BY length DESC LIMIT 10;

24. customer와 actor 테이블의 데이터를 활용하여 customer와 actor가 서로 이름이 같은 사람의 데이터를 찾으려고 할 때,

비교 조건 customer의 first_name과 actor의 first_name이 같고, customer의 last_name과 actor의 last_name이 같은 경우

조인 조건 customer, actor 순으로 LEFT JOIN 활용

별칭 customer_first_name customer_last_name actor_first_name actor_last_name

sql
SELECT customer.first_name AS "customer_first_name", customer.last_name AS "customer_last_name", actor.first_name AS "actor_first_name", actor.last_name AS "actor_last_name" FROM customer LEFT JOIN actor ON customer.first_name = actor.first_name AND customer.last_name = actor.last_name;

25. 24번 문제의 예시를 RIGHT JOIN으로 조회

sql
SELECT customer.first_name AS "customer_first_name", customer.last_name AS "customer_last_name", actor.first_name AS "actor_first_name", actor.last_name AS "actor_last_name" FROM customer RIGHT JOIN actor ON customer.first_name = actor.first_name AND customer.last_name = actor.last_name;

26. 24번 문제의 예시를 INNER JOIN으로 조회

sql
SELECT customer.first_name AS "customer_first_name", customer.last_name AS "customer_last_name", actor.first_name AS "actor_first_name", actor.last_name AS "actor_last_name" FROM customer INNER JOIN actor ON customer.first_name = actor.first_name AND customer.last_name = actor.last_name;

27. city 테이블에서 city 이름, country 테이블에서 country 이름에 해당하는 데이터 조회

조인 조건 city의 country_id와 country의 country_id LEFT JOIN 활용

정렬 조건 country 테이블 기준

sql
SELECT city.city AS "city", country.country AS "country" FROM city LEFT JOIN country ON city.country_id = country.country_id ORDER BY country;

28. film 테이블에서 title, description, release_year, language 테이블에서 name열에 해당하는 모든 데이터 조회

조인 조건 film 테이블의 language_id와 language 테이블의 language_id LEFT JOIN 활용

sql
SELECT film.title AS "title", film.description AS "description", film.release_year AS "release year", language.name AS "langauge" FROM film LEFT JOIN language ON film.language_id = language.language_id ORDER BY langauge;

정렬 조건 language 테이블 기준

29. staff 테이블에서 first_name, last_name, address, address2, district, postal_code, city 테이블에서 city 열에 해당하는 모든 데이터 조회,

조인 조건 staff 테이블의 address_id와 address 테이블의 address_id address 테이블의 city_id와 city 테이블의 city_id LEFT JOIN 활용

sql
SELECT staff.first_name AS "first name", staff.last_name AS "last name", address.address AS "primary address", address.address2 AS "secondary address", address.district AS "district", address.postal_code AS "postal code", city.city AS "city" FROM staff LEFT JOIN address ON staff.address_id = address.address_id LEFT JOIN city ON address.city_id = city.city_id;
Last updated on