@@@ SQL/생활코딩 - Database

9. 관계형 데이터베이스의 꽃 JOIN (17)

HTG 2021. 8. 16. 13:10
728x90

관계형 데이터베이스의 꽃 JOIN
각각 독립적인(분리된) 테이블을 읽을 때, 그 테이블이 하나의 테이블로 저장되어 있었던 것과 같은 효과.

테이블과 테이블을 JOIN 하기 위해서는, 데이터베이스가 어떠한 목적을 가지고 있는지를 말할 수 있어야 한다.

 

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

 

topic 테이블의 author_id 값과, author테이블의 id 값이 같다

 

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

 

행을 보기 편하게 바꾸고 싶을 때,,

 

 

//오류
SELECT id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
//정상 출력
SELECT topic.id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;

 

열에 id란 값이 2개 중복되므로 id->topic.id 로 열 구분을 해줘야함

정확히 어디의 id 인지 구분을 해주어야함.

 

 

//topic.id AS topic_id, AS를 이용해 이름 변경하여 출력 가능
SELECT topic.id AS topic_id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;

AS 사용 : topic.id AS topic_id

 

정보 기술에서 중복을 제외 한다는 것은 매우 중요! 

테이블을 분리한다는 것은 관계성을 높일 수 있다.
테이블이 특정 식별자를 가지고만 있다면, JOIN을 통해 얼마든지 관계를 맺을 수 있다.

 

 

create table comment (
id int(11) not null auto_increment,
description varchar(130) null,
author_id int(11) null,
primary key (id)
);

insert into comment (id, description, author_id)
VALUES (1, 'mysql is awesome', 1);

insert into comment (id, description, author_id)
VALUES (2, 'postgres is awesome', 1);

insert into comment (id, description, author_id)
VALUES (3, 'I wanna be skilled-full back end developer', 2);

insert into comment (id, description, author_id)
VALUES (4, 'I wanna study more', 1);

select comment.id as comment_id, description, name, profile from comment left join author on comment.author_id = author.id;

COMMENT 테이블 생성

 

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

UPDATE author SET profile='database administrator' WHERE id = 2;

테이블의 분리를 통해 여러번 변경할 필요 없이 하나를 바꾸면 전체가 바뀐다


### JOIN은 관계형 데이터베이스를 관계형 데이터베이스 답게 만드는 명령어 ###