1. SELECT 쿼리 (Data Retrieval)
SQL에서 데이터를 조회하는 가장 기본적인 구문입니다.
SELECT column1, column2, ...
FROM table_name;
- ALL: 중복을 포함하여 모든 값을 반환.
- DISTINCT: 중복을 제외하고 유니크한 값만 반환.
SELECT DISTINCT column1
FROM table_name;
2. WHERE 절 (조건 필터링)
특정 조건에 맞는 데이터를 필터링할 때 사용합니다.
SELECT column1, column2
FROM table_name
WHERE condition;
- 비교 연산자: =, !=, >, <, >=, <=
- 논리 연산자: AND, OR, NOT
- BETWEEN, IN, LIKE, IS NULL
SELECT *
FROM employees
WHERE salary BETWEEN 3000 AND 5000;
3. ORDER BY 절 (정렬)
조회된 데이터를 오름차순 또는 내림차순으로 정렬합니다.
SELECT column1, column2
FROM table_name
ORDER BY column1 [ASC|DESC];
4. LIMIT / OFFSET (결과 제한)
조회할 데이터의 개수를 제한하거나 시작 위치를 지정할 때 사용합니다.
SELECT column1
FROM table_name
LIMIT 10; -- 상위 10개 결과
- OFFSET: 조회를 시작할 위치를 지정합니다.
SELECT column1
FROM table_name
LIMIT 10 OFFSET 20; -- 20번째부터 10개 결과
5. JOIN (테이블 결합)
여러 테이블에서 데이터를 결합할 때 사용됩니다. 주로 INNER JOIN, LEFT JOIN, RIGHT JOIN 등을 사용합니다.
INNER JOIN: 두 테이블에서 일치하는 데이터만 반환합니다.
SELECT A.column1, B.column2
FROM table1 A
INNER JOIN table2 B
ON A.common_column = B.common_column;
LEFT JOIN: 왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블은 일치하는 데이터만 반환합니다. 일치하지 않는 오른쪽 테이블의 컬럼 값은 NULL입니다.
SELECT A.column1, B.column2
FROM table1 A
LEFT JOIN table2 B
ON A.common_column = B.common_column;
RIGHT JOIN: 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블은 일치하는 데이터만 반환합니다. 일치하지 않는 왼쪽 테이블의 컬럼 값은 NULL입니다.
SELECT A.column1, B.column2
FROM table1 A
RIGHT JOIN table2 B
ON A.common_column = B.common_column;
FULL OUTER JOIN: 두 테이블에서 일치하는 데이터는 물론, 일치하지 않는 데이터도 모두 반환합니다. 일치하지 않는 부분은 NULL입니다.
SELECT A.column1, B.column2
FROM table1 A
FULL OUTER JOIN table2 B
ON A.common_column = B.common_column;
6. GROUP BY 절 (그룹화)
데이터를 그룹화하여 집계 함수(Aggregate function)를 사용할 때 사용됩니다.
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1;
- 집계 함수: COUNT(), SUM(), AVG(), MIN(), MAX()
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
7. HAVING 절 (그룹화된 데이터 필터링)
GROUP BY로 그룹화된 결과에 조건을 적용할 때 사용됩니다. WHERE는 집계 전의 조건을 적용하고, HAVING은 집계 후에 조건을 적용합니다.
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;
8. INSERT INTO (데이터 삽입)
새로운 데이터를 테이블에 삽입할 때 사용합니다.
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
INSERT INTO table_name (column1, column2)
VALUES (value1, value2),
(value3, value4);
9. UPDATE (데이터 수정)
기존 데이터를 수정할 때 사용됩니다.
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
10. DELETE (데이터 삭제)
특정 데이터를 삭제할 때 사용됩니다.
DELETE FROM table_name
WHERE condition;
11. ALTER TABLE (테이블 구조 변경)
테이블의 구조를 변경할 때 사용됩니다.
ALTER TABLE table_name
ADD column_name data_type;
ALTER TABLE table_name
DROP COLUMN column_name;
ALTER TABLE table_name
RENAME COLUMN old_name TO new_name;
12. CREATE TABLE (테이블 생성)
새로운 테이블을 생성할 때 사용됩니다.
CREATE TABLE table_name (
column1 data_type,
column2 data_type,
...
);
13. DROP TABLE (테이블 삭제)
테이블을 삭제할 때 사용됩니다.
DROP TABLE table_name;
14. TRUNCATE TABLE (테이블 데이터 삭제)
테이블의 데이터를 삭제하지만 테이블 구조는 그대로 두고, DROP보다 빠르게 데이터를 삭제합니다.
TRUNCATE TABLE table_name;
15. EXISTS (서브쿼리 존재 여부 확인)
서브쿼리가 반환하는 데이터가 존재하는지 여부를 확인하는 조건입니다.
SELECT column1
FROM table_name
WHERE EXISTS (
SELECT column2
FROM another_table
WHERE condition
);
16. IN (특정 값 목록에 포함되는지 확인)
특정 값 목록 안에 값이 포함되는지 확인할 때 사용합니다.
SELECT column1
FROM table_name
WHERE column1 IN (value1, value2, value3);
17. LIKE (패턴 매칭)
문자열이 특정 패턴과 일치하는지 확인할 때 사용됩니다.
SELECT column1
FROM table_name
WHERE column1 LIKE 'pattern%'; -- %는 0개 이상의 문자와 일치
18. CASE WHEN (조건에 따른 결과 반환)
조건에 따라 다른 값을 반환할 때 사용합니다.
SELECT column1,
CASE
WHEN column2 > 100 THEN 'High'
WHEN column2 BETWEEN 50 AND 100 THEN 'Medium'
ELSE 'Low'
END AS column2_category
FROM table_name;
19. Subquery (서브쿼리)
쿼리 내에서 다른 쿼리를 실행할 수 있습니다. 서브쿼리는 WHERE, FROM, SELECT 등의 절에서 사용할 수 있습니다.
SELECT column1
FROM table_name
WHERE column2 = (SELECT MAX(column2) FROM table_name);
20. WITH (Common Table Expression, CTE)
서브쿼리를 WITH 절을 사용하여 재사용할 수 있도록 하는 방식입니다.
WITH CTE AS (
SELECT column1, column2
FROM table_name
WHERE condition
)
SELECT * FROM CTE;
SQL 문제 해결을 위한 팁
- 효율성 고려: 대용량 데이터를 다룰 때는 성능을 고려한 쿼리를 작성해야 합니다. 예를 들어, JOIN이나 WHERE 절을 사용해 데이터를 필터링하거나, 적절한 인덱스를 활용하는 방법이 필요할 수 있습니다.