들어가기에 앞서
본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다.
이번 게시물에서는 테이블 안에 저장된 데이터를 삽입, 갱신, 삭제하는 DML(Data Manipulation Language) 명령어에 대해서 알아보겠습니다.
SELECT - 테이블 안에 저장된 데이터(튜플)를 검색
# student 테이블의 전체 속성에 대해서 존재하는 모든 데이터를 검색
mysql> SELECT * FROM student;
mysql> SELECT student.* FROM student;
mysql> SELECT stdnum, stdname, major, sex, birthdate, phonenum FROM student;
mysql> SELECT s.stdnum, s.stdname, s.major, s.sex, s.birthdate, s.phonenum FROM student s;
+--------+---------+-------------+--------+------------+----------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+----------+
| 101 | Hong | biology | Female | 1990-02-24 | NULL |
| 102 | Song | physics | Male | 1996-02-24 | NULL |
| 103 | Dong | economics | Male | 1995-02-24 | NULL |
| 104 | Mong | engineering | Female | 1993-02-24 | NULL |
+--------+---------+-------------+--------+------------+----------+
4 rows in set (0.00 sec)
위에서 사용한 4개의 쿼리문은 모두 student 테이블 전체를 그대로 출력합니다.
# student 테이블의 stdnum, stdname, sex 속성에 대해서 전체 데이터를 검색
mysql> SELECT stdnum, stdname, sex FROM student;
+--------+---------+--------+
| stdnum | stdname | sex |
+--------+---------+--------+
| 101 | Hong | Female |
| 102 | Song | Male |
| 103 | Dong | Male |
| 104 | Mong | Female |
+--------+---------+--------+
4 rows in set (0.00 sec)
전체 속성을 불러오지 않고 특정 속성만 명시하여 검색하는 것도 가능합니다.
# student 테이블의 전체 속성에 대해서 sex의 값이 'Female'이 아닌 데이터를 검색
mysql> SELECT * FROM student WHERE sex<>'Female';
+--------+---------+-----------+------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-----------+------+------------+---------------+
| 102 | Song | physics | Male | 1996-02-24 | 010-3322-8813 |
| 103 | Dong | economics | Male | 1995-02-24 | 010-5667-9315 |
+--------+---------+-----------+------+------------+---------------+
2 rows in set (0.00 sec)
# student 테이블의 전체 속성에 대해서 major='economics'가 아닌 데이터를 검색
mysql> SELECT * FROM student WHERE NOT major='economics';
+--------+---------+-------------+--------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+---------------+
| 101 | Hong | biology | Female | 1990-02-24 | 010-1234-5323 |
| 104 | Mong | engineering | Female | 1993-02-24 | 010-9462-8814 |
| 102 | Song | physics | Male | 1996-02-24 | 010-3322-8813 |
+--------+---------+-------------+--------+------------+---------------+
3 rows in set (0.00 sec)
추가로 'WHERE' 절에 조건을 지정하여 조건에 만족하는 튜플만 검색할 수도 있습니다.
이때 '비교 연산자(=, <>, <, >, <=, >=)'와 '논리 연산자(NOT, AND, OR)'를 사용하여 다양한 조건을 지정해줄 수 있습니다.
INSERT - 테이블 안에 새로운 데이터(튜플)를 삽입
# student 테이블에 stdnum=105, stdname='Wang', major='mathematics',
# sex='Male', birthdate='1991-05-23', phonenum='010-4332-8853'인 데이터를 삽입
mysql> INSERT INTO student(stdnum, stdname, major, sex, birthdate, phonenum)
-> VALUES(105, 'Wang', 'mathematics', 'Male', '1991-05-23', '010-4332-8853');
Query OK, 1 row affected (0.01 sec)
'INSERT' 명령어를 사용하는 경우에는 반드시 위처럼 '테이블명(속성명) VALUES(값)'과 같은 형식으로 데이터를 추가해야만 한다.
mysql> SELECT * FROM student;
+--------+---------+-------------+--------+------------+-------------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+-------------------+
| 101 | Hong | biology | Female | 1990-02-24 | NULL |
| 102 | Song | physics | Male | 1996-02-24 | NULL |
| 103 | Dong | economics | Male | 1995-02-24 | NULL |
| 104 | Mong | engineering | Female | 1993-02-24 | NULL |
| 105 | Wang | mathematics | Male | 1991-05-23 | 010-4332-8853 |
+--------+---------+-------------+--------+------------+-------------------+
5 rows in set (0.00 sec)
새로 추가된 데이터는 기본적으로 맨 아래에 위치하게 됩니다.
DELETE - 테이블 안에 저장된 데이터(튜플)를 삭제
# student 테이블에서 stdname='Wang'인 데이터(튜플)를 삭제
mysql> DELETE FROM student WHERE stdname='Wang';
Query OK, 1 row affected (0.01 sec)
'DELETE' 명령어를 사용하는 경우에는 반드시 'WHERE' 명령어를 통해서 조건에 부합하는 데이터만 삭제해줍니다.
mysql> SELECT * FROM student;
+--------+---------+-------------+--------+------------+----------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+----------+
| 101 | Hong | biology | Female | 1990-02-24 | NULL |
| 102 | Song | physics | Male | 1996-02-24 | NULL |
| 103 | Dong | economics | Male | 1995-02-24 | NULL |
| 104 | Mong | engineering | Female | 1993-02-24 | NULL |
+--------+---------+-------------+--------+------------+----------+
4 rows in set (0.00 sec)
'DELETE' 명령어는 '속성'을 삭제하는 명령어가 아닌 '튜플'을 삭제하는 명령어입니다.
만약에 'WHERE' 명령어를 쓰지 않으면 해당 테이블에 존재하는 모든 데이터가 삭제되므로 주의해야 합니다.
UPDATE - 테이블 안에 저장된 데이터를 변경
# student 테이블에서 stdname='Hong'인 튜플의 phonenum 속성을 '010-1234-5323'로 변경
mysql> UPDATE student SET phonenum='010-1234-5323' WHERE stdname='Hong';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
# student 테이블에서 stdnum='102'인 튜플의 phonenum 속성을 '010-3322-8813'로 변경
mysql> UPDATE student SET phonenum='010-3322-8813' WHERE stdnum='102';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
# student 테이블에서 major='engineering'인 튜플의 phonenum 속성을 '010-5667-9315'로 변경
mysql> UPDATE student SET phoneNUm='010-5667-9315' WHERE major='engineering';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
# student 테이블에서 birthdate='1993-02-24'인 튜플의 phonenum 속성을 '010-9462-8813'로 변경
mysql> UPDATE student SET phonenum='010-9462-8814' WHERE birthdate='1993-02-24';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
'UPDATE' 명령어는 'DELETE' 명령어와 마찬가지로 'WHERE' 명령어를 통해서 조건에 부합하는 데이터만 변경해줘야 합니다.
mysql> SELECT * FROM student;
+--------+---------+-------------+--------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+---------------+
| 101 | Hong | biology | Female | 1990-02-24 | 010-1234-5323 |
| 102 | Song | physics | Male | 1996-02-24 | 010-3322-8813 |
| 103 | Dong | economics | Male | 1995-02-24 | 010-5667-9315 |
| 104 | Mong | engineering | Female | 1993-02-24 | 010-9462-8814 |
+--------+---------+-------------+--------+------------+---------------+
4 rows in set (0.00 sec)
'UPDATE' 명령어는 'DELETE' 명령어와 달리 특정 속성의 값만 변경하는 명령어입니다.
만약에 'WHERE' 명령어를 쓰지 않으면 테이블에 존재하는 모든 데이터의 해당 속성이 변경하려는 값으로 바뀌기 때문에 주의해야 합니다.
댓글