오늘은 MySQL로 더 다양한것을 해보았습니다
mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+---------------------------+
| 1 | MySQL | MySQL is ... | 2021-07-18 17:59:06 | egoing | developer |
| 2 | Oracle | Oracle is.... | 2021-07-18 18:01:14 | egoing | developer |
| 3 | SQL Server | SQL server is ... | 2021-07-18 18:02:50 | duru | data administrator |
| 4 | PostgreSQL | PostgreSQL is ... | 2021-07-18 18:04:10 | taeho | data scientist, developer |
| 5 | MongoDB | MongoDB is ... | 2021-07-18 18:05:07 | egoing | developer |
+----+------------+-------------------+---------------------+--------+---------------------------+
5 rows in set (0.01 sec)
이렇게 topic 이라는 테이블이 있는데
DELETE FROM 테이블명 WHERE 지우고싶은것
이라는 명령어로 테이블안에 내용을 지울 수 있습니다 만약 WHERE문을 사용하지 않는다면 테이블의 내용이 다 지워 질 수 있습니다
mysql> DELETE FROM topic WHERE id = 5;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+---------------------------+
| 1 | MySQL | MySQL is ... | 2021-07-18 17:59:06 | egoing | developer |
| 2 | Oracle | Oracle is.... | 2021-07-18 18:01:14 | egoing | developer |
| 3 | SQL Server | SQL server is ... | 2021-07-18 18:02:50 | duru | data administrator |
| 4 | PostgreSQL | PostgreSQL is ... | 2021-07-18 18:04:10 | taeho | data scientist, developer |
+----+------------+-------------------+---------------------+--------+---------------------------+
4 rows in set (0.01 sec)
또한
DROP TABLE 테이블명;
을 통해서 테이블 자체를 지울 수 있습니다
mysql> DROP TABLE topic;
Query OK, 0 rows affected (0.01 sec)
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.01 sec)
이렇게 다시 topic이라는 테이블을 남겨주었고 테이블을 생성하고 자세한 설명은 이 포스트 바로 전의 포스트에 포스팅 되어 있으니 확인해 보시는걸 추천 드립니다 !
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.01 sec)
또한 이렇게 author 라는 테이블을 만들어 주었습니다
mysql> SHOW TABLES;
+-------------------------+
| Tables_in_opemtutorials |
+-------------------------+
| author |
| topic |
+-------------------------+
2 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)
이렇게 topic의 값이 있고
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)
이렇게 author의 값이 있습니다 topic의 author_id의 값은 author의 id값과 같게 해주었고 이 두 테이블을 JOIN 해서 더 가독성 있게 만들어 줄 수 있습니다 .
두 테이블을 나누어 놓은것은 하나의 테이블로도 표현 할 수 있지만 그렇게 될 경우에 만약 데이터가 1억개라면 모두 하나하나 수정해야 하지만 테이블을 두개로 나누어 놓았을 경우에는 값이 들어있는 테이블에서만 바꿔주면 같은 id 값을 가진 데이터가 한번에 다 바뀌어서 더 시간 단축을 할 수 있습니다 또한 테이블을 다른 곳에서 재사용도 가능합니다 하지만 여러개의 테이블을 만들어야 한다는 단점이 있습니다.
자 그럼 두 테이블을 합쳐 보겠습니다 .
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;
이 명령어를 사용하여 아래와 같이 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)
하지만 지금 author의 데이터와 id라는 데이터가 동시에 나오는 것을 볼 수있는데 이러한 것을 없애기 위해
mysql> 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값이 모호하다는 것인데 이 명령어를
mysql> SELECT topic.id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
이렇게 바꾸어서 적어주면
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title | description | created | name | profile |
+----+------------+-------------------+---------------------+--------+---------------------------+
| 1 | MySQL | MySQL is... | 2018-01-01 12:10:11 | egoing | developer |
| 2 | Oracle | Oracle is ... | 2018-01-03 13:01:10 | egoing | developer |
| 3 | SQL Server | SQL Server is ... | 2018-01-20 11:01:10 | duru | database administrator |
| 4 | PostgreSQL | PostgreSQL is ... | 2018-01-23 01:03:03 | taeho | data scientist, developer |
| 5 | MongoDB | MongoDB is ... | 2018-01-30 12:31:03 | egoing | developer |
+----+------------+-------------------+---------------------+--------+---------------------------+
5 rows in set (0.00 sec)
이렇게 깔끔한 데이터를 확인 할 수 있습니다