sql database cheat-sheet mysql postgresql query dev-reference

최강 SQL 치트 시트: 명령어, 조인(Join), 함수 완전 가이드

개발자를 위한 포괄적인 SQL 치트 시트. SELECT, JOIN, GROUP BY 및 주요 SQL 함수를 명확한 예제와 함께 마스터하세요.

최강 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:

  1. 정규화 (Normalization): 데이터 중복을 줄입니다.
  2. 명명 규칙: 일관성 있게 소문자와 언더바(_)를 사용한 이름을 사용합니다.
  3. 기본 키 (Primary Key): 모든 테이블에는 고유 식별자가 있어야 합니다.
  4. 인덱스 활용: 읽기 속도는 빨라지지만 쓰기 속도는 느려질 수 있음을 유의하세요.

Q: SQL 인젝션이란 무엇이며 어떻게 방지하나요?

A: SQL 인젝션은 공격자가 악의적인 SQL 문을 실행할 수 있게 하는 취약점입니다. 방지 방법: 사용자 입력을 쿼리에 직접 연결하지 마세요. 프로그래밍 언어의 데이터베이스 드라이버가 제공하는 Prepared Statements(매개변수화된 쿼리)를 사용하세요.

Q: SQL 성능을 어떻게 최적화할 수 있나요?

A:

  • SELECT *를 피하고 필요한 열만 조회하세요.
  • EXPLAIN을 사용하여 쿼리 실행 계획을 분석하세요.
  • WHEREJOIN 절에 사용되는 열에 적절한 인덱스를 생성하세요.
  • JOIN이 더 효율적인 경우 서브쿼리 사용을 지양하세요.

Tool3M 관련 도구

  • SQL 포매터: SQL 쿼리를 깔끔하게 정리하고 가독성을 높여줍니다.
  • JSON을 CSV로 변환: 데이터베이스 내보내기 파일을 JSON과 CSV 형식 간에 변환합니다.