SQL문 INSERT, SELECT

Hevton·2020년 9월 2일
0

이 글에서는 SQL 문의 대표적인 명령어 중 INSERT 와 SELECT에 대해서 기록하겠습니다.

∙ INSERT

우선 INSERT는 테이블에 데이터를 추가할 때 사용합니다. 이전 게시글에서 테이블을 만들었으니, 테이블에 데이터값을 추가 할 때 사용하는 것입니다. 아래는 INSERT문의 기본형입니다.

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

당연히 table_name 부분에는 테이블의 이름이 들어가는 것이고 컬럼 부분에는 컬럼 이름, value부분은 컬럼부분과 1대1 매칭되는 형식으로 해당하는 데이터값을 넣어주면 됩니다.

우선 show tables를 입력해 제가 만들어준 테이블이 잘 있나 확인부터 했습니다.

mysql> show tables;
+---------------------+
| Tables_in_sample_db |
+---------------------+
| student             |
+---------------------+
1 row in set (0.00 sec)

student라는 테이블이 잘 있고, 제가 INSERT문을 통해 이 테이블 안에 데이터 값을 넣어줄 것입니다. 근데 테이블이 잘 기억이 나지 않는다면, DESC student 를 입력해주면 student 테이블의 구조를 볼 수 있습니다. DESC는 Describe의 약자입니다.

mysql> desc student;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int          | NO   | PRI | NULL    | auto_increment |
| name    | varchar(100) | NO   |     | NULL    |                |
| profile | varchar(100) | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

이 부분을 잘 보면서, 테이블에 값을 추가해주면 되겠습니다.

mysql> INSERT INTO student (name, profile) VALUES('steve', 'hello');

저는 student라는 테이블에 name과 profile값이 각각 'steve', 'hello' 인 데이터를 추가해줬습니다. id 값은 auto_increment 이므로 지정을 해주지 않아도 알아서 0부터 1씩 증가된 값으로 채워지게 됩니다. 데이터가 잘 추가되었다면 Query OK가 출력될 것이고, 여기까지가 데이터의 추가 INSERT 문의 기본입니다.

∙ SELECT

SELECT 문은 데이터를 읽어들일 때 사용합니다. 기본 사용형식은 아래와 같습니다.

SELECT column1, column2, ... FROM table_name;

column 부분에 읽어들일 컬럼을 선택하고 table_name 부분엔 테이블 이름을 기입해줍니다. 이게 기본형이고 이것에 다른 많은 옵션들이 추가될 수 있습니다. 참고로 컬럼 부분에 이라는 와일드문자를 넣어주게 되면, 이는 '모두'를 뜻하는 말로써 아무런 필터링 없이 모든 컬럼을 보여주게 됩니다. 예를들어 select from student;를 입력하면

mysql> select * from student;
+----+--------+------------------+
| id | name   | profile          |
+----+--------+------------------+
|  1 | hevton | Nice to meet you |
|  2 | pyro   | Yadon            |
|  3 | steve  | hello            |
+----+--------+------------------+
3 rows in set (0.00 sec)

id, name, profile 모든 컬럼들이 필터링 없이 전부 보여지게 됩니다. 만약 name 컬럼만 보고 싶다면

mysql> select name from student;
+--------+
| name   |
+--------+
| hevton |
| pyro   |
| steve  |
+--------+
3 rows in set (0.00 sec)

이렇게 입력해주면 되는 것입니다. 이렇게 column 입력 부분에 출력하고 싶은 컬럼들만 입력하여 원하는 컬럼들만 필터링 해 출력할 수 있습니다. 다른 예를 들어 테이블이 만약 5행짜리 데이터라면, 그중 나는 1행 2행 3행만 출력해줘~ 라고 지정하는 기능이죠. 여기서 X행은 바로 컬럼명이 되는 것이구요.

그리고 SELECT와 함께 쓰이는 몇 가지 옵션들을 입력과 출력을 통해 알아보겠습니다.
1. WHERE 문

mysql> SELECT * from student WHERE profile='hello';
+----+-------+---------+
| id | name  | profile |
+----+-------+---------+
|  3 | steve | hello   |
+----+-------+---------+
1 row in set (0.00 sec)

이해가 되시나요? SELECT * from student 까지만 입력하게 되면 모든 데이터들이 출력되었는데, WHERE profile='hello'를 추가했더니 profile이 'hello'인 레코드만 출력되었습니다. 이렇게 WHERE 를 이용해서 필터링 해줄 수 있습니다.

SELECT 다음에 입력했던 colums들로 열을 제한해줬다면, 이번엔 WHERE을 사용해서 행을 제한해 줬다고 생각할 수 있습니다.

  1. ORDER BY 문
mysql> SELECT * FROM student ORDER BY id DESC;
+----+--------+------------------+
| id | name   | profile          |
+----+--------+------------------+
|  3 | steve  | hello            |
|  2 | pyro   | Yadon            |
|  1 | hevton | Nice to meet you |
+----+--------+------------------+
3 rows in set (0.00 sec)

이번엔 뒤에 ORDER BY id DESC를 추가했습니다. 출력문이 어떤가요? id값이 원래 1 2 3 순서로 출력되었는데 지금은 3 2 1 이죠? 역순으로 정렬되었네요. ORDER BY id DESC 의 뜻은, "id 순서에 따라 정렬하겠다. 근데 DESC 방식으로." 라는 뜻입니다. 여기서의 DESC는 아까의 Describe가 아니라 하행 이라는 Descending의 뜻입니다. 즉 내림차순으로 정렬한 것입니다. DESC를 생략해주면 오름차순으로 정렬됩니다.

  1. LIMIT 문
mysql> SELECT * FROM student ORDER BY id DESC LIMIT 1;
+----+-------+---------+
| id | name  | profile |
+----+-------+---------+
|  3 | steve | hello   |
+----+-------+---------+
1 row in set (0.00 sec)

바로 위의 명령어에 LIMIT 1만 추가했습니다. 그리고 출력문을 보면 한 행만 출력이 되었습니다. LIMIT 1이 무슨뜻인지 대충 감이 오시나요?
바로 출력 행의 갯수에 제한을 두는 것입니다. 1이니까 한개만 출력해준 상황입니다. 이처럼 데이터 출력(데이터 단위는 레코드임을 아셔야 합니다) 개수에 제한을 줄 때 사용하는 옵션입니다.

알아두시면 좋을 건, 테이블에서 데이터의 기본 단위는 행, 즉 row입니다. 따라서 SQL문을 통해 데이터를 찾는 작업은 원하는 행을 찾는다고 생각하시면 좋습니다. 그리고 찾은 행을 필터링해서 몇 열만 보이게 할 수도 있는 것이구요. 따라서 명령문을 입력하고 난 뒤에서 항상 "x row(s) in set" 라고 나오는 것이죠. 행 단위가 하나의 데이터인 것이지 열 단위가 하나의 데이터인 것은 아닌 것이죠.

profile
놀만큼 놀았다.

0개의 댓글