본문 바로가기
MySQL/실습문제

[EXERCISES] 12. 실습예제(6-1)

by Fletcher 2024. 8. 8.

 

반갑습니다!

 

이번에는

화면기획서가 나온 상태에서 API 서버 개발을 위해

쿼리문을 작성한다는 상황을 가정하고

실습예제 6을 진행해보겠습니다 ^^!

 

실습예제 6은 영화 리뷰 서비스를 개발하는 상황을 전제로 하겠습니다!

 

실습예제에 사용할 샘플 데이터는 다음과 같습니다

하단에 파일 첨부하겠습니다 ^^

 

 

1. 샘플 데이터

user.sql
0.03MB
movie_data.sql
0.23MB
review.sql
0.13MB

 

 

2-1. user 테이블 스키마 구조

이번 예제에 사용할 user 테이블의 스키마 구조입니다 ^^

 

 

2-2. movie 테이블 스키마 구조

이번 예제에 사용할 movie 테이블의 스키마 구조입니다 ^^

 

 

2-3. review 테이블 스키마 구조

이번 예제에 사용할 review 테이블의 스키마 구조입니다 ^^

 

 

2-4. favorite 테이블 스키마 구조

이번 예제에 사용할 favorite 테이블의 스키마 구조입니다 ^^

 

 

 

 

 

 

요구사항 1.

위와 같은 화면이 기획되었다고 할 때,

쿼리문을 작성하는 예제입니다.

 

< 회원가입 화면 >

 

서비스 회원가입에 대하여

email, password, name, gender 정보를 받았을 때

해당 데이터를 테이블에 삽입하면 되겠습니다 ^^

 

 

 

INSERT문을 사용하여 해당 테이블의 필드에 대해

값들을 입력해주시면 되는 가장 간단한 문제입니다 ^^

 

 

 

 

 

 

 

요구사항 2.

위와 같은 화면이 기획되었다고 할 때,

쿼리문을 작성하는 예제입니다.

 

< 메인화면 >

title, review_cnt, rating_avg 정보를 출력합니다.

요청마다 25개의 데이터를 조회합니다

review_cnt는 내림차순 정렬

rating_avg도 내림차순 정렬입니다.

하트는 즐겨찾기 기능입니다.

(해당 영화에 하트를 누르면 내 즐겨찾기에 저장 됩니다)

 

 

 

 

문제 번호상 앞 순서에 배정되었지만

사실상 메인화면 개발은 나중에 하는게 맞죠 ^^

메인화면에는 여러가지 정보들이 한 번에 조회되어야 하는 특성상,

다른 기능들이 개발이 된 다음에 통합해서 데이터를 조회하는 구간이니까요 ^^

 

여기서 그냥 JOIN 연산이 아니라 LEFT JOIN 연산이 사용되어야 하는 이유는,

movie 테이블에 대해서 review 테이블과 favorite 테이블을 합칠 때

해당 영화가 아무 리뷰도 달려있지 않을 수도 있고, 좋아요를 한 개도 받지 못 했을 수도 있습니다

그런데 그냥 JOIN 연산을 수행하면 리뷰가 없거나 좋아요가 없는 영화는

자동으로 제외가 되어 조회 결과가 출력되기 때문입니다 ^^

 

 

 

여기서 좋아요 등록/해제 기능도 추가를 해야죠?

좋아요 기능을 처리할 때 두 가지 방법이 있습니다

 

 

첫 번째 방법

 

좋아요 등록시 favorite 테이블에 레코드를 생성,

좋아요 취소시 favorite 테이블에서 레코드를 삭제하는 방법입니다

 

 

두 번째 방법

 

좋아요 등록시 favorite 테이블에 새로운 레코드를 생성하는건 동일합니다만,

좋아요 취소시 해당 레코드를 삭제하는 것이 아니라 0 ↔ 1의 값을 서로 번갈아 갱신해주면서

토글식으로 처리해주는 방법입니다 ^^

 

때문에 IF절을 이용하여,

heart 컬럼의 기존값이 1이면 0으로,

0이면 1로 바꾸도록 했죠

0 : 좋아요X

1 : 좋아요O

 

 

 

 

API 서버 개발시 특정 API를 호출할 때

코드블록 내에 위와 같은 쿼리문이 설계되어 있기 때문에

데이터베이스와 연결된 상태에서 SQL문이 동작하여서

해당 데이터 처리 작업이 수행되죠 ^^

 

메인화면이 제일 끝판왕인데 문제 배정상 앞 순서에 오게 되었습니다

나머지 문제들은 더 수월하니 금방 설명할 수 있을 것 같습니다 ^^

'MySQL > 실습문제' 카테고리의 다른 글

[EXERCISES] 14. 실습예제(6-3)  (0) 2024.08.10
[EXERCISES] 13. 실습예제(6-2)  (0) 2024.08.08
[EXERCISES] 11. 실습예제(5-2)  (0) 2024.08.08
[EXERCISES] 10. 실습예제(5-1)  (0) 2024.08.08
[EXERCISES] 9. 실습예제(4)  (0) 2024.08.07