JOIN 활용 실제 예제3
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 강의 사이트와 유투브 채널을
오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
● 잔재미코딩 유투브 오픈
[구독해보기]
일단 각 테이블 현황을 파악하자. - rental 테이블 (렌탈 기록은 다 모아놓았군)¶
In [131]:
rental_df = pd.read_sql("SELECT * FROM rental;", db)
In [132]:
rental_df.head()
Out[132]:
일단 각 테이블 현황을 파악하자. - inventory 테이블 (각 영화별 실제 물건 현황은 다 모아놓았군)¶
In [133]:
inventory_df = pd.read_sql("SELECT * FROM inventory;", db)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [134]:
inventory_df.head()
Out[134]:
- 각 영화별 물건도 알 수는 있겠군
In [135]:
inventory_df_groupby = pd.read_sql("SELECT film_id, COUNT(*) FROM inventory GROUP BY film_id", db)
In [136]:
inventory_df_groupby.head()
Out[136]:
일단 각 테이블 현황을 파악하자. - film 테이블 (각 영화별 상세 정보를 다 모아놓았군)¶
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
In [137]:
film_df = pd.read_sql("SELECT * FROM film;", db)
In [138]:
film_df.head()
Out[138]:
일단 각 테이블 현황을 파악하자. - film_category 테이블 (각 영화별 카테고리 ID는 알 수 있는데, 카테고리 이름은 안들어 있음)¶
In [139]:
film_category_df = pd.read_sql("SELECT * FROM film_category;", db)
In [140]:
film_category_df.head()
Out[140]:
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
일단 각 테이블 현황을 파악하자. - category 테이블 (카테고리 ID별 이름은 이 테이블에서야 알 수 있군)¶
In [141]:
category_df = pd.read_sql("SELECT * FROM category;", db)
In [142]:
category_df.head()
Out[142]:
핵심 정보는 결국 렌탈 정보인 rental 테이블일 수 밖에 없음¶
- rental 테이블에 inventory_id 를 가지고 카테고리를 알 수 있는 방법은 무엇일까?
- rental 테이블에는 물품 정보(inventory_id)밖에 없음
- inventory 테이블은 inventory_id, film_id 가 있고,
- film_category 테이블은 film_id, category_id 가 있고
- category 테이블은 category_id, name(카테고리 이름) 가 있음
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
- 생각해본 전략: rental 테이블과 category 테이블을 엮은 후, category.name 카테고리가 "Comedy", "Sports", "Family" 인것으로 WHERE를 하고, 이를 다시 GROUP BY category.name 로 하면!
- 코드로 바꾸려면 작은 단위로 단계별로 만들어가자
- rental 테이블에는 물품 정보(inventory_id)밖에 없음
- inventory 테이블은 inventory_id, film_id 가 있고, (JOIN)
- film_category 테이블은 film_id, category_id 가 있고 (JOIN)
- category 테이블은 category_id, name(카테고리 이름) 가 있음 (JOIN)
- 두 테이블 연결
- rental 테이블에는 물품 정보(inventory_id)밖에 없음
- inventory 테이블은 inventory_id, film_id 가 있고,
In [143]:
SQL_QUERY = """
SELECT inventory.film_id, rental.rental_id
FROM rental
JOIN inventory
ON inventory.inventory_id = rental.inventory_id
"""
- JOIN 이 INNER JOIN 이니 JOIN 으로 쓰기로 함
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [144]:
category_rental_df = pd.read_sql(SQL_QUERY, db)
In [145]:
category_rental_df.head()
Out[145]:
- 네 테이블 연결
- rental 테이블에는 물품 정보(inventory_id)밖에 없음
- inventory 테이블은 inventory_id, film_id 가 있고,
- film_category 테이블은 film_id, category_id 가 있고
- category 테이블은 category_id, name(카테고리 이름) 가 있음
In [162]:
SQL_QUERY = """
SELECT category.name, inventory.film_id, rental.rental_id
FROM rental
JOIN inventory ON inventory.inventory_id = rental.inventory_id
JOIN film_category ON film_category.film_id = inventory.film_id
JOIN category ON category.category_id = film_category.category_id
WHERE category.name = 'Comedy'
"""
In [163]:
category_rental_df = pd.read_sql(SQL_QUERY, db)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
In [164]:
category_rental_df.head()
Out[164]:
- 네 테이블 연결하고, 카테고리가 "Comedy", "Sports", "Family" 인것으로 WHERE를 하기
- rental 테이블에는 물품 정보(inventory_id)밖에 없음
- inventory 테이블은 inventory_id, film_id 가 있고,
- film_category 테이블은 film_id, category_id 가 있고
- category 테이블은 category_id, name(카테고리 이름) 가 있음
직접 작성해보기¶
In [219]:
SQL_QUERY = """
"""
In [220]:
category_rental_df = pd.read_sql(SQL_QUERY, db)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [221]:
category_rental_df.head()
Out[221]:
- rental 테이블과 category 테이블을 엮은 후, category.name 카테고리가 "Comedy", "Sports", "Family" 인것으로 WHERE를 하고, 이를 다시 GROUP BY category.name 로 한 후에, 로우수를 COUNT(*) 로 하면
In [165]:
SQL_QUERY = """
SELECT COUNT(*)
FROM rental
JOIN inventory ON inventory.inventory_id = rental.inventory_id
JOIN film_category ON film_category.film_id = inventory.film_id
JOIN category ON category.category_id = film_category.category_id
WHERE category.name = 'Comedy'
"""
In [166]:
category_rental_df = pd.read_sql(SQL_QUERY, db)
In [167]:
category_rental_df.head()
Out[167]: