SQL
- Structured Query Language의 약자로, 데이터베이스 시스템에서 자료를 처리하는 용도로 사용하는 구조적 질의 언어이다.
- 데이터베이스를 다룰때 사용하는 언어라고 이해하면 됨.
- 해당 게시글은 MySQL을 사용해 만들었습니다.
- 키워드는 대소문자를 구분하지 않으며 아래와 같이 사용할 수도 있지만, 대문자로 사용하는것을 권장함.
select
SElect
sELECT
- 다음은 테이블을 다룰때 많이 사용되는 문법들이며, 쿼리를 작성했을때 실행되는 순서대로 나열했다.
FROM
: 어떤 테이블을 사용할지 선택하는 명령어.
SELECT
: 선택한 테이블에서 컬럼을 선택해서 출력함.
WHERE
: 출력할때 조건(필터링) 추가함.
GROUP BY
: 집계함수 결과를 그룹화할때 사용함.
HAVING
: 집계함수의 결과 기준으로 조건(필터링).
ORDER BY
: 정렬 순서 정할때 사용함.
LIMIT
: 출력할 결과의 개수 정할때 사용함.
- 이 외에도 많이 존재하며 위의 문법은 테이블에서 데이터를 뽑을때 많이 사용한다.
기본 문법
CREATE
CREATE TABLE table_name (
column1 datatype condition,
column2 datatype condition,
....
column100 datatype condition
);
CREATE
: 새로운 테이블 또는 데이터베이스를 생성하는 명령어.
mysql> show databases;
+
| Database |
+
| board_db |
| information_schema |
| mysql |
| performance_schema |
| sys |
+
5 rows in set (0.00 sec)
- MySQL에 로그인후,
show databases;
를 입력하면 데이터 베이스 목록을 나열해준다.
- 추가로, 모든 명령어의 마지막엔 세미콜론을 붙혀줘야 한다.
mysql> CREATE DATABASE prac;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+
| Database |
+
| board_db |
| information_schema |
| mysql |
| performance_schema |
| prac |
| sys |
+
6 rows in set (0.00 sec)
- 위 명령어를 통해 새로운 데이터 베이스를 생성할 수 있다.
- prac 이란 이름의 새로운 데이터 베이스를 만들었다.
mysql> USE prac;
Database changed
mysql> SHOW TABLES;
Empty set (0.00 sec)
USE
를 통해 prac 데이터 베이스를 사용할 수 있으며, 이때부터 테이블 확인이 가능하다.
- 아직 테이블을 만들지 않았으므로 테이블을 확인했을때 비어있다고 나와있다.
mysql> CREATE TABLE Cities (
-> city_num INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> city_name VARCHAR(255) NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+
| Tables_in_prac |
+
| Cities |
+
1 row in set (0.00 sec)
- 위와 같은 방법으로 새로운 테이블을 생성할 수 있으며,
show tables;
를 통해 사용하고 있는 데이터 베이스의 테이블 목록을 나열할 수 있다.
city_num
: NULL값을 허용하지 않으며, 1부터 1씩 자동으로 증가하는 auto_increment를 사용했고, 기본값으로 설정했다.
city_name
NULL값을 허용하지 않음.
데이터 타입 종류
Data type | Meaning | Example |
---|
CHAR | 특정 문자열의 개수를 지정(고정 문자열 길이) | CHAR(10) |
VARCHAR | 가변 문자열(문자열 길이갸 랜덤), 문자열의 최대 길이 지정 | VARCHAR(255) |
INT | 숫자에 사용하며 정수만 가능 | INT |
NUMBER | 숫자에 사용하며 소수점도 가능 | NUMBER |
DATE | 날짜에 사용 | DATE |
조건
Condition | Meaning |
---|
NOT NULL | NULL을 허용하지 않는다 |
UNIQUE | 해당 컬럼에 중복값을 방지할때 사용 |
PRIMARY KEY | 기본키 지정, 테이블당 한개의 기본키만 생성 가능 |
FOREIGN KEY | 외래키 지정 |
DEFAULT | 값이 없을 경우 지정해둔 기본값으로 대체 |
INDEX | 인덱스 지정 |
mysql> DESCRIBE Cities;
+
| Field | Type | Null | Key | Default | Extra |
+
| city_num | int | NO | PRI | NULL | auto_increment |
| city_name | varchar(255) | NO | | NULL | |
+
2 rows in set (0.00 sec)
DESCRIBE
를 통해 특정 테이블의 컬럼에 관한 정보를 확인할 수 있다.
- 테이블을 만들때 설정한 기본키도 설정되어 있으며, 1씩 자동으로 증가한 설정도 확인했다.
INSERT
INSERT INTO table_name (col1, col2, col3 ...) VALUES (val1, val2, val3 ...)
INSERT
: 테이블에 데이터를 삽입하는 명령어
mysql> INSERT INTO Cities (city_name) VALUES ('Emporia');
Query OK, 1 row affected (0.00 sec)
Cities
테이블에 도시 이름을 하나 삽입해줬다.
city_num
은 1부터 1씩 자동으로 증가하므로 값을 따로 주지 않았다.
- 테이블에 레코드를 삽입한 후 확인하는 방법은 아래에서 설명한다.
SELECT, FROM
SELECT * FROM table_name;
- FROM: 테이블을 선택할때 사용한다.
- SELECT: 선택한 테이블에서 출력하고 싶은 컬럼을 선택할때 사용한다.
mysql> SELECT * FROM Cities;
+
| city_num | city_name |
+
| 1 | Emporia |
+
1 row in set (0.01 sec)
- 아까 위에서 만든 테이블을 확인할 때, 위와 같은 방법으로 출력할 수 있다.
mysql> SELECT city_name FROM Cities;
+
| city_name |
+
| Emporia |
+
1 row in set (0.00 sec)
mysql> SELECT city_num FROM Cities;
+
| city_num |
+
| 1 |
+
1 row in set (0.00 sec)
- 이런식으로 * 대신 특정 컬럼을 적어주면 특정 컬럼만 선택해서 출력해준다.
mysql> INSERT INTO Cities (city_name) VALUES ('Topeka');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Cities (city_name) VALUES ('Wichita');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Cities (city_name) VALUES ('Kansas City');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM Cities;
+
| city_num | city_name |
+
| 1 | Emporia |
| 2 | Topeka |
| 3 | Wichita |
| 4 | Kansas City |
+
4 rows in set (0.00 sec)
WHERE
SELECT * FROM table_name WHERE condition;
- 출력을 할 때 조건(필터링)을 추가해서 출력할 수 있게 만들어준다.
mysql> SELECT * FROM Cities WHERE city_num>2;
+
| city_num | city_name |
+
| 3 | Wichita |
| 4 | Kansas City |
+
2 rows in set (0.00 sec)
- 이런식으로
city_num
이 2보다 큰 레코드만 출력할 수 있다.