SQL 치트시트 + 쿼리 생성기
DBMS별 SQL 문법 레퍼런스와 CRUD 쿼리 생성기를 제공합니다.
26 개 항목
SELECT
테이블에서 데이터를 조회합니다.
SELECT col1, col2 FROM table
SELECT name, age FROM users WHERE age > 20;
WHERE
조건을 지정하여 데이터를 필터링합니다.
WHERE condition AND/OR condition
SELECT * FROM users WHERE age >= 20 AND status = 'active';
ORDER BY
결과를 정렬합니다 (오름차순/내림차순).
ORDER BY col ASC|DESC
SELECT * FROM users ORDER BY created_at DESC;
GROUP BY / HAVING
데이터를 그룹화하고 집계 조건을 지정합니다.
GROUP BY col HAVING condition
SELECT dept, COUNT(*) cnt FROM emp GROUP BY dept HAVING cnt > 5;
LIMIT / TOP / FETCH
반환할 행 수를 제한합니다 (페이징). DBMS별로 문법이 다릅니다.
LIMIT n OFFSET m
SELECT * FROM users LIMIT 10 OFFSET 20;
DISTINCT
중복을 제거한 고유한 값만 반환합니다.
SELECT DISTINCT col FROM table
SELECT DISTINCT department FROM employees;
INNER JOIN
두 테이블에서 일치하는 행만 반환합니다.
INNER JOIN t2 ON t1.col = t2.col
SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
LEFT JOIN
왼쪽 테이블의 모든 행과 일치하는 오른쪽 행을 반환합니다.
LEFT JOIN t2 ON t1.col = t2.col
SELECT u.name, o.total FROM users u LEFT JOIN orders o ON u.id = o.user_id;
RIGHT JOIN
오른쪽 테이블의 모든 행과 일치하는 왼쪽 행을 반환합니다.
RIGHT JOIN t2 ON t1.col = t2.col
SELECT o.id, u.name FROM orders o RIGHT JOIN users u ON o.user_id = u.id;
FULL OUTER JOIN
양쪽 테이블의 모든 행을 반환합니다 (일치하지 않으면 NULL).
(직접 지원 안 함 — LEFT + RIGHT UNION)
SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id=t2.id;
CROSS JOIN
두 테이블의 모든 조합(카르테시안 곱)을 반환합니다.
CROSS JOIN t2
SELECT c.name, s.size FROM colors c CROSS JOIN sizes s;
INSERT
테이블에 새 행을 삽입합니다.
INSERT INTO table (col1, col2) VALUES ('v1', 'v2')INSERT INTO users (name, email) VALUES ('홍길동', 'hong@test.com');UPDATE
기존 행의 데이터를 수정합니다.
UPDATE table SET col1 = 'v1' WHERE condition
UPDATE users SET status = 'inactive' WHERE last_login < '2025-01-01';
DELETE
테이블에서 행을 삭제합니다.
DELETE FROM table WHERE condition
DELETE FROM users WHERE status = 'deleted' AND updated_at < '2024-01-01';
UPSERT (INSERT or UPDATE)
행이 있으면 UPDATE, 없으면 INSERT합니다. DBMS별로 문법이 크게 다릅니다.
INSERT ... ON DUPLICATE KEY UPDATE col = VALUES(col)
INSERT INTO users (id, name) VALUES (1, '홍길동') ON DUPLICATE KEY UPDATE name = VALUES(name);
CREATE TABLE
새 테이블을 생성합니다. 자동 증가 ID 문법이 DBMS별로 다릅니다.
CREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
ALTER TABLE
테이블 구조를 변경합니다 (컬럼 추가/수정/삭제).
ALTER TABLE t ADD col TYPE / MODIFY col TYPE / DROP col
ALTER TABLE users ADD phone VARCHAR(20); ALTER TABLE users MODIFY name VARCHAR(200); ALTER TABLE users DROP COLUMN phone;
CREATE INDEX
인덱스를 생성하여 쿼리 성능을 향상시킵니다.
CREATE INDEX idx ON table (col)
CREATE INDEX idx_users_email ON users (email); CREATE UNIQUE INDEX idx_users_email_unique ON users (email);
문자열 함수
문자열 연결, 부분 추출, 길이, 대소문자 변환, 치환 등의 함수입니다.
CONCAT(a,b), SUBSTRING(s,pos,len), LENGTH(s), UPPER(s), LOWER(s), TRIM(s), REPLACE(s,old,new)
SELECT CONCAT(first_name, ' ', last_name) AS full_name, LENGTH(email) AS email_len FROM users;
날짜/시간 함수
현재 날짜, 날짜 연산, 포맷 변환 등의 함수입니다. DBMS별 차이가 큽니다.
NOW(), CURDATE(), DATE_ADD(d, INTERVAL n DAY), DATEDIFF(d1,d2), DATE_FORMAT(d,fmt)
SELECT NOW(), DATE_ADD(created_at, INTERVAL 30 DAY) AS expires FROM users;
집계 함수
COUNT, SUM, AVG, MAX, MIN 및 문자열 집계 함수입니다.
COUNT(*), SUM(col), AVG(col), MAX(col), MIN(col), GROUP_CONCAT(col)
SELECT dept, COUNT(*) cnt, AVG(salary) avg_sal, GROUP_CONCAT(name) names FROM emp GROUP BY dept;
변환 / NULL 처리 함수
데이터 타입 변환(CAST)과 NULL 대체(COALESCE, IFNULL, ISNULL, NVL) 함수입니다.
CAST(expr AS type), IFNULL(expr, default), COALESCE(a,b,...)
SELECT CAST(price AS DECIMAL(10,2)), IFNULL(phone, 'N/A') FROM products;
서브쿼리 / IN
SELECT 안에 SELECT를 중첩하여 조건이나 데이터로 사용합니다.
SELECT * FROM t WHERE col IN (SELECT col FROM t2)
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE total > 10000);
EXISTS
서브쿼리에 일치하는 행이 존재하는지 확인합니다 (IN보다 대량 데이터에 효율적).
WHERE EXISTS (SELECT 1 FROM t2 WHERE ...)
SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
CTE (WITH 절)
복잡한 쿼리를 읽기 쉬운 이름 붙은 임시 결과로 분리합니다.
WITH cte AS (SELECT ...) SELECT * FROM cte (8.0+)
WITH top_users AS ( SELECT user_id, SUM(total) as total_spent FROM orders GROUP BY user_id ORDER BY total_spent DESC LIMIT 10 ) SELECT u.name, t.total_spent FROM users u JOIN top_users t ON u.id = t.user_id;
윈도우 함수 (ROW_NUMBER, RANK)
GROUP BY 없이 파티션별 순위, 번호 매기기 등 고급 분석 함수입니다.
ROW_NUMBER() OVER (PARTITION BY col ORDER BY col) (8.0+)
SELECT name, dept, salary, ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) AS rn, RANK() OVER (ORDER BY salary DESC) AS rnk FROM employees;
SQL 치트시트: MySQL, PostgreSQL, SQL Server, Oracle, SQLite 5개 DBMS별로 SQL 문법 차이를 한눈에 비교할 수 있습니다. SELECT, JOIN, INSERT, UPDATE, DELETE 등 주요 문법의 DBMS별 구문과 예제를 검색하고 복사하세요. CRUD 쿼리 생성기에서는 테이블명과 컬럼을 입력하면 선택한 DBMS에 맞는 SQL 쿼리를 자동으로 생성합니다.