이전 포스팅에서 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개의 댓글

Powered by GraphCDN, the GraphQL CDN