05_MySQL : 관계형 데이터베이스 ,  JOIN
BackEnd/DB

05_MySQL : 관계형 데이터베이스 , JOIN

728x90

이전 글에서 데이터 베이스는 관계형과 그렇지 않은 것으로 나누어진다고 했는데, 그렇다면 이 관계형 데이터베이스는 무엇이고 왜 좋다고 하는지를 간단히 알아보자.

 

아래는 이전 글까지 다뤄왔던 예시를 표로 만든것이다.

 

id title description author profile      
1 첫번째 첫번째 내용 mingyu developer      
2 두번째 두번째 내용 gyumin administrator    
3 세번째 세번째 내용 mingyu developer      
4 네번재 네번재 내용 mingyu developer      
5 다섯번째 다섯번째 내용 gyumin developer      
               
               
               
author       topic      
id name profile   id title description author_id
1 mingyu developer   1 첫번째 첫번째 내용 1
2 gyumin administrator   2 두번째 두번째 내용 2
3 gyumin developer   3 세번째 세번째 내용 1
        4 네번재 네번재 내용 1
        5 다섯번째 다섯번째 내용 3

 

 

기존 표에서, author부분은 중복되는 부분이 많은것을 알 수 있다. 이런경우 같은내용을 중복하기에 해당내용을 일괄수정할때도 쉽지 않고, 만약 동명이인이 있어도 가려내는게 불가능하다.

 

만약 위 표의 아랫부분처럼 author와 topic을 분리한다면 이를 해결할 수 있다. author_id를 따로 주고 author에 관련된 표를 가진다면 위에서 말한 단점들을 보완할 수 있다.

 

물론 이런경우 topic과 author 두개의 표를 번갈아봐야한다는 단점이 있는데, 이는 SQL사용으로 극복이 가능하다!

 

 

 

 

예제에 앞서서 아래 TABLE 두개를 만들어 보자.

(https://opentutorials.org/course/3161/19521)

생활코딩 이고잉님 자료에서 손쉽게 얻을 수 있었다.

 

 

author

 

topic

 

 

 

 

 

 

JOIN

 

JOIN 이 바로 위에서 설명한 단점을 극복하는 방법이다.

 

 

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;

 

두개의 표가 우리가 원한대로 id를 기준으로 합쳐졌다.

 

 

만약 중간에 id부분이 보기싫어서 없애기 위해

 

SELECT id,title,description,created,name,profile FROM topic LEFT JOIN author ON topic.author_id = author.id;

다음처럼 하면 

 

ERROR 1052 (23000): Column 'id' in field list is ambiguous

 

위와같은 에러가 나올것이다. id가 어디의 것인지 알 수 없기 때문

 

SELECT topic.id AS topic_id ,title,description,created,name,profile FROM topic LEFT JOIN author ON topic.author_id = author.id;

따라서 id가 topic의 것임을 명시해주고 이를 topic_id로 표시하도록 설정해주면

 

 

우리가 의도한대로 잘 나오는것을 확인할 수 있다.

 

 

728x90

'BackEnd > DB' 카테고리의 다른 글

MySQL password 설정 (5.7.6 버전 이상)  (0) 2022.09.14
06_MySQL : node.js 와의 연결  (0) 2022.09.13
04_MySQL : 테이블, CURD  (0) 2022.09.13
03_MySQL : 구조 및 생성  (0) 2022.09.13
02_MySQL 설치  (0) 2022.09.13