import pymysql
import pandas as pd
host_name = "funcoding-db.ca1fydhpobsc.ap-northeast-2.rds.amazonaws.com"
username = "davelee"
password = "korea234"
database_name = "sakila" # 데이터베이스 이름을 sakila 로 바꿔줘야 합니다.
db = pymysql.connect(
host=host_name, # DATABASE_HOST
port=3306,
user=username, # DATABASE_USERNAME
passwd=password, # DATABASE_PASSWORD
db=database_name, # DATABASE_NAME
charset='utf8'
)
SQL = "SELECT * FROM film_category LIMIT 1"
df = pd.read_sql(SQL, db)
df
SQL = "SELECT * FROM category LIMIT 1"
df = pd.read_sql(SQL, db)
df
# JOIN 을 사용한 쿼리
SQL_QUERY = """
SELECT film_id
FROM film_category
JOIN category ON category.category_id = film_category.category_id
WHERE category.name = 'Comedy'
LIMIT 1
"""
pd.read_sql(SQL_QUERY, db)
# SUB QUERY 를 사용한 쿼리로 바꿔보자1 (category_id 는 어디 테이블의 카테고리 아이디일까?)
# 컬럼값 IN 서브쿼리출력값 -> 컬럼값과 서브쿼리값이 같을 때
SQL_QUERY = """
SELECT film_id
FROM film_category
WHERE film_category.category_id IN
(SELECT category.category_id FROM category WHERE category.name = 'Comedy')
LIMIT 1
"""
pd.read_sql(SQL_QUERY, db)
# SUB QUERY 를 사용한 쿼리로 바꿔보자2 (category_id 는 어디 테이블의 카테고리 아이디일까?)
# 컬럼값 = 서브쿼리출력값 -> 컬럼값과 서브쿼리값이 같을 때 (비교 연산자 가능)
SQL_QUERY = """
SELECT film_id
FROM film_category
WHERE film_category.category_id =
(SELECT category.category_id FROM category WHERE category.name = 'Comedy')
LIMIT 1
"""
pd.read_sql(SQL_QUERY, db)
# 컬럼값 > 서브쿼리출력값 -> 컬럼값과 서브쿼리값이 같을 때 (비교 연산자 가능)
SQL_QUERY = """
SELECT * FROM category
"""
pd.read_sql(SQL_QUERY, db)
SQL_QUERY = """
SELECT MAX(film_id) FROM film_category
WHERE film_category.category_id IN
(SELECT MAX(category.category_id) FROM category)
LIMIT 1
"""
pd.read_sql(SQL_QUERY, db)
SQL_QUERY = """
SELECT * FROM film_category
WHERE film_category.category_id IN
(SELECT category.category_id FROM category WHERE category.name = 'Comedy')
LIMIT 1
"""
pd.read_sql(SQL_QUERY, db)
SQL_QUERY = """
SELECT * FROM category
WHERE category_id IN
(SELECT MAX(category.category_id) FROM category)
LIMIT 1
"""
pd.read_sql(SQL_QUERY, db)
### 카테고리 이름이 Comedy 인 category_id 보다 더 높은 category_id를 가진 영화의 수를 category_id 와 함께 그룹별로 출력하기 (서브쿼리 활용)
# 컬럼값 > 서브쿼리출력값 -> 컬럼값과 서브쿼리값이 같을 때 (비교 연산자 가능)
SQL_QUERY = """
SELECT category_id, COUNT(*) AS film_count FROM film_category
WHERE film_category.category_id >
(SELECT category.category_id FROM category WHERE category.name = 'Comedy')
GROUP BY film_category.category_id
"""
pd.read_sql(SQL_QUERY, db)