Menu
Coddy logo textTech

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부터 조인과 윈도우 함수까지 단계별로 안내합니다.
이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 작업(조회와 필터링)부터 고급 작업(윈도우 함수)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.
Coddy programming languages illustration

Coddy로 SQL 배우기

시작하기