[DB] MySQL / CREATE / INSERT / SELECT / FROM / WHERE 예제

Onam Kwon·2023년 1월 1일
0

DB

목록 보기
2/11

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 typeMeaningExample
CHAR특정 문자열의 개수를 지정(고정 문자열 길이)CHAR(10)
VARCHAR가변 문자열(문자열 길이갸 랜덤), 문자열의 최대 길이 지정VARCHAR(255)
INT숫자에 사용하며 정수만 가능INT
NUMBER숫자에 사용하며 소수점도 가능NUMBER
DATE날짜에 사용DATE

조건

ConditionMeaning
NOT NULLNULL을 허용하지 않는다
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보다 큰 레코드만 출력할 수 있다.
profile
권오남 / Onam Kwon

0개의 댓글