전체 DB 조회
SHOW DATABASES;
DB 생성/선택/삭제
CREATE DATABASE [IF NOT EXISTS] db_name;
USE db_name;
DROP DATABASE [IF EXISTS] db_name;
테이블 생성
CREATE TABLE table_name (
column_name data_type [constraints],
...
);
테이블 구조 확인
DESC table_name;
테이블 변경
ALTER TABLE table_name ADD COLUMN col_name data_type [AFTER col];
ALTER TABLE table_name DROP COLUMN col_name;
ALTER TABLE table_name MODIFY COLUMN col_name new_type;
ALTER TABLE table_name CHANGE old_name new_name new_type;
기본키, AUTO_INCREMENT, UNIQUE
ALTER TABLE table_name ADD PRIMARY KEY(column);
ALTER TABLE table_name MODIFY column INT NOT NULL AUTO_INCREMENT;
ALTER TABLE table_name MODIFY column INT UNSIGNED;
DEFAULT 값 지정
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
nickname VARCHAR(100) NOT NULL,
regDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
데이터 삽입
INSERT INTO table_name SET column1 = value1, column2 = value2;
데이터 조회
SELECT * FROM table_name;
SELECT column1, column2 FROM table_name;
SELECT * FROM table_name WHERE 조건;
SELECT * FROM table_name ORDER BY col DESC LIMIT 3;
SELECT * FROM table_name LIMIT 10 OFFSET 20; -- 페이징: 21-30번째 데이터 조회
데이터 수정
UPDATE table_name SET column = value WHERE 조건;
데이터 삭제
DELETE FROM table_name WHERE 조건;
기본 조건절
WHERE col = value;
WHERE col != value;
WHERE col >= value AND col <= value;
LIKE, BETWEEN, IN, NOT IN
WHERE nickname LIKE '홍길%';
WHERE hit BETWEEN 10 AND 50;
WHERE nickname IN ('홍길동', '임꺽정');
IS NULL, IS NOT NULL
WHERE col IS NULL;
IFNULL, COALESCE
SELECT IFNULL(col, '기본값') FROM table;
SELECT COALESCE(col1, col2, '기본값'); -- NULL이 아닌 첫 번째 값을 반환
정렬
ORDER BY col [ASC|DESC];
상위 n개만 조회
LIMIT n;
페이징
LIMIT 10 OFFSET 20;
집계 함수 사용
SELECT COUNT(*), AVG(hit), SUM(hit), MAX(hit), MIN(hit) FROM article;
그룹 단위로 집계
SELECT nickname, COUNT(*) AS 게시물수
FROM article
GROUP BY nickname;
그룹 조건 지정 (HAVING)
GROUP BY nickname
HAVING 게시물수 >= 2;
중복 제거
SELECT DISTINCT nickname FROM article;
INNER JOIN 기본
SELECT A.*, B.column
FROM A
INNER JOIN B
ON A.key = B.key;
AS를 활용한 별칭
SELECT emp.id AS '사원번호', dept.name AS '부서명'
FROM emp INNER JOIN dept
ON emp.deptId = dept.id;
테이블 별칭도 지정 가능
SELECT E.id, D.name
FROM emp AS E
INNER JOIN dept AS D
ON E.deptId = D.id;
SELECT 안의 SELECT
SELECT *
FROM article
WHERE hit > (
SELECT AVG(hit) FROM article
);