[SQL] 데이터 SELECT/INSERT/UPDATE/DELETE 쿼리 사용 방법
SQL을 사용하다보면 가장 많이 사용하는 쿼리는 바로 읽기/쓰기/수정/삭제 연산일 것이다. 지금부터 SQL 쿼리를 통해서 어떻게 데이터를 조작할 수 있는지에 대해서 살펴보자.
데이터 읽기 (SELECT)
SELECT 쿼리는 테이블에서 데이터를 읽어들이는 연산이다. 가장 많이 사용하고 원하는 조건에 따라서 다양한 쿼리 조합이 가능하기 때문에 어쩌면 제일 복잡할 수도 있는 쿼리 중 하나다. 일단 가장 자주 사용한다고 생각되는 SELECT 쿼리 문법 5가지를 아래 소개한다.
문법
# 테이블에서 모든 열 가져오기
>> SELECT * FROM 테이블명
# 특정 열 선택해서 가져오기
>> SELECT 열1, 열2, 열3 FROM 테이블명
# 조건에 맞는 행 가져오기
>> SELECT 열1, 열2, 열3 FROM 테이블명 WHERE 조건
# 조건에 맞는 행 특정열을 기준으로 정렬하여 가져오기
>> SELECT 열1, 열2, 열3 FROM 테이블명 WHERE 조건 ORDER BY 기준열
# 조건에 맞는 행 특정열을 기준으로 정렬하여 특정 갯수만 가져오기
>> SELECT 열1, 열2, 열3 FROM 테이블명 WHERE 조건 ORDER BY 기준열 LIMIT 행수
사용예제
모든행 가져오기
mysql> select * from wp_terms;
+---------+-----------------------+------------------------------+------------+
| term_id | name | slug | term_group |
+---------+-----------------------+------------------------------+------------+
| 1 | test | test | 0 |
| 2 | korea best place | korea-best-place | 0 |
| 3 | othertag | othertag | 0 |
| 4 | Korea Best Place | korea-best-place | 0 |
| 5 | twentytwentyone | twentytwentyone | 0 |
....
특정열 지정해서 가져오기
mysql> select term_id, name from wp_terms;
+---------+-----------------------+
| term_id | name |
+---------+-----------------------+
| 1 | ??? |
| 2 | korea best place |
| 3 | othertag |
| 4 | Korea Best Place |
| 5 | twentytwentyone |
조건에 맞는행 가져오기
mysql> select * from wp_terms where slug="korea-best-place";
+---------+------------------+------------------+------------+
| term_id | name | slug | term_group |
+---------+------------------+------------------+------------+
| 2 | korea best place | korea-best-place | 0 |
| 4 | Korea Best Place | korea-best-place | 0 |
| 6 | Korea Best Place | korea-best-place | 0 |
+---------+------------------+------------------+------------+
3 rows in set (0.00 sec)
조건에 맞는행 정렬해서 가져오기
mysql> select * from wp_terms where slug="korea-best-place" ORDER BY term_id DESC;
+---------+------------------+------------------+------------+
| term_id | name | slug | term_group |
+---------+------------------+------------------+------------+
| 6 | Korea Best Place | korea-best-place | 0 |
| 4 | Korea Best Place | korea-best-place | 0 |
| 2 | korea best place | korea-best-place | 0 |
+---------+------------------+------------------+------------+
3 rows in set (0.00 sec)
참고로 ORDER BY는 ASC(오름차순) 출력이 기본이다. 위 예제에서는 DESC 옵션을 줘서 내림차순으로 정렬을 했다. 해당옵션을 주지 않거나 ASC를 주게되면 오름차순으로 출력이 된다.
조건에 맞는행 정렬해서 특정 갯수만 가져오기
mysql> select * from wp_terms where slug="korea-best-place" ORDER BY term_id DESC LIMIT 2;
+---------+------------------+------------------+------------+
| term_id | name | slug | term_group |
+---------+------------------+------------------+------------+
| 6 | Korea Best Place | korea-best-place | 0 |
| 4 | Korea Best Place | korea-best-place | 0 |
+---------+------------------+------------------+------------+
2 rows in set (0.00 sec)
상위 2개의 데이터만 잘라서 가져왔다.
데이터 쓰기 (INSERT)
데이터 쓰기 연산은 테이블에 행을 추가하는 연산이다.
문법
# 열 지정하지 않고 데이터 삽입
INSERT INTO 테이블명 VALUES(값1, 값2, 값3 ...)
# 열 지정하여 데이터 삽입
INSERT INTO 테이블명(열1, 열2 ...) VALUES(값1, 값2 ...)
데이터 쓰기 연산은 위와 같다. INTO 뒤에 테이블명을 적고 VALUES 뒤에 삽입할 값들을 넣게 된다.
사용예제
열 지정하지 않고 데이터 삽입
mysql> INSERT INTO persons VALUES(1, 'Hong', 'Kildong', 25);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM persons;
+------+-----------+------------+------+
| id | last_name | first_name | age |
+------+-----------+------------+------+
| 1 | Hong | Kildong | 25 |
+------+-----------+------------+------+
1 row in set (0.00 sec)
열 지정하여 데이터 삽입
mysql> INSERT INTO persons(id, last_name) VALUES(1, 'Kim');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM persons;
+------+-----------+------------+------+
| id | last_name | first_name | age |
+------+-----------+------------+------+
| 1 | Hong | Kildong | 25 |
| 1 | Kim | NULL | NULL |
+------+-----------+------------+------+
2 rows in set (0.00 sec)
데이터 수정 (UPDATE)
데이터 수정은 이미 존재하는 테이블의 내용을 수정하는 연산이다.
문법
UPDATE 테이블명 SET 열1=값1, 열2=값2, ... WHERE 조건식
위 쿼리는 조건식에 맞는 행들을 찾아 SET에 지정한 대입을 실행한다는 의미이다.
사용예제
mysql> SELECT * FROM persons;
+------+-----------+------------+------+
| id | last_name | first_name | age |
+------+-----------+------------+------+
| 1 | Hong | Kildong | 25 |
| 1 | Kim | NULL | NULL |
+------+-----------+------------+------+
2 rows in set (0.00 sec)
mysql> UPDATE persons set first_name='kunwoong', age=27 WHERE first_name IS NULL and age IS NULL;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM persons;
+------+-----------+------------+------+
| id | last_name | first_name | age |
+------+-----------+------------+------+
| 1 | Hong | Kildong | 25 |
| 1 | Kim | kunwoong | 27 |
+------+-----------+------------+------+
2 rows in set (0.00 sec)
위 예제에서는 first_name과 age가 NULL인 값을 찾아서 first_name과 age에 값을 할당하는 예제이다.
데이터 삭제(DELETE)
데이터 삭제는 특정 행을 삭제하는 연산이다.
문법
DELETE FROM 테이블명 WHERE 조건식
조건식에 해당하는 행들을 테이블에서 삭제한다.
사용예제
mysql> SELECT * FROM persons;
+------+-----------+------------+------+
| id | last_name | first_name | age |
+------+-----------+------------+------+
| 1 | Hong | Kildong | 25 |
| 1 | Kim | kunwoong | 27 |
+------+-----------+------------+------+
2 rows in set (0.00 sec)
mysql> DELETE FROM persons where age<27;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM persons;
+------+-----------+------------+------+
| id | last_name | first_name | age |
+------+-----------+------------+------+
| 1 | Kim | kunwoong | 27 |
+------+-----------+------------+------+
1 row in set (0.00 sec)
DELETE 명령으로 age가 27 미만인 행들을 삭제하는 쿼리를 전송했다.
그 결과 25인 kildong 행이 삭제된 것을 볼 수 있다.
마치며
지금까지 SQL 연산을 통해서 데이터를 삽입(CREATE), 조회(READ), 수정(UPDATE), 삭제(DELETE)하는 연산을 살펴봤다. 이런 연산은 앞글자를 따서 CRUD 연산이라고 하고, mysql 테이블 조작시에 가장 빈번하게 사용되는 문법이므로 꼭 숙지해두는 것이 좋다.