Database

[MySQL] CRUD | SQL 기본 문법

brong 2023. 8. 16. 02:17
728x90

MySQL 데이터 관리; CRUD

이번 포스팅에서는 MySQL에 데이터베이스와 테이블을 생성하고 데이터를 추가, 조회, 갱신, 삭제하는 방법 (SQL 문법)을 다룬다.

 

데이터베이스 서버 안에는 데이터베이스들이 있고, 데이터베이스 안에는 테이블들이 존재하므로 순서는 다음과 같이

 

  1. 데이터베이스(스키마) 생성
  2. 테이블 생성
  3. 데이터 추가 (CRUD)

 

스키마 생성 및 사용

데이터베이스 생성, 삭제, 확인 및 사용하기

데이터베이스 생성

CREATE DATABASE database_name;

 

데이터베이스 삭제

DROP DATABASE database_name;

 

데이터베이스 확인

SHOW DATABASES;

또는

SHOW SCHEMAS;

데이터베이스 서버에 존재하는 데이터베이스들의 목록이 출력

 

데이터베이스 사용

USE database_name;

사용할 데이터베이스를 선택한다. 선택 안 하고도 사용할 수 있지만, 그럴 경우 항상 어떤 스키마인지 지정해줘야 함

 

 

테이블 생성

CREATE TABLE table_name(
    column1 datatype(출력할 자릿수) NOT NULL ...,
    ...
    PRIMARY KEY (column_name)
    );
  • 생성할 테이블의 이름과 구조를 선언한다.
  • 테이블에 포함할 모든 column(열)들에 대해 이름, 자료형, 출력 자릿수 등을 지정한다.
  • primary key 를 지정해 준다.

 

예시

CREATE TABLE topic(
    id INT(11) NOT NULL AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,     
    description TEXT NULL, created DATETIME NOT NULL, 
    author VARCHAR(15) NULL, profile VARCHAR(200) NULL PRIMARY KEY (id) 
    );

NOT NULL : 비어 있으면 안 되는 값. 무조건 가지고 있어야 하는 값
NULL : 비어 있어도 OK

AUTO_INCREMENT : 자동으로 숫자 증가.
PRIMARY KEY : 데이터들의 식별자. 중복 불가, 반드시 지정해야 한다.

 

CREATE 데이터 생성

테이블까지 만들었으니, 이제 데이터 추가하고 다뤄보자 (CRUD)

테이블 구조(타입) 보기

DESC table_name;

테이블 구조에 맞춰 데이터를 추가해야 한다. 이 명령어를 통해 자료형 확인

 

row 데이터 생성

INSERT INTO table_name (col1, col2, ...)
    VALUES( value1, value2, ...);

추가할 row 데이터가 가지는 col 나열하고 해당하는 값들을 순서대로 나열한다.

INSERT INTO topic (title,description,created,author,profile) VALUES('MySQL','MySQL is ...',NOW(),'egoing','developer');
INSERT INTO topic (title,description,created,author,profile) VALUES('Oracle','Oracle is ...',NOW(),'egoing','developer');
...

이렇게 한 줄 한 줄 데이터를 추가한다 ~

 

 

READ 데이터 조회 - SELECT

SELECT col_name1, col_name2
    [FROM table_name]
    [GROUP BY col_name]
    [ORDER BY col_name [ASC|DESC]]
    [LIMIT offset, 조회할 행의 수];

SQL에서 데이터 조회는 select 명령어를 사용한다.
어떤 테이블에서 어떤 데이터들(column)을 조회할지 지정한다.
추가로 정렬이나 어디서부터 얼마나 조회할지도 지정할 수 있다.

 

모든 데이터 조회하기 - *

SELECT * FROM table_name;

 

Projection - column 선택해서 데이터 조회하기

SELECT id, title, author FROM topic;

id, title, author 행만 가져온다.

 

조건에 맞는 row들만 조회하기 - WHERE

SELECT id, title, author FROM topic WHERE author='abc';

author == 'abc'인 row만 출력한다. 이때 WHEREFROM 뒤에 와야 한다

AND, OR 를 이용해서 조건을 설정할 수도 있다.

 

데이터 grouping - GROUP BY

SELECT col_name FROM table_name GROUP BY 그룹핑할 기분 칼럼명;

SELECT sex FROM student GROUP BY sex;

sex라는 column 값이 중복되는 데이터들을 그룹화해서 출력 -> 남자 N명 여자 M명이더라도 '남자', '여자'라는 데이터만 각각 하나 출력

 

SELECT sex, sum(distance), avg(distance) FROM student GROUP BY sex;

성별별로 그룹화하여 각 그룹별 distance의 합, distance의 평균을 출력

 

 

데이터 정렬해서 조회하기 - ORDER BY

SELECT id, title FROM topic ORDER BY id DESC

id를 기준으로 데이터를 정렬한다.
DESC : 내림차순
ASC : 오름차순

 

SELECT * FROM student ORDER BY distance DESC, address ASC;

여러 정렬 조건 사용 가능. 앞에서부터 우선적으로.
distance 내림차순으로 정렬하고, 그중 distance가 같은 애들은 address 오름차순으로 정렬한다.

 

 

offset 지정 및 출력 데이터 개수 제한 - LIMIT

SELECT * FROM topic LIMIT offset, 출력할 행의 수

offset부터 출력할 행의 수만큼 데이터를 출력한다.
offset은 0부터 시작한다

 

SELECT * FROM topic LIMIT 2;

위에서부터 2개까지만 출력

 

SELECT * FROM topic 2, 4;

위에서부터 3번째 데이터(0, 1, 2)부터 4개 데이터 출력

 

 

UPDATE 데이터 업데이트

UPDATE table_name SET 변경할 열 이름='변경할 값' WHERE 조건

UPDATE topic SET description='Oracle is...', title='Oracle' WHERE id=2;

특정 row에서 변경할 값들을 지정해 준다. 이때 어떤 데이터를 수정할 건지 WHERE 지정 꼭 하기!! 빠뜨리면 재앙..!!

 

 

DELETE 데이터 삭제

테이블에서 특정 데이터 삭제하기 - DELETE

DELETE FROM table_name WHERE id=5;

삭제할 데이터 조건 - WHERE 지정 안 해주면 전체 데이터 삭제 된다.

 

 

테이블의 모든 데이터 삭제하기 - TRUNCATE

TRUNCATE table_name;

테이블의 전체 데이터를 삭제한다. 테이블을 삭제하는 건 아님.
전체 데이터를 삭제할 때 테이블 외부키가 없다면 DELETE(행단위 삭제)하는 것보다 훨씬 빠르다

 

 

테이블 삭제하기 - DROP

DROP TABLE table_name;

DROP TABLE IF EXISTS 'table_name';

데이터베이스를 삭제하는 건 DROP DATABASE

'Database' 카테고리의 다른 글

[MySQL]  (0) 2023.08.16
데이터베이스와 CRUD  (0) 2023.08.15