본문 바로가기

ETC

[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 테이블 조작시에 가장 빈번하게 사용되는 문법이므로 꼭 숙지해두는 것이 좋다. 

반응형