2006년 1월 1일 이후에 기록이 생성(create_date)된
고객 중에, 이름이 Steven이거나 Young인 사람이 아닌 고객 정보 조회
SELECT *
FROM customer
WHERE create_date >= '2006-01-02'
AND NOT (first_name = 'Steven' OR first_name = 'Young');
2005년에 렌탈한 고객의 이름, 성 조회 (중복제거)
SELECT DISTINCT C.first_name, C.last_name
FROM rental R
INNER JOIN customer C
ON C.customer_id = R.customer_id
WHERE R.rental_date BETWEEN '2005-01-01 00:00:00'
AND '2005-12-31 23:59:59';
-- 비교문으로 해결하는게 미세하게나마 속도가 좀 더 빠르다.
SELECT DISTINCT C.first_name, C.last_name
FROM rental R
INNER JOIN customer C
ON C.customer_id = R.customer_id
WHERE R.rental_date >= '2005-01-01 00:00:00'
AND R.rental_date < '2006-01-01';
10달러에서 11.99달러 사이의 모든 결제 정보를 조회.
표시 컬럼: 고객번호, 결제날짜, 금액
SELECT customer_id, payment_date, amount
FROM payment
WHERE amount BETWEEN 10.0 AND 11.99;
SELECT customer_id, payment_date, amount
FROM payment
WHERE amount BETWEEN 10.0 AND 11.99;
/* FA와 FR 사이에 성이 속하는 고객을 조회
표시컬럼: 성, 이름
*/
SELECT last_name, first_name
FROM customer
WHERE last_name >= 'FA' AND last_name < 'FS'
ORDER BY last_name DESC;
SELECT last_name, first_name
FROM customer
WHERE last_name BETWEEN 'FA' AND 'FS'
ORDER BY last_name DESC;
/* 영화 제목에 'PET'이 포함된 영화의 등급과 같은 영화들의
제목과 등급을 표시해 주세요.
372 rows
*/
-- (1)PET 단어가 포함된 영화의 등급을 조회
SELECT rating FROM film WHERE title LIKE '%PET%';
-- (2)'G', 'PG' rating의 영화를 조회
SELECT title, rating FROM film
WHERE rating IN ('G', 'PG');
-- (1), (2) 조합
SELECT title, rating FROM film
WHERE rating IN (SELECT rating FROM film
WHERE title LIKE '%PET%');
/* 성이 Q로 시작하는 고객 조회 */
SELECT LEFT(last_name, 1), last_name FROM customer;
SELECT * FROM customer
WHERE left(last_name, 1) = 'Q';
SELECT * FROM customer
WHERE last_name > 'Q'
AND last_name < 'R';
-- 대여를 반납하지 않은 정보를 조회, 표시컬럼: 대여ID, 고객ID
SELECT * FROM rental
WHERE return_date IS NOT NULL;
-- !=, <>
/* 실습 4-1, 고객번호가 5가 아니면서
(결제날짜가 '2005-08-23'이거나 결제금액이 8달러 이상)인
payment_id를 조회하시오.
*/
SELECT payment_id
FROM payment
WHERE customer_id != 5
AND (
amount >= 8
OR
(payment_date >= '2005-08-23' AND payment_date < '2005-08-24')
);
-- 857 rows
SELECT COUNT(1) FROM payment WHERE amount >= 8;
-- 598 rows
SELECT COUNT(1) FROM payment WHERE DATE(payment_date) = '2005-08-23';
SELECT payment_id
FROM payment
WHERE customer_id <> 5
AND (amount >= 8 OR DATE(payment_date) = '2005-08-23');
/* payment 테이블에서 금액이 1.98, 7.98 또는 9.98인
모든 행을 조회
*/
SELECT * FROM payment
WHERE amount IN (1.98, 7.98, 9.98);
/* 성의 두 번째 위치에 A가 있고 A 다음에 W가 있는 모든
고객을 조회
*/
SELECT * FROM customer
WHERE last_name LIKE '_AW%';
/* 모든 고객의 성, 이름, 주소 조회 */
SELECT C.last_name, C.first_name, A.address
FROM customer C
INNER JOIN address A
ON A.address_id = C.address_id;
SELECT count(DISTINCT address_id) FROM customer;
SELECT count(address_id) FROM customer;
/* 모든 고객의 이름, 성, 살고 있는 도시 */
SELECT C.first_name, C.last_name, CT.city
FROM customer C
INNER JOIN address A
ON A.address_id = C.address_id
INNER JOIN city CT
ON CT.city_id = A.city_id;
/* 캘리포니아에 거주하는 모든 고객의 이름, 성, 주소 및 도시 조회
district = 'California'
*/
SELECT C.last_name, C.first_name, A.address, CT.city
FROM customer C
INNER JOIN address A
ON A.address_id = C.address_id
AND A.district = 'California'
INNER JOIN city CT
ON CT.city_id = A.city_id;
/* Cate McQueen 또는 Cuba Birch 가 출연한 모든 영화를 조회 */
-- actor_id를 구한다.
-- film_id를 구한다.
SELECT F.title
FROM film F
INNER JOIN film_actor FA
ON FA.film_id = F.film_id
INNER JOIN actor A
ON A.actor_id = FA.actor_id
WHERE (A.first_name = 'Cate' AND A.last_name = 'McQueen')
OR (A.first_name = 'Cuba' AND A.last_name = 'Birch');
SELECT F.title
FROM film F
INNER JOIN film_actor FA
ON FA.film_id = F.film_id
INNER JOIN actor A
ON A.actor_id = FA.actor_id
WHERE (A.first_name, A.last_name)
IN ( ('Cate', 'McQueen'), ('Cuba', 'Birch') );
/* Cate McQueen과 Cuba Birch 가 함께 출연한 모든 영화 제목을 조회
BLOOD ARGONAUTS
TOWERS HURRICANE
*/
-- 책(book)
SELECT F.title
FROM film F
INNER JOIN film_actor FA1
ON FA1.film_id = F.film_id
INNER JOIN actor A1
ON A1.actor_id = FA1.actor_id
INNER JOIN film_actor FA2
ON FA2.film_id = F.film_id
INNER JOIN actor A2
ON A2.actor_id = FA2.actor_id
WHERE (A1.first_name = 'Cate' AND A1.last_name = 'McQueen')
AND (A2.first_name = 'Cuba' AND A2.last_name = 'Birch');
-- 책(book) 개량
SELECT F.title
FROM film F
INNER JOIN film_actor FA1
ON FA1.film_id = F.film_id
INNER JOIN actor A1
ON A1.actor_id = FA1.actor_id
AND (A1.first_name = 'Cate' AND A1.last_name = 'McQueen')
INNER JOIN film_actor FA2
ON FA2.film_id = F.film_id
INNER JOIN actor A2
ON A2.actor_id = FA2.actor_id
AND (A2.first_name = 'Cuba' AND A2.last_name = 'Birch');
-- 강사
SELECT title
FROM film F
INNER JOIN (
-- 2명의 배우가 출연한 모든 영화 조회 후
-- film_id로 그룹을 만들고 count가 2인 film_id를 구한다.
-- count가 2인 것은 2명의 배우가 모두 출연한 영화라는 의미
SELECT FA.film_id, COUNT(1) AS cnt
FROM film_actor FA
INNER JOIN actor A
ON A.actor_id = FA.actor_id
WHERE (A.first_name = 'Cate' AND A.last_name = 'McQueen')
OR (A.first_name = 'Cuba' AND A.last_name = 'Birch')
GROUP BY FA.film_id
HAVING cnt = 2
) R
ON R.film_id = F.film_id;
SELECT * FROM view_jimin
WHERE film_id = 82;
-- 류지민
SELECT f.film_id, f.title
FROM film f
JOIN film_actor fa
ON f.film_id = fa.film_id
JOIN actor a
ON fa.actor_id = a.actor_id
WHERE (first_name = 'CUBA' AND last_name = 'BIRCH')
OR (first_name = 'CATE' AND last_name = 'MCQUEEN')
GROUP BY f.film_id, f.title
HAVING COUNT(a.actor_id) = 2;
-- 민태호
SELECT f.title
FROM film f, film_actor fa, actor a
WHERE f.film_id = fa.film_id
AND fa.actor_id = a.actor_id
AND a.first_name = 'Cate' AND a.last_name = 'Mcqueen'
AND f.title in (SELECT f.title
FROM film f, film_actor fa, actor a
WHERE f.film_id = fa.film_id
AND fa.actor_id = a.actor_id
AND a.first_name = 'Cuba' AND a.last_name = 'birch');
COMMIT;
SELECT * from view_heejin;
-- 이희진
SELECT fm.film_id, fm.title
FROM film_actor f
JOIN actor a
ON f.actor_id = a.actor_id
JOIN film fm
ON fm.film_id = f.film_id
WHERE a.first_name = 'Cuba'
AND a.last_name = 'Birch'
INTERSECT
SELECT fm.film_id, fm.title
FROM film_actor f
JOIN actor a
ON f.actor_id = a.actor_id
JOIN film fm
ON fm.film_id = f.film_id
WHERE a.first_name = 'Cate'
AND a.last_name = 'McQueen';
-- 상관 서브쿼리
-- 고객의 영화 대여 횟수가 정확히 20번 대여를 한 고객 조회
-- 메인쿼리, 서브쿼리
-- 1.메인쿼리, 결과물을 서브쿼리로 전달
-- 2.서브쿼리, 결과물을 메인쿼리로 전달
-- 3.메인쿼리 결과 도출
SELECT C.first_name, C.last_name
FROM customer C
WHERE 20 = (SELECT COUNT(1) FROM rental R
WHERE R.customer_id = C.customer_id);
-- 1.
SELECT C.first_name, C.last_name, C.customer_id
FROM customer C;
-- 2.
SELECT COUNT(1) cnt, R.customer_id FROM rental R
WHERE R.customer_id
GROUP BY R.customer_id
HAVING cnt = 20 ;
-- 3. 1번, 2번 결과물을 조합