구조화된 질의 언어
사용자가 Database를 관리하기 위해 DBMS로 요청(질의)을 보내기 위한 언어
비절차적 언어로, 실행 절차에 대해서는 명시하지 않고 조건만 기술

| 구분 | 설명 | 주요 명령 |
|---|---|---|
| DDL | 구조 정의 | CREATE, ALTER, DROP |
| DML | 데이터 조작 | SELECT, INSERT, UPDATE, DELETE |
| DCL | 권한 제어 | GRANT, REVOKE |
| TCL | 트랜잭션 | COMMIT, ROLLBACK |
# 기본 문법
CREATE DATABASE [IF NOT EXISTS] <<database_name>>;
DROP DATABASE [IF EXISTS] <<database_name>>;
CREATE DATABASE keduDB;
DROP DATABASE keduDB;
CREATE DATABASE IF NOT EXISTS keduDB;
# 기본 문법
CREATE TABLE [IF NOT EXISTS] <<table_name>> (
<<column_name>> <<data_type>> [constraint],
<<column_name>> <<data_type>> [constraint],
...
);
CREATE TABLE userTBL (
id VARCHAR(5) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE,
birth INT,
age INT CHECK (age >= 0),
mileage INT DEFAULT 0,
major VARCHAR(10)
);
제약조건 예시
PRIMARY KEY : 중복 X, NULL XNOT NULL : 필수 입력UNIQUE : 중복 불가DEFAULT : 기본값CHECK : 값 검증CREATE TABLE buyTBL (
id INT AUTO_INCREMENT PRIMARY KEY,
userID VARCHAR(5),
productName VARCHAR(50),
amount INT,
price INT,
buyDate DATE,
FOREIGN KEY (userID) REFERENCES userTBL(id)
);
# 기본 문법
ALTER TABLE <<table_name>>
ADD <<column_name>> <<data_type>>;
ALTER TABLE <<table_name>>
MODIFY <<column_name>> <<data_type>>;
ALTER TABLE <<table_name>>
DROP <<column_name>>;
-- 컬럼 추가
ALTER TABLE userTBL ADD phone VARCHAR(20);
-- 컬럼 수정
ALTER TABLE userTBL MODIFY phone VARCHAR(30);
-- 컬럼 이름 변경
ALTER TABLE userTBL CHANGE phone mobile VARCHAR(20);
-- 컬럼 삭제
ALTER TABLE userTBL DROP mobile;
# 기본 문법
INSERT INTO <<table_name>>
VALUES (value1, value2, ...);
-- 전체 컬럼 입력
INSERT INTO userTBL
VALUES ('U001', '민수', 'minsu@test.com', 1998, 27, 0, 'CS');
-- 일부 컬럼 입력
INSERT INTO userTBL (id, name, age) VALUES ('U002', '영희', 25);
-- 여러 행 입력
INSERT INTO userTBL (id, name, age)
VALUES
('U003', '철수', 30),
('U004', '지수', 22);
# 기본 문법
UPDATE <<table_name>>
SET <<column1>> = <<value1>>,
<<column2>> = <<value2>>, ...
[WHERE <<condition>>];
-- 특정 사용자 수정
UPDATE userTBL
SET mileage = mileage + 100
WHERE id = 'U001';
-- 조건 없이 실행 (주의)
UPDATE userTBL
SET mileage = 0;
# 기본 문법
DELETE FROM <<table_name>>
[WHERE condition];
-- 조건 삭제
DELETE FROM buyTBL WHERE amount = 0;
-- 전체 삭제 (복구 가능)
DELETE FROM buyTBL;
# TRUNCATE
TRUNCATE TABLE <<table_name;
TRUNCATE 특징
# 기본 문법(최소형)
SELECT <<column_list>>
FROM <<table_name>>;
# 기본 문법(전체)
SELECT [DISTINCT] <<column_list>>
FROM <<table_name>>
[WHERE condition]
[GROUP BY column_list]
[HAVING condition]
[ORDER BY column_list [ASC|DESC]]
[LIMIT row_count];
-- 비교 연산자
SELECT * FROM userTBL WHERE age >= 25;
-- 논리 연산자
SELECT * FROM userTBL WHERE age >= 20 AND mileage >= 100;
-- 범위
SELECT * FROM userTBL WHERE age BETWEEN 20 AND 29;
-- 목록
SELECT * FROM userTBL WHERE major IN ('CS', 'NET');
-- 패턴
SELECT * FROM userTBL WHERE name LIKE '김%';
# 기본 문법
SELECT <<column>>, aggregate_function(column)
FROM <<table_name>>
GROUP BY <<column>>
HAVING [condition];
# 집계 함수
COUNT(), SUM(), AVG(), MAX(), MIN()
SELECT
major,
COUNT(*) AS cnt,
AVG(age) AS avg_age
FROM userTBL
GROUP BY major;
# 기본 문법은 Group By와 같다.
SELECT
major,
COUNT(*) AS cnt
FROM userTBL
GROUP BY major
HAVING COUNT(*) >= 2;
# 기본 문법
SELECT <<column_list>>
FROM <<table1>>
JOIN <<table2>>
ON <<table1.column>> = <<table2.column>>;
FROM A
INNER JOIN B ON 조건
SELECT
u.name,
b.productName,
b.amount * b.price AS total
FROM userTBL u
INNER JOIN buyTBL b
ON u.id = b.userID;
FROM A
LEFT JOIN B ON 조건
SELECT
u.name,
b.productName
FROM userTBL u
LEFT JOIN buyTBL b
ON u.id = b.userID;
SELECT <<column>>
FROM <<table>>
WHERE <<column>> > (
SELECT aggregate_function(column)
FROM <<table>>
);
-- 평균 나이보다 많은 사용자
SELECT name, age
FROM userTBL
WHERE age > (
SELECT AVG(age) FROM userTBL
);