지식이 늘었다/웹개발

DB (5) MySQL 튜토리얼 (3) - 뷰와 조인

PurpleGuy101 2024. 12. 6. 11:43

데이터베이스는 일반적으로 정규화 과정을 거쳐 여러 테이블로 나뉘어 구성된다.

하지만 실제로 사용자들이 필요로 하는 데이터는 전체가 아닌,

특정 조건에 맞는 일부 데이터만 필요한 경우가 대부분이다.

 

또 DB의 모든 자료에 사용자가 접근해버리면.. 그것도 문제가 된다.

만약 테이블을 직접 수정할수 있는 악의적인 사용자가  DROP TABLE을 해버린다면.

회사는 비상이 걸리게 될 것이고 서버관리자는 시말서를 작성해야할 것이다.

 

이 문제를 해결하기 위해

여러 테이블의 데이터 중 특정 조건에 맞는 데이터만을 추출하여,

사용자가 필요한 형태로 보여주는 가상의 테이블인 뷰(View)에 대해서 알아보자.

 

앞서 배운 SELECT도 이러한 뷰의 기본적인 기능을 수행하지만,

더 유용한 뷰를 만들어주기 위해서 우리는 SQL의 Join문을 알아놓을 필요가 있다.

 

---

 

앞선 과정에서 만든 데이터들 상에서

조인문을 이용해서 뷰를 만들어주자.

SELECT * FROM restaurants INNER JOIN addresses ON restaurants.address_id = addresses.id

 

위와 같이 restaurants 테이블의 id, name, address_id, type_id 뿐만아니라

address_id가 addresses.id와 일치하는 레코드들에 대해서

addresses 테이블의 id, street, street_number, city, postal가 추가적으로 조인된것을 볼 수 있다.

 

 

---

 

조인을 통해서 아래와 같이 여러 테이블에서 레코드을 참조하고

SELECT의 파라미터에 아래와 같이 참조한 속성들을 나열하고 얼라이어싱(Aliasing, AS)하는 방식으로

만족스러운 뷰를 생성할 수 있는 것을 확인할 수 있다.

SELECT restaurants.id, restaurants.name, addresses.*, types.name AS type_name FROM restaurants 
INNER JOIN addresses ON restaurants.address_id = addresses.id
INNER JOIN types ON restaurants.type_id = types.id

 

 

 

SELECT restaurants.id, restaurants.name, addresses.*, types.name AS type_name FROM restaurants 
INNER JOIN addresses ON restaurants.address_id = addresses.id
INNER JOIN types ON restaurants.type_id = types.id
WHERE addresses.city = 'Munich'

 

---

최종적으로

아래와 같이 깔끔하게 뷰를 만들어주는

SQL 쿼리문을 작성해주어 보았다. 

SELECT reviews.id, reviews.reviewer_name, reviews.rating, reviews.date, restaurants.name AS restaurant_name, addresses.street, addresses.street_number, addresses.city, addresses.postal_code, types.name AS restaurant_type FROM reviews
INNER JOIN restaurants ON reviews.restaurant_id = restaurants.id
INNER JOIN addresses ON restaurants.address_id = addresses.id
INNER JOIN types ON restaurants.type_id = types.id
WHERE rating >3

 

 

 

MySQL 튜토리얼은 여기까지고.

다음 시간부터는 MySQL이 NodeJS서버와 상호작용하는 과정을 배우게 될 것이다.

 

더 배우고 싶은 것은

자세한것은 MySQL documentation을 참조하거나..

Max가 강의한 SQL 심화 강의를 참조하는게 좋을 듯 하다.