MySQL 2

이건우·2021년 7월 19일
0
post-thumbnail
post-custom-banner

TIL 2021 - 07 - 17-19 📖 !

오늘은 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)
  • 테이블을 생성하고 JOIN 하기
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)

이렇게 깔끔한 데이터를 확인 할 수 있습니다

profile
주니어 개발자 이건우 입니다 .
post-custom-banner

0개의 댓글