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 절을 사용해 데이터를 필터링하거나, 적절한 인덱스를 활용하는 방법이 필요할 수 있습니다.

'Computer Science > DB' 카테고리의 다른 글

[MySQL] truncate(), round()  (1) 2025.02.05
SQL Joins 도식  (1) 2025.02.05
[스크랩] MySQL 함수 99개 총정리  (2) 2025.02.04
[스크랩] MySQL 완전 삭제 후 설치 방법  (0) 2025.02.03

+ Recent posts