[MySQL] 강의 정리 6 - 더 배워보기 (1)

xyzw·2023년 3월 25일
0

database

목록 보기
7/10

[Inflearn] DATABASE 1&2 - MySQL (Egoing Lee)
섹션 5를 듣고 정리하였다.

관계형 데이터베이스의 필요성

장점

중복 문제 해결

  • 기존 데이터베이스
    1, 2, 5행의 author, profile 열이 중복된다.

  • 관계형 데이터베이스
    이전 topic 테이블에 존재하던 중복된 데이터들은 사라지고, 각 데이터들에 대한 author 테이블의 식별자인 id 값으로 대체되었다.

유지보수 용이

author 중 egoing을 e+going으로 바꿔야 할 때

  • 기존 데이터베이스
    모든 값을 일일이 수정해야 한다.
  • 관계형 데이터베이스
    author 테이블에서 1행의 name 열을 e+going으로 수정해주면 된다.

유사한 값 구별 용이

  • 기존 데이터베이스
    1, 2, 5행의 egoing이 이름은 동일하나, 실제로 같은 사람인지 알 수 없다.
  • 관계형 데이터베이스
    id 값으로 그 여부를 확인할 수 있다.

단점

번거로움

기존 데이터베이스는 하나의 테이블만으로도 모든 정보를 파악할 수 있지만,
관계형 데이터베이스는 하나의 테이블에서 다른 테이블을 참조하게 되므로 별도의 표를 추가적으로 열어서 정보를 확인해야 한다.


테이블 분리하기

테이블 이름 변경

RENAME TABLE topic TO topic_backup;
기존 테이블의 이름을 topic에서 topic_backup으로 변경한다.


author 테이블과 topic 테이블 생성


author 테이블과 topic 테이블에 값 추가하기

INSERT INTO `author` VALUES (1,'egoing','developer');
INSERT INTO `author` VALUES (2,'duru','database administrator');
INSERT INTO `author` VALUES (3,'taeho','data scientist, developer');

INSERT INTO `topic` VALUES (1,'MySQL','MySQL is...','2018-01-01 12:10:11',1);
INSERT INTO `topic` VALUES (2,'Oracle','Oracle is ...','2018-01-03 13:01:10',1);
INSERT INTO `topic` VALUES (3,'SQL Server','SQL Server is ...','2018-01-20 11:01:10',2);
INSERT INTO `topic` VALUES (4,'PostgreSQL','PostgreSQL is ...','2018-01-23 01:03:03',3);
INSERT INTO `topic` VALUES (5,'MongoDB','MongoDB is ...','2018-01-30 12:31:03',1);

위 코드를 모두 입력한 결과


테이블 합치기 - JOIN

JOIN

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

topic 테이블의 author_id의 값과 author 테이블의 id의 값이 같아지도록
topic 테이블에 author 테이블을 합성한다.

author_idid열 제외하고 출력하기

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; 를 입력했을 경우
    : id는 topic 테이블에도 존재하고, author 테이블에도 존재하므로 오류 발생

topic 테이블의 id열의 이름을 topic_id로 바꾸기

SELECT topic.id AS topic_id ...

0개의 댓글