* 내용상 용량이 많아 분할
[강의명]
패스트캠퍼스 SQL 100제 + 자격증 완성 온라인 완주반
[수강목록]
생각대로 SQL - 1
[강의내용]
문제1번) dvd 렌탈 업체의 dvd 대여가 있었던 날짜를 확인해주세요.
샘플데이터로 사용할 dvdrental 데이터의 모든 테이블은 위와 같다.
대여정보를 찾기 위해 rental 테이블을 살펴본다.
대여날짜는 rental_date 컬럼으로 나타나고 있다.
대여가 있었던 날짜들만 필요하기 때문에 date함수로 시각까지 나타난 데이터를 날짜까지만 변환해주고, 중복값은 없앨 필요가 있다.
SELECT DISTINCT date(rental_date)
FROM rental;
문제5번) 영화 카테고리 중에서 ,Sci-Fi 카테고리의 카테고리 번호는 몇번인가요?
카테고리 테이블을 살펴본다.
Sci-Fi는 14번으로 나타난다. 이를 조회해본다.
SELECT category_id
FROM category
WHERE name = 'Sci-Fi';
문제6번) film 테이블을 활용하여, rating 등급(?) 에 대해서, 몇개의 등급이 있는지 확인해보세요.
film 테이블을 살펴본다.
많은 컬럼들이 있고 그중 rating 컬럼에 몇가지 등급이 있다.
중복된 등급들을 제거하고 count함수를 써서 갯수를 세어본다.
SELECT count(DISTINCT rating)
FROM film;
5가지 등급이 있음을 알 수 있다.
문제8번) 고객의 id 가 50,100,150 ..등 50번의 배수에 해당하는 고객들에 대해서, 회원 가입 감사 이벤트를 진행하려고합니다. 고객 아이디가 50번 배수인 아이디와, 고객의 이름 (성, 이름)과 이메일에 대해서 확인해주세요.
고객id를 확인하기 위해 customer 테이블을 살펴본다.
id는 총 몇개나 있을까? ORDER BY 를 써서 내림차순으로 정렬해본다.
SELECT customer_id
FROM customer
ORDER BY customer_id DESC;
599개의 customer_id가 있다.
50의 배수를 어떻게 표현할까? 50으로 나눴을때 나머지가 0인 숫자들을 찾는 방법을 사용하자
mod(숫자, 나눌 숫자) 함수를 사용하면 나머지를 구할 수 있다.
또한 이름, 성을 나타내기위해 텍스트를 연결하는 기능(concat)의 ||를 사용한다.
SELECT customer_id, first_name , last_name, last_name ||', '|| first_name AS fullname, email
FROM customer
WHERE MOD(customer_id, 50) = 0;
문제10번) city 테이블의 city 갯수는 몇개인가요?
city 컬럼의 갯수를 세어보자 (혹시 모를 중복값을 대비해 DISTINCT를 걸어준다)
SELECT count(DISTINCT city)
FROM city;
문제11번) 영화배우의 이름 (이름+' '+성) 에 대해서, 대문자로 이름을 보여주세요. 단 고객의 이름이 동일한 사람이 있다면, 중복 제거하고, 알려주세요.
영화배우의 이름을 찾기 위해 actor 테이블을 살펴본다.
텍스트를 대문자로 변환하기 위해 upper함수를 사용한다.
또한 가공된 컬럼은 ALIAS를 붙여 새 이름을 붙여주자 (기존 컬럼과의 혼동 방지)
SELECT DISTINCT upper(first_name ||' '|| last_name) AS fullname
FROM actor;
문제17번) film 테이블을 활용하여, rental_duration 이 7일 이상 대여가 가능한 film 에 대해 film_id, title, description 컬럼을 확인해보세요.
WHERE절을 통해 rental_duration >= 7 조건을 충족시키는 컬럼들을 조회한다.
SELECT rental_duration, film_id, title, description
FROM film
WHERE rental_duration >= 7;