최강 SQL 치트 시트: 명령어, 조인(Join), 함수 완전 가이드
SQL(Structured Query Language)은 관계형 데이터베이스를 관리하고 조작하기 위한 표준 언어입니다. MySQL, PostgreSQL, SQL Server, SQLite 등 어떤 환경에서도 이 핵심 명령어들은 데이터베이스 상호작용의 기반이 됩니다.
이 치트 시트를 일반적인 SQL 구문과 모범 사례를 위한 빠른 참조 가이드로 활용하세요.
1. 기본 데이터 조회
가장 일반적인 SQL 작업은 테이블에서 데이터를 가져오는 것입니다.
| 명령어 | 설명 | 예시 |
|---|---|---|
SELECT |
가져올 열을 지정 | SELECT name, age |
FROM |
데이터를 가져올 테이블 지정 | FROM users |
WHERE |
조건에 따라 결과 필터링 | WHERE age > 18 |
ORDER BY |
결과 정렬 (ASC 또는 DESC) | ORDER BY created_at DESC |
LIMIT |
반환되는 행 수 제한 | LIMIT 10 |
DISTINCT |
중복을 제거한 고유 값만 반환 | SELECT DISTINCT city |
쿼리 예시:
SELECT name, email
FROM users
WHERE country = 'KR'
ORDER BY name ASC
LIMIT 5;
2. SQL 조인(Joins): 데이터 결합
조인을 사용하면 연관된 열을 바탕으로 여러 테이블에서 데이터를 가져올 수 있습니다.
- INNER JOIN: 두 테이블 모두에 일치하는 항목이 있는 행을 반환합니다.
- LEFT (OUTER) JOIN: 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환합니다.
- RIGHT (OUTER) JOIN: 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환합니다.
- FULL (OUTER) JOIN: 어느 한 테이블에라도 일치하는 항목이 있으면 행을 반환합니다.
조인 예시:
SELECT orders.id, users.name
FROM orders
INNER JOIN users ON orders.user_id = users.id;
3. 집계 및 그룹화
집계 함수는 값 세트에 대해 계산을 수행하고 단일 값을 반환합니다.
| 함수 | 설명 |
|---|---|
COUNT() |
행 수 반환 |
SUM() |
숫자 열의 총합 반환 |
AVG() |
평균값 반환 |
MIN() |
최솟값 반환 |
MAX() |
최댓값 반환 |
GROUP BY 및 HAVING:
GROUP BY는 집계 함수와 함께 사용되어 하나 이상의 열을 기준으로 결과를 그룹화합니다. HAVING은 그룹화된 결과를 필터링하는 데 사용됩니다.
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
4. 데이터 조작 (DML)
데이터를 추가, 수정, 삭제하기 위한 명령어입니다.
- INSERT: 새로운 행 추가.
INSERT INTO users (name, email) VALUES ('홍길동', '[email protected]'); - UPDATE: 기존 행 수정.
UPDATE users SET email = '[email protected]' WHERE id = 1; - DELETE: 행 삭제.
DELETE FROM users WHERE id = 1;
5. 스키마 정의 (DDL)
데이터베이스 구조를 정의하고 관리하기 위한 명령어입니다.
- CREATE TABLE: 새로운 테이블 생성.
CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2) ); - ALTER TABLE: 기존 테이블 구조 수정 (열 추가/삭제).
ALTER TABLE users ADD last_login TIMESTAMP; - DROP TABLE: 테이블과 모든 데이터 삭제.
DROP TABLE temp_data; - Indexes (인덱스): 데이터 조회 속도를 높이는 데 사용됩니다.
CREATE INDEX idx_user_email ON users(email);
자주 묻는 질문 (FAQ)
Q: SQL과 NoSQL 중 무엇을 선택해야 하나요?
A: 데이터가 구조화되어 있고, 복잡한 조인이 필요하며, ACID 준수가 우선순위라면 SQL(관계형)을 사용하세요. 비구조화된 데이터, 높은 확장성 요구사항, 스키마가 자주 바뀌는 빠른 개발 주기가 중요하다면 NoSQL(비관계형)을 사용하세요.
Q: 데이터베이스 설계의 모범 사례는 무엇인가요?
A:
- 정규화 (Normalization): 데이터 중복을 줄입니다.
- 명명 규칙: 일관성 있게 소문자와 언더바(_)를 사용한 이름을 사용합니다.
- 기본 키 (Primary Key): 모든 테이블에는 고유 식별자가 있어야 합니다.
- 인덱스 활용: 읽기 속도는 빨라지지만 쓰기 속도는 느려질 수 있음을 유의하세요.
Q: SQL 인젝션이란 무엇이며 어떻게 방지하나요?
A: SQL 인젝션은 공격자가 악의적인 SQL 문을 실행할 수 있게 하는 취약점입니다. 방지 방법: 사용자 입력을 쿼리에 직접 연결하지 마세요. 프로그래밍 언어의 데이터베이스 드라이버가 제공하는 Prepared Statements(매개변수화된 쿼리)를 사용하세요.
Q: SQL 성능을 어떻게 최적화할 수 있나요?
A:
SELECT *를 피하고 필요한 열만 조회하세요.EXPLAIN을 사용하여 쿼리 실행 계획을 분석하세요.WHERE및JOIN절에 사용되는 열에 적절한 인덱스를 생성하세요.JOIN이 더 효율적인 경우 서브쿼리 사용을 지양하세요.
Tool3M 관련 도구
- SQL 포매터: SQL 쿼리를 깔끔하게 정리하고 가독성을 높여줍니다.
- JSON을 CSV로 변환: 데이터베이스 내보내기 파일을 JSON과 CSV 형식 간에 변환합니다.