포스트

MySQL 문법

MySQL 문법

데이터베이스

생성

1
2
CREATE
DATABASE my_database

삭제

1
2
DROP
DATABASE my_database

사용

1
2
USE
my_database

조회

1
2
SHOW
my_database

DDL

테이블 생성

1
2
3
4
5
6
7
8
9
CREATE TABLE customers
(
  customer_id INT AUTO_INCREMENT PRIMARY KEY,
  name        VARCHAR(50)  NOT NULL,
  email       VARCHAR(100) NOT NULL UNIQUE,
  password    VARCHAR(255) NOT NULL,
  address     VARCHAR(255) NOT NULL,
  join_date   DATETIME DEFAULT CURRENT_TIMESTAMP
);
1
2
3
4
5
6
7
8
9
10
CREATE TABLE orders
(
  order_id    INT AUTO_INCREMENT PRIMARY KEY,
  customer_id INT         NOT NULL,
  quantity    INT         NOT NULL,
  order_date  DATETIME             DEFAULT CURRENT_TIMESTAMP,
  status      VARCHAR(20) NOT NULL DEFAULT '주문접수',
  CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id)
    REFERENCES customers (customer_id),
);

날짜와 기본 값 설정 옵션

1
2
3
4
5
CREATE TABLE test
(
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

AUTO_INCREMENT

  • 데이터 입력 시, 자동으로 1씩 값이 증가한 데이터가 삽입 됩니다.

외래 키 제약 조건

1
2
3
4
CONSTRAINT [제약조건_이름]
FOREIGN KEY ([자식_테이블의_컬럼명])
REFERENCES [부모_테이블명]([부모_테이블의_컬럼명])
-- [ON DELETE 옵션] [ON UPDATE 옵션]

테이블 변경

Column 추가

1
2
ALTER TABLE customers
  ADD COLUMN point INT NOT NULL DEFAULT 0;

Column 데이터 타입 변경

1
2
ALTER TABLE customers
  MODIFY COLUMN address VARCHAR (500) NOT NULL;

Column 삭제

1
2
3
ALTER TABLE customers
DROP
COLUMN point;

테이블 삭제

1
DROP TABLE table

DROP TABLE vs TRUNCATE TABLE

  • DROP TABLE: 테이블 존재 자체를 삭제
  • TRUNCATE TABLE: 내부 데이터만 모두 삭제

DML

등록

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

수정

1
2
3
4
UPDATE table_name
SET column1 = value1,
    column2 = value2, ...
  WHERE condition;

삭제

1
2
3
DELETE
FROM table_name
WHERE condition;

조회

💡 SQL 작동 순서

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

1
2
3
4
5
6
7
8
SELECT customer_name,
       SUM(price * quantity) AS total_purchase -- 5단계
FROM order_stat -- 1단계
WHERE order_date < '2025-05-14' -- 2단계
GROUP BY customer_name -- 3단계
HAVING COUNT(*) >= 2 -- 4단계
ORDER BY total_purchase DESC -- 6단계
  LIMIT 1; -- 7단계
  • SELECT: 조회 할 열 선택. *은 전체
  • FROM: 조회할 테이블 선택
  • WHERE: 검색 조건
  • GROUP BY: 그룹핑
  • HAVING: 그룹 필터링
  • ORDER BY: 정렬
    • ASC: 오름차순
    • DESC: 내림차순
  • LIMIT: 조회할 레코드 개수

집계 함수

  • AVG: 평균 값
  • COUNT(*): 전체 행 수
  • COUNT(열이름): NULL이 아닌 행 수
  • MAX: 최대 값
  • MIN: 최소 값
  • SUM: 합계

💡 GROUP BY 서용 시 주의사항

SELECT 절에는 GROUP BY 컬럼이나, 집계함수만 올 수 있음

DISTINCT 중복 제거

1
2
SELECT DISTINCT 컬럼명
FROM 테이블명;

참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.