본문 바로가기
코딩 어쩌구/Data

[생활코딩] MySQL (3)

by annmunju 2021. 1. 20.

opentutorials.org/course/3161/19544

 

관계형 데이터베이스의 필요성 - 생활코딩

관계형 데이터베이스의 필요성 2018-02-12 01:26:57

opentutorials.org

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

 - 데이터가 중복되는 경우가 발생하면.. > 용량 커지면 기술적, 경제적 손해, 수정도 어려워지고 찾기도 어려워짐.

 - 장) 중복되는 부분을 나눠서 따로 저장해 경제적임.

   단) 직관적으로 볼 수 있는 표를 나눴기 때문에 보기 불편.

 

15. 테이블 분리하기

 1) 전에 만든 topic 테이블 이름 바꾸기

mysql> RENAME TABLE topic TO topic_backup;
Query OK, 0 rows affected (0.03 sec)

mysql> SELECT * FROM topic_backup;
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title      | description       | created             | author | profile                   |
+----+------------+-------------------+---------------------+--------+---------------------------+
|  2 | MySQL      | MySQL is ...      | 2021-01-19 14:11:22 | egoing | developer                 |
|  3 | Oracle     | Oracle is ...     | 2021-01-19 14:12:57 | egoing | developer                 |
|  4 | SQL Server | SQL Server is ... | 2021-01-19 14:14:32 | duru   | data administrator        |
|  5 | PostgreSQL | PostgreSQL is ... | 2021-01-19 14:15:19 | taeho  | data scientist, developer |
|  6 | MongoDB    | MongoDB is ...    | 2021-01-19 14:15:57 | egoing | developer                 |
+----+------------+-------------------+---------------------+--------+---------------------------+
5 rows in set (0.00 sec)

 

 2) author(이름), profile은 없고 author_id가 있는 topic 테이블 만들기

mysql> CREATE TABLE `topic` (
    ->   `id` int(11) NOT NULL AUTO_INCREMENT,
    ->   `title` varchar(30) NOT NULL,
    ->   `description` text,
    ->   `created` datetime NOT NULL,
    ->   `author_id` int(11) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> );
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> INSERT INTO `topic` VALUES (1,'MySQL','MySQL is...','2018-01-01 12:10:11',1);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `topic` VALUES (2,'Oracle','Oracle is ...','2018-01-03 13:01:10',1);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `topic` VALUES (3,'SQL Server','SQL Server is ...','2018-01-20 11:01:10',2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `topic` VALUES (4,'PostgreSQL','PostgreSQL is ...','2018-01-23 01:03:03',3);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `topic` VALUES (5,'MongoDB','MongoDB is ...','2018-01-30 12:31:03',1);
Query OK, 1 row affected (0.00 sec)

mysql> DESC topic;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| id          | int         | NO   | PRI | NULL    | auto_increment |
| title       | varchar(30) | NO   |     | NULL    |                |
| description | text        | YES  |     | NULL    |                |
| created     | datetime    | NO   |     | NULL    |                |
| author_id   | int         | YES  |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+-----------+
| id | title      | description       | created             | author_id |
+----+------------+-------------------+---------------------+-----------+
|  1 | MySQL      | MySQL is...       | 2018-01-01 12:10:11 |         1 |
|  2 | Oracle     | Oracle is ...     | 2018-01-03 13:01:10 |         1 |
|  3 | SQL Server | SQL Server is ... | 2018-01-20 11:01:10 |         2 |
|  4 | PostgreSQL | PostgreSQL is ... | 2018-01-23 01:03:03 |         3 |
|  5 | MongoDB    | MongoDB is ...    | 2018-01-30 12:31:03 |         1 |
+----+------------+-------------------+---------------------+-----------+
5 rows in set (0.00 sec)

 

 3) name(작가), profile을 담은 author 테이블 만들기

mysql> CREATE TABLE `author` (
    ->   `id` int(11) NOT NULL AUTO_INCREMENT,
    ->   `name` varchar(20) NOT NULL,
    ->   `profile` varchar(200) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> );
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> INSERT INTO `author` VALUES (1,'egoing','developer');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `author` VALUES (2,'duru','database administrator');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `author` VALUES (3,'taeho','data scientist, developer');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM topic;
ERROR 1146 (42S02): Table 'first.topic' doesn't exist
mysql> SELECT * FROM author;
+----+--------+---------------------------+
| id | name   | profile                   |
+----+--------+---------------------------+
|  1 | egoing | developer                 |
|  2 | duru   | database administrator    |
|  3 | taeho  | data scientist, developer |
+----+--------+---------------------------+
3 rows in set (0.00 sec)

 

16. 관계형 데이터베이스의 꽃 JOIN

 1) LEFT JOIN을 써서 토픽 테이블에있는 작가 아이디랑, 작가 테이블에 있는 아이디가 동일하게 엮어서 보여줘

mysql> SELECT * FROM topic LEFT JOIN author ON topic.author_id=author.id;
+----+------------+-------------------+---------------------+-----------+------+--------+---------------------------+
| id | title      | description       | created             | author_id | id   | name   | profile                   |
+----+------------+-------------------+---------------------+-----------+------+--------+---------------------------+
|  1 | MySQL      | MySQL is...       | 2018-01-01 12:10:11 |         1 |    1 | egoing | developer                 |
|  2 | Oracle     | Oracle is ...     | 2018-01-03 13:01:10 |         1 |    1 | egoing | developer                 |
|  3 | SQL Server | SQL Server is ... | 2018-01-20 11:01:10 |         2 |    2 | duru   | database administrator    |
|  4 | PostgreSQL | PostgreSQL is ... | 2018-01-23 01:03:03 |         3 |    3 | taeho  | data scientist, developer |
|  5 | MongoDB    | MongoDB is ...    | 2018-01-30 12:31:03 |         1 |    1 | egoing | developer                 |
+----+------------+-------------------+---------------------+-----------+------+--------+---------------------------+
5 rows in set (0.00 sec)

 

 2) 1)에서 토픽 id랑 타이틀이랑 작가명만 알고싶을때 (필요한 정보만 보기)

mysql> SELECT topic.id,title,name FROM topic LEFT JOIN author ON topic.author_id=author.id;
+----+------------+--------+
| id | title      | name   |
+----+------------+--------+
|  1 | MySQL      | egoing |
|  2 | Oracle     | egoing |
|  3 | SQL Server | duru   |
|  4 | PostgreSQL | taeho  |
|  5 | MongoDB    | egoing |
+----+------------+--------+
5 rows in set (0.00 sec)

# (AS topic_id) id값이 헷갈리니까 이름을 토픽아이디라고 붙여줘..!
mysql> SELECT topic.id AS topic_id,title,name FROM topic LEFT JOIN author ON topic.author_id=author.id;
+----------+------------+--------+
| topic_id | title      | name   |
+----------+------------+--------+
|        1 | MySQL      | egoing |
|        2 | Oracle     | egoing |
|        3 | SQL Server | duru   |
|        4 | PostgreSQL | taeho  |
|        5 | MongoDB    | egoing |
+----------+------------+--------+
5 rows in set (0.00 sec)

 

 

17. 인터넷과 데이터베이스

 - 인터넷 : 두 대의 컴퓨터가 필요함. 컴퓨터 간 사회가 만들어진 것. 한대의 컴퓨터는 다른 컴퓨터에게 정보를 요청하고 다른 컴퓨터는 정보를 줌. (요청하는 쪽과 응답하는 쪽이 나뉨.) 

 - 서버 컴퓨터 < - > 클라이언트 컴퓨터

Web의 경우
DATABASE의 경우

 * 공부의 목표는 이해하는 것이 아니라 익숙해지는 것이다.

 

18. MySQL 클라이언트

> 클라이언트 이름 : MySQL monitor (명령어 기반, 어디서든 실행 가능, 명령어를 모르면 실행 불가)

 * 이 외 다양한 클라이언트 : codingsight.com/10-best-mysql-gui-tools/

 

19. MySQL Workbench

 

20. 수업을 마치며 : 추가로 공부할만한 Keyword

 - SQL

 - index

 - modeling (정규화)

 - backup (mysqldump, binary log ...)

 - cloud (AWS RDS, Google Cloud SQL for MySQL, AZURE Database for MySQL ...)

 - programming (Python mysql api, PHP mysql api, Java mysql api ...)

728x90

'코딩 어쩌구 > Data' 카테고리의 다른 글

[생활코딩] Oracle (2)  (0) 2021.01.21
[생활코딩] Oracle (1)  (0) 2021.01.21
[생활코딩] MySQL (2)  (0) 2021.01.19
[생활코딩] MySQL (1)  (0) 2021.01.18
[시험 준비] SQLD 일정 및 내용  (0) 2021.01.15