이전 글에서 데이터 베이스는 관계형과 그렇지 않은 것으로 나누어진다고 했는데, 그렇다면 이 관계형 데이터베이스는 무엇이고 왜 좋다고 하는지를 간단히 알아보자.
아래는 이전 글까지 다뤄왔던 예시를 표로 만든것이다.
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)
생활코딩 이고잉님 자료에서 손쉽게 얻을 수 있었다.
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로 표시하도록 설정해주면
우리가 의도한대로 잘 나오는것을 확인할 수 있다.
'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 |