MySQL - CRUD (2) Read, Update, Delete

Younkyum J·2022년 7월 22일
0

TIL

목록 보기
3/10
post-thumbnail

이전 포스팅에서 Create를 다루었으니, 나머지 Read, Update, Delete의 구문을 알아보도록 하자.


Read

MySQL에서 Read를 담당하는 구문의 시작은 SELECT 이다.

우선 이전에, SELCET를 사용하여 표를 전체 출력했던 경험을 떠올려 보자.

MariaDB [opentutorials]> SELECT * FROM topic;
+----+------------+------------------+---------------------+----------+--------------------+
| id | title      | description      | created             | author   | profile            |
+----+------------+------------------+---------------------+----------+--------------------+
|  1 | MySQL      | MySQL is...      | 2022-07-21 23:03:59 | Younkyum | developer          |
|  2 | ORACLE     | ORACLE is...     | 2022-07-21 23:06:05 | Younkyum | developer          |
|  3 | SQL Server | SQL Server is... | 2022-07-21 23:07:32 | Onve     | data administrator |
|  4 | PostgreSQL | PostgreSQL is... | 2022-07-21 23:08:06 | Onve     | data administrator |
|  5 | MongoDB    | MongoDB is...    | 2022-07-21 23:08:36 | Younkyum | developer          |
+----+------------+------------------+---------------------+----------+--------------------+

이런 방식으로 사용했었다. 그럼 여기의 구문을 하나하나 확인해보자.

  • SELECT : 표시하라는 의미의 구문이다. 눈으로 테이블의 항목을 보기 위해서는 SELECT를 사용해야한다.
  • * : 모든 항목이라는 의미이다. 여기서는 항목의 이름이 들어가야 한다. (다시 확인할 것이다.)
  • FROM : 표시하려는 테이블을 고르는 구문이다. 뒤에 테이블의 이름을 붙여주면 된다.
  • topic : 표시하려는 테이블의 이름이다.

이 외에도 다양한 구문들과 요소들을 사용할 수 있는데, 하나하나 알아보자.

SELECT (첨자)

SELECT 다음에 나오는 것은 항목의 이름을 표시한다.

만약 위의 테이블에서 id와 title, 그리고 created만 출력하고 싶다면 다음과 같이 작성하면 된다.

MariaDB [opentutorials]> SELECT id, title, created FROM topic;
+----+------------+---------------------+
| id | title      | created             |
+----+------------+---------------------+
|  1 | MySQL      | 2022-07-21 23:03:59 |
|  2 | ORACLE     | 2022-07-21 23:06:05 |
|  3 | SQL Server | 2022-07-21 23:07:32 |
|  4 | PostgreSQL | 2022-07-21 23:08:06 |
|  5 | MongoDB    | 2022-07-21 23:08:36 |
+----+------------+---------------------+
5 rows in set (0.000 sec)

보이는 것과 같이 id, title, 그리고 created만 출력되는 것을 볼 수 있다.

WHERE (구문)

WHERE은 FROM (테이블 이름) 뒤에 나오는 형태이다.

특정 조건만을 만족하는 (예를 들어 author == 'Younkyum') 항목만 선택해서 출력하는 구조이다.

MariaDB [opentutorials]> SELECT * FROM topic WHERE author='Younkyum';
+----+---------+---------------+---------------------+----------+-----------+
| id | title   | description   | created             | author   | profile   |
+----+---------+---------------+---------------------+----------+-----------+
|  1 | MySQL   | MySQL is...   | 2022-07-21 23:03:59 | Younkyum | developer |
|  2 | ORACLE  | ORACLE is...  | 2022-07-21 23:06:05 | Younkyum | developer |
|  5 | MongoDB | MongoDB is... | 2022-07-21 23:08:36 | Younkyum | developer |
+----+---------+---------------+---------------------+----------+-----------+
3 rows in set (0.004 sec)

FROM topic 다음에 WHERE 구문을 사용하는 것을 알 수 있다.

ORDER BY (항목) (순서)

ORDER BY는 WHERE 뒤에 나오는 구문이다.

출력하는 순서를 정할 수 있으며 순서는 일반적으로 DESC(내림차순)와 ASC(오름차순)로 나타낸다.

MariaDB [opentutorials]> SELECT * FROM topic WHERE author='Younkyum' ORDER BY id DESC;
+----+---------+---------------+---------------------+----------+-----------+
| id | title   | description   | created             | author   | profile   |
+----+---------+---------------+---------------------+----------+-----------+
|  5 | MongoDB | MongoDB is... | 2022-07-21 23:08:36 | Younkyum | developer |
|  2 | ORACLE  | ORACLE is...  | 2022-07-21 23:06:05 | Younkyum | developer |
|  1 | MySQL   | MySQL is...   | 2022-07-21 23:03:59 | Younkyum | developer |
+----+---------+---------------+---------------------+----------+-----------+
3 rows in set (0.000 sec)

다음과 같이 id를 기준점으로 내림차순(DESC) 출력된 것을 볼 수 있다.

이 외에도 다양한 구문이 있는데, 다음과 같다.

여러 항목으로 정렬

SELECT * FROM (테이블) ORDER BY 항목_1 [, 항목_2, ... ];

오름차순 정렬

SELECT * FROM (테이블) ORDER BY 항목;

특히, 오름차순 정렬은 ASC를 굳이 마지막에 써주지 않아도 Default로 오름차순으로 출력된다.

LIMIT (숫자)

다음은 제한을 거는 방법이다.

만약 데이터가 1000만개 있다고 가정해보면, SELECT * FROM (테이블);을 한다면 어떻게 될까?

물론 성능이 충분하다면 출력이 쉽겠지만, 대부분의 컴퓨터는 출력하기 위해 많은 고생을 해야할 것이다.

이를 막기 위해서, 출력 개수의 제한을 걸 수 있는데, 이에 사용하는 구문이 LIMIT (숫자) 이다.

MariaDB [opentutorials]> SELECT * FROM topic WHERE author='Younkyum' ORDER BY id DESC LIMIT 2;
+----+---------+---------------+---------------------+----------+-----------+
| id | title   | description   | created             | author   | profile   |
+----+---------+---------------+---------------------+----------+-----------+
|  5 | MongoDB | MongoDB is... | 2022-07-21 23:08:36 | Younkyum | developer |
|  2 | ORACLE  | ORACLE is...  | 2022-07-21 23:06:05 | Younkyum | developer |
+----+---------+---------------+---------------------+----------+-----------+
2 rows in set (0.000 sec)

보이는 것과 같이 LIMIT이 2개로 걸렸기에 2개만 출력된 것을 볼 수 있다.




UPDATE

MySQL에서 UPDATE를 담당하는 구문은 고맙게도 같은 UPDATE 이다.

MariaDB [opentutorials]> SELECT * FROM topic;
+----+------------+------------------+---------------------+----------+--------------------+
| id | title      | description      | created             | author   | profile            |
+----+------------+------------------+---------------------+----------+--------------------+
|  1 | MySQL      | MySQL is...      | 2022-07-21 23:03:59 | Younkyum | developer          |
|  2 | ORACLE     | ORACLE is...     | 2022-07-21 23:06:05 | Younkyum | developer          |
|  3 | SQL Server | SQL Server is... | 2022-07-21 23:07:32 | Onve     | data administrator |
|  4 | PostgreSQL | PostgreSQL is... | 2022-07-21 23:08:06 | Onve     | data administrator |
|  5 | MongoDB    | MongoDB is...    | 2022-07-21 23:08:36 | Younkyum | developer          |
+----+------------+------------------+---------------------+----------+--------------------+
5 rows in set (0.000 sec)

만약 이 테이블에서, id가 2번인 항목을 다음과 같이 바꾸고 싶다면 어떻게 해야 할까?

  • ORACLE => Oracle - 제 1 목표
  • ORACLE is... => ORACLE IS ... - 제 2 목표

그럼 다음과 같은 구문을 사용하여 바꿀 수 있다.

MariaDB [opentutorials]> UPDATE topic SET description='ORACLE IS ...', title = 'Oracle' WHERE id='2';
Query OK, 1 row affected (0.008 sec)
Rows matched: 1  Changed: 1  Warnings: 0

일반적인 구문의 형태는 다음과 같다.

UPDATE (테이블) SET (수정하고 싶은 항목 = 수정 후 내용), ... WHERE (수정하고자 하는 위치 특정);

따라서 위에서는 제 1목표를 해결하기 위해서 title='Oracle'을 한 것이고, 제 2목표를 해결하기 위해서 description='ORACLE IS ...'을 작성한 것이다.

WARNING

그리고 가장 중요한 부분인데, 바로 WHERE 구문이다.

이는 SELCET 에서 사용한 것과 같은데, 일종의 IF 문 정도로 생각해도 괜찮다.

WHERE 구문을 무조건 작성해주어야 한다는 것이다.

WHERE 구문을 사용하지 않으면 모든 데이터가 해당 수정 내용으로 바뀌게 된다.

따라서 UPDATE를 할 때에는 신중히 확인하며 하도록 하자.




DELETE

삭제 구문도 마찬가지로 같은 DELETE를 사용한다.

MariaDB [opentutorials]> SELECT * FROM topic;
+----+------------+------------------+---------------------+----------+--------------------+
| id | title      | description      | created             | author   | profile            |
+----+------------+------------------+---------------------+----------+--------------------+
|  1 | MySQL      | MySQL is...      | 2022-07-21 23:03:59 | Younkyum | developer          |
|  2 | Oracle     | ORACLE IS ...    | 2022-07-21 23:06:05 | Younkyum | developer          |
|  3 | SQL Server | SQL Server is... | 2022-07-21 23:07:32 | Onve     | data administrator |
|  4 | PostgreSQL | PostgreSQL is... | 2022-07-21 23:08:06 | Onve     | data administrator |
|  5 | MongoDB    | MongoDB is...    | 2022-07-21 23:08:36 | Younkyum | developer          |
+----+------------+------------------+---------------------+----------+--------------------+
5 rows in set (0.000 sec)

해당 테이블에서 id가 3인 항목을 삭제해보자.

삭제 구문은 다음과 같다.

DELETE FROM (테이블) WHERE (위치를 특정할 수 있는 조건);

그럼 한번 3번을 삭제해보면,

MariaDB [opentutorials]> DELETE FROM topic WHERE id='3';
Query OK, 1 row affected (0.003 sec)

MariaDB [opentutorials]> SELECT * FROM topic;
+----+------------+------------------+---------------------+----------+--------------------+
| id | title      | description      | created             | author   | profile            |
+----+------------+------------------+---------------------+----------+--------------------+
|  1 | MySQL      | MySQL is...      | 2022-07-21 23:03:59 | Younkyum | developer          |
|  2 | Oracle     | ORACLE IS ...    | 2022-07-21 23:06:05 | Younkyum | developer          |
|  4 | PostgreSQL | PostgreSQL is... | 2022-07-21 23:08:06 | Onve     | data administrator |
|  5 | MongoDB    | MongoDB is...    | 2022-07-21 23:08:36 | Younkyum | developer          |
+----+------------+------------------+---------------------+----------+--------------------+
4 rows in set (0.000 sec)

보이는 것과 같이 3번 항목이 삭제된 것을 볼 수 있다.

WARNING

하지만 매우매우 신경써야 하는 부분이, 바로 WHERE 이다.

안쓰면 말 그대로 데이터 다 날아간다.

꼭 WHERE 신경 쓰자.




* 본 포스팅은 opentutorials의 'MySQL' 강의를 기반으로 작성되었습니다.

profile
기획자입니다. 근데 이제 고양이와 애플덕후와 개발을 곁들인.

0개의 댓글