SELECT column1, column2
FROM table_name
WHERE condition
ORDER BY column ASC|DESC
LIMIT n;
SELECT : 조회할 컬럼 선택FROM : 데이터를 가져올 테이블WHERE : 조건 지정ORDER BY : 정렬LIMIT : 결과 개수 제한Alias (별칭)
SELECT first_name AS name FROM employees;
SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.id;
SELECT COUNT(*), SUM(salary), AVG(salary), MIN(salary), MAX(salary)
FROM employees
WHERE department_id = 10;
COUNT() : 행 개수SUM() : 합계AVG() : 평균MIN() MAX() : 최소값, 최대값SELECT name FROM customers WHERE name LIKE 'J%'; -- J로 시작
SELECT name FROM customers WHERE name LIKE '%son'; -- son으로 끝남
SELECT name FROM customers WHERE name LIKE '_a%'; -- 두 번째 글자가 a
% : 0개 이상의 문자_ : 정확히 1개의 문자(_의 개수에 따라 뒤에 오는 문자열의 개수를 정할 수 있음)SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 5000;
GROUP BY : 그룹별 집계HAVING : 그룹 조건 SELECT department_id, job_id, SUM(salary)
FROM employees
GROUP BY ROLLUP (department_id, job_id);
SELECT department_id, job_id, SUM(salary)
FROM employees
GROUP BY CUBE (department_id, job_id);
SELECT department_id, job_id, SUM(salary)
FROM employees
GROUP BY GROUPING SETS ((department_id), (job_id), ());
ROLLUP : 소그룹 간 소계 계산CUBE : 다차원적 소계 계산GROUPING SETS : 특정 항목의 소계 계산SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
SELECT e.name, d.department_name
FROM employees e
LEFT|RIGHT JOIN departments d ON e.department_id = d.id;
SELECT e.name, d.department_name
FROM employees e
FULL OUTER JOIN departments d ON e.department_id = d.id;
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
SELECT department_id, avg_salary
FROM (
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
) t;
SELECT name, salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank_in_dept,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num,
AVG(salary) OVER (PARTITION BY department_id) AS avg_salary
FROM employees;
OVER() : 윈도우 함수 사용PARTITION BY : 전체 집합에 대해 소그룹으로 나누는 기준ORDER BY : 소그룹에 대한 정렬 기준WINDOWING : 행에 대한 범위 기준SUM() AVG() MIN() MAX()RANK() : 동일한 값에 동일한 순위 부여DENSE_RANK() : 동일한 값에 동일한 순위 부여하나 한 건으로 취급ROW_NUMBER() : 동일한 값이라도 고유한 순위 부여 (통상적으로 Primary Key 기준)FIRST_VALUE() : 조건을 만족하는 가장 첫번째 값LAST_VALUE() : 조건을 만족하는 가장 마지막 값LAG(컬럼, n) : 이전 n번째 행LEAD(컬럼, n) : 이후 n번째 행SELECT name FROM employees
UNION
SELECT name FROM customers;
SELECT name FROM employees
INTERSECT
SELECT name FROM customers;
SELECT name FROM employees
EXCEPT
SELECT name FROM customers;
UNION : 합집합 (중복 제거)UNION ALL : 합집합 (중복 허용)INTERSECT : 교집합EXCEPT : 차집합SELECT name,
CASE
WHEN salary >= 7000 THEN 'High'
WHEN salary >= 4000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
SELECT IF(salary >= 5000, 'High', 'Low') AS salary_level FROM employees;
WITH department_avg AS (
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
)
SELECT e.name, e.salary, d.avg_salary
FROM employees e
JOIN department_avg d ON e.department_id = d.department_id;
(1) DISTINCT : 결과에서 중복된 값을 제거하고 고유한 값만 반환
SELECT DISTINCT column_name FROM table;
(2) ALTER TABLE : 기존 테이블의 구조(컬럼, 제약조건 등)를 변경
ALTER TABLE employees ADD COLUMN age INT;
ALTER TABLE employees DROP COLUMN age;
(3) TRUNCATE : 테이블의 모든 데이터를 삭제하지만 구조는 유지
TRUNCATE TABLE employees;
(4) INDEX : 데이터 검색 속도를 향상시키는 구조를 생성
CREATE INDEX idx_name ON employees(name);
DROP INDEX idx_name;
(5) TRANSACTION : 여러 쿼리를 하나의 작업 단위로 묶어 원자성 보장
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 또는 ROLLBACK;
(6) COALESCE / NULLIF : NULL값 처리
SELECT COALESCE(phone, 'No phone') FROM customers;
SELECT NULLIF(a, b) FROM table;
(7) EXISTS : 서브쿼리 결과가 존재하면 TRUE 반환
SELECT name FROM employees e
WHERE EXISTS (SELECT 1 FROM departments d WHERE d.id = e.department_id);
(8) CAST : 데이터 타입 변환
SELECT CAST('2025-07-24' AS DATE);
SELECT CAST(123 AS CHAR);
(9) STRING 함수
SELECT CONCAT(first_name, ' ', last_name) AS full_name,
SUBSTRING(name, 1, 3),
UPPER(city),
LOWER(city)
FROM customers;
CONCAT() : 문자열 결합SUBSTRING() : 부분 문자열 추출 TRIM() : 문자열의 공백이나 지정한 문자를 제거 (변형 : LTRIM() RTRIM())UPPER() / LOWER() : 대문자/소문자 변환(10) DATE 함수
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 7 DAY), DATEDIFF('2025-08-01', NOW());
NOW() : 현재 날짜 및 시간DATE_ADD() : 날짜 연산DATE_DIFF() : 두 날짜의 차이| 용어 | 설명 |
|---|---|
| 데이터 (Data) | 의미 있는 정보로 가공되기 전의 값 또는 기록 |
| 데이터베이스 (Database) | 데이터를 체계적으로 저장하고 관리하는 시스템 |
| DBMS | 데이터베이스 관리 시스템 (예: MySQL, PostgreSQL, Oracle) |
| 테이블 (Table) | 행(Row)과 열(Column)로 구성된 데이터 집합 |
| 행 (Row, Record) | 테이블의 한 줄 데이터 |
| 열 (Column, Field) | 테이블에서 데이터의 속성을 나타내는 부분 |
| 스키마 (Schema) | 데이터베이스 구조(테이블, 뷰, 관계 등) 정의 |
| 데이터 타입 (Data Type) | 데이터가 저장되는 형식 (예: INT, VARCHAR, DATE) |
| 쿼리 (Query) | DB에서 데이터를 조회, 삽입, 수정, 삭제하는 명령 |
| 용어 | 설명 |
|---|---|
| PK (Primary Key) | 테이블에서 행을 고유하게 식별하는 컬럼 (NULL/중복 불가) |
| FK (Foreign Key) | 다른 테이블의 PK를 참조하는 컬럼 |
| Composite Key | 두 개 이상의 컬럼으로 구성된 PK |
| Candidate Key | PK 후보가 될 수 있는 컬럼 |
| Alternate Key | Candidate Key 중 PK로 선택되지 않은 키 |
| Super Key | 행을 유일하게 식별할 수 있는 모든 컬럼 집합 |
| 용어 | 설명 |
|---|---|
| NOT NULL | NULL 값 허용 불가 |
| UNIQUE | 중복 허용 불가 |
| CHECK | 특정 조건 만족 시 입력 가능 |
| DEFAULT | 값이 없을 때 기본값 설정 |
| Integrity | 데이터의 정확성과 일관성을 유지하는 성질 (무결성) |
| 용어 | 설명 |
|---|---|
| DDL (Data Definition Language) | 데이터 구조 정의: CREATE, ALTER, DROP |
| DML (Data Manipulation Language) | 데이터 조작: SELECT, INSERT, UPDATE, DELETE |
| DCL (Data Control Language) | 권한 제어: GRANT, REVOKE |
| TCL (Transaction Control Language) | 트랜잭션 관리: COMMIT, ROLLBACK |
| 용어 | 설명 |
|---|---|
| View | SELECT 결과를 저장하는 가상 테이블 |
| Stored Procedure | 미리 작성해 저장한 SQL 코드 블록 |
| Trigger | 특정 이벤트 발생 시 자동 실행되는 SQL 코드 |
| 용어 | 설명 |
|---|---|
| Index | 검색 성능 향상을 위한 자료구조 |
| Transaction | DB 작업의 논리적 단위 |
| ACID | 트랜잭션 4대 속성: 원자성, 일관성, 고립성, 지속성 |
| 용어 | 설명 |
|---|---|
| 정규화 (Normalization) | 데이터 중복 제거 & 무결성 유지 |
| 반정규화 (Denormalization) | 성능 향상을 위해 일부 중복 허용 |
| ERD (Entity Relationship Diagram) | 엔터티 간 관계를 시각화한 다이어그램 |
| 용어 | 설명 |
|---|---|
| Sharding | DB를 수평 분할해 성능 개선 |
| Partitioning | 테이블을 여러 부분으로 나눔 |
| Replication | 데이터를 복제해 고가용성 확보 |
| Failover | 장애 발생 시 자동 전환 |
| Batch | 대량 데이터를 일괄 처리 |