SQL 치트시트
마지막 업데이트
데이터 조회 (SELECT)
SQL의 핵심: 하나 이상의 테이블에서 행을 읽습니다.
| 작업 | 문법 |
|---|---|
| 모든 컬럼 선택 | SELECT * FROM users; |
| 특정 컬럼 선택 | SELECT id, name FROM users; |
| 컬럼 이름 변경 (별칭) | SELECT name AS full_name FROM users; |
| 중복 제거 값 | SELECT DISTINCT country FROM users; |
| 행 개수 제한 | SELECT * FROM users LIMIT 10; |
| 건너뛴 후 제한 (페이징) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| 행 개수 세기 | SELECT COUNT(*) FROM users; |
행 필터링 (WHERE)
쿼리가 반환하는 행을 좁힙니다.
| 작업 | 문법 |
|---|---|
| 같음 / 비교 | WHERE age >= 18 |
| 여러 조건 | WHERE age >= 18 AND country = 'US' |
| 둘 중 하나의 조건 | WHERE role = 'admin' OR role = 'owner' |
| 집합에 포함 | WHERE country IN ('US', 'CA', 'MX') |
| 범위 사이 | WHERE price BETWEEN 10 AND 50 |
| 패턴 일치 | WHERE email LIKE '%@gmail.com' |
| null 여부 / null 아님 | WHERE deleted_at IS NULL |
| 부정 | WHERE status NOT IN ('archived') |
정렬 및 그룹화
| 작업 | 문법 |
|---|---|
| 오름차순 정렬 (기본값) | ORDER BY created_at |
| 내림차순 정렬 | ORDER BY created_at DESC |
| 여러 컬럼으로 정렬 | ORDER BY country, name DESC |
| 행 그룹화 | SELECT country, COUNT(*) FROM users GROUP BY country; |
| 그룹 필터링 | GROUP BY country HAVING COUNT(*) > 100 |
조인
일치하는 컬럼을 기준으로 두 테이블의 행을 결합합니다.
| 조인 유형 | 반환 결과 | 문법 |
|---|---|---|
| INNER JOIN | 양쪽 테이블에서 일치하는 행만 | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | 왼쪽의 모든 행 + 일치 항목 (없으면 null) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | 오른쪽의 모든 행 + 일치 항목 | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | 양쪽의 모든 행 | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | 모든 조합 (카티전 곱) | FROM sizes CROSS JOIN colors |
| 셀프 조인 | 테이블을 자기 자신과 조인 | FROM employees e JOIN employees m ON e.manager_id = m.id |
집계 함수
여러 행의 그룹에 걸쳐 단일 값을 계산합니다.
| 함수 | 기능 |
|---|---|
COUNT(*) | 행의 개수 |
COUNT(col) | null이 아닌 값의 개수 |
SUM(col) | 숫자 컬럼의 합계 |
AVG(col) | 평균값 |
MIN(col) / MAX(col) | 최솟값 / 최댓값 |
STRING_AGG(col, ',') | 값 연결 (Postgres; MySQL에서는 GROUP_CONCAT) |
윈도우 함수
행 집합 전체에 걸쳐 계산하되 하나로 합치지 않습니다.
| 함수 | 문법 |
|---|---|
| 행 번호 | ROW_NUMBER() OVER (ORDER BY score DESC) |
| 순위 (공백 포함) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| 조밀 순위 | DENSE_RANK() OVER (ORDER BY score DESC) |
| 누적 합계 | SUM(amount) OVER (ORDER BY created_at) |
| 이전 / 다음 행 | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
데이터 변경 (INSERT, UPDATE, DELETE)
| 작업 | 문법 |
|---|---|
| 행 삽입 | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| 여러 행 삽입 | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| 행 갱신 | UPDATE users SET active = true WHERE id = 1; |
| 행 삭제 | DELETE FROM users WHERE active = false; |
| 업서트 (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
테이블 정의 (DDL)
| 작업 | 문법 |
|---|---|
| 테이블 생성 | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| 컬럼 추가 | ALTER TABLE users ADD COLUMN age INTEGER; |
| 컬럼 삭제 | ALTER TABLE users DROP COLUMN age; |
| 테이블 삭제 | DROP TABLE users; |
| 인덱스 생성 | CREATE INDEX idx_users_email ON users (email); |
| 외래 키 | FOREIGN KEY (user_id) REFERENCES users (id) |
자주 쓰는 모든 SQL 문, 절, 조인을 한 페이지에 담았습니다. 이 SQL 치트시트는 관계형 데이터를 조회하고 변경하기 위한 빠른 참조 자료입니다 - SELECT 절, 네 가지 JOIN 유형, 집계, 그리고 테이블을 생성하고 갱신할 때 쓰는 DDL과 DML을 다룹니다.
여기 나오는 문법은 표준 ANSI SQL이며, 별도 표기가 없는 한 PostgreSQL, MySQL, SQLite, SQL Server에서 동작합니다. 필요한 것을 복사하거나, SQL 플레이그라운드에서 모든 쿼리를 바로 실행해 보세요 - 데이터베이스를 설치할 필요가 없습니다.
SQL 치트시트 자주 묻는 질문
이 SQL 치트시트는 무료인가요?
네. 이 SQL 치트시트는 완전히 무료이며 회원 가입이 필요 없습니다. 즐겨찾기에 추가해 두고 절, 조인, 함수를 찾아봐야 할 때마다 다시 방문하세요.
MySQL, PostgreSQL, SQLite에서 동작하나요?
대부분 그렇습니다. 여기 나오는
SELECT, WHERE, JOIN, GROUP BY, DDL 문법은 표준 ANSI SQL이며 MySQL, PostgreSQL, SQLite, SQL Server에서 동일하게 동작합니다. 일부 고급 기능은 방언(dialect)에 따라 다른데 - 업서트와 문자열 집계가 대표적입니다 - 해당 행에 차이를 표기해 두었습니다.INNER JOIN과 LEFT JOIN의 차이는 무엇인가요?
INNER JOIN은 양쪽 테이블에 모두 일치하는 행만 반환합니다. LEFT JOIN은 왼쪽(첫 번째) 테이블의 모든 행을 반환하며, 일치하는 항목이 없을 때 오른쪽 테이블의 컬럼은 NULL로 채웁니다 - 일부 사용자가 주문이 없더라도 모든 사용자를 가져오고 싶을 때 유용합니다.이 SQL 명령어들을 온라인에서 연습할 수 있나요?
네. SQL 플레이그라운드를 열어 이 치트시트의 어떤 쿼리든 브라우저에서 실제 데이터베이스로 실행해 보세요 - 설치가 필요 없습니다. 체계적으로 배우고 싶다면, Coddy의 무료 인터랙티브 SQL 강좌가
SELECT부터 조인과 윈도우 함수까지 단계별로 안내합니다.이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 작업(조회와 필터링)부터 고급 작업(윈도우 함수)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.