Netflix 특정 화면 한방쿼리 작성

Ogu·2022년 5월 2일
0
post-thumbnail

📌 일대다 관계의 이해

ex) 마켓 데이터베이스의 회원테이블 : 구매테이블 = 1 : N
회원 테이블의 아이디 : 한명만 있음 -> PK
구매 테이블의 아이디 : 회원 1명이 구매를 여러번 함 -> FK

📌 내부 조인의 기본 (2개 조인)

SELECT <열 목록>
FROM <첫 번째 테이블>
	INNER JOIN <두 번째 테이블>
    ON <조인될 조건>
[WHERE 검색 조건]
# INNER JOIN을 그냥 JOIN이라고 써도 바로 INNER JOIN이라고 인식함

🌵 특정 화면별 한방쿼리 설계 및 결과

📌 내가 찜한 콘텐츠

설계

SQL code

#내가 찜한 콘텐츠
SELECT title           AS "제목",
       poster_url      AS "포스터 이미지"
FROM movie
    INNER JOIN mylist
    ON movie.movie_idx = mylist.movie_idx
WHERE profile_idx = 1;

결과

📌 감독 검색

설계

SQL code

# 감독 검색 - 하라 케이이치
SELECT title            AS "제목",
       poster_url       AS "포스터 이미지"
FROM movie
    INNER JOIN director_participate
    ON movie.movie_idx = director_participate.movie_idx
WHERE director_idx = (SELECT director_idx FROM director WHERE name = "하라 케이이치");

🍀 1

🍀 2

🍀 3

🍀 4

🍀 5

🍀 6

🍀 7

🍀 8

🍀 9

📌 배우 검색

설계

SQL code

# 배우 검색 - 앤 해서웨이
SELECT title            AS "제목",
       poster_url       AS "포스터 이미지"
FROM movie
    INNER JOIN actor_participate
    ON movie.movie_idx = actor_participate.movie_idx
WHERE actor_idx = (SELECT actor_idx FROM actor WHERE name = "앤 해서웨이");

🍀 1

🍀 2

🍀 3

🍀 4

🍀 5

🍀 6

🍀 7

🍀 8

🍀 9

🍀 10

🍀 11

🍀 12

📌 영화 선택

설계

📌 크리에이터 선택

설계

SQL code

# 크리에이터 검색 - 김은숙
SELECT title            AS "시리즈 제목",
       poster_url       AS "포스터 이미지"
FROM series
    INNER JOIN creater_participate
    ON series.series_idx = creater_participate.series_idx
WHERE creater_id = (SELECT creater_id FROM creater WHERE name = "김은숙");

📌 각본 선택

설계

SQL code

# 각본 검색 - 최동훈
SELECT title            AS "영화 제목",
       poster_url       AS "포스터 이미지"
FROM movie
    INNER JOIN writer_participate
    ON movie.movie_idx = writer_participate.movie_idx
WHERE writer_idx = (SELECT writer_idx FROM writer WHERE name = "최동훈");

📌 알림 목록

설계

SQL code

# 알림 - profile_idx=1
SELECT title            AS "알림 제목",
       content          AS "알림 내용",
       alarm_img_url    AS "알람 이미지",
       case
            when timestampdiff(hour, alarm.createdAt, CURRENT_TIMESTAMP) < 24
                then concat(timestampdiff(hour, alarm.createdAt, CURRENT_TIMESTAMP), '시간 전')
                else date_format(alarm.createdAt, '%m월 %d일')
        end AS "알람 날짜"
FROM alarm
WHERE alarm.status = 1
ORDER BY alarm.createdAt DESC;

🌵 참고 URL

profile
Hello! I am Ogu, a developer who loves learning and sharing! 🐤🐤 <br> こんにちは!学ぶことと共有することが好きな開発者のOguです!🐤

0개의 댓글