SQL 기본 문법 정리

예시 테이블

students 테이블

id 이름 나이 수업_id
1 John 22 1
2 Alice 25 2
3 Bob 30 1
4 Carol 22 3

courses 테이블

수업_id 수업명
1 수학
2 물리학
3 화학

SQL 기본 문법 작성 순서

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s) [ASC|DESC];

1. SELECT: 데이터를 조회하는 기본 문법

SELECT는 데이터를 조회할 때 사용하는 SQL의 가장 기본적인 문법입니다. 여러 옵션을 함께 사용할 수 있습니다.

SELECT [DISTINCT] column_name FROM table_name;
  • [DISTINCT]: 중복된 데이터를 제거하고 고유한 값만 반환합니다.

옵션

옵션 설명
DISTINCT 중복 데이터를 제거하고 고유 값을 반환

예시

SELECT DISTINCT * FROM students;

결과

id 이름 나이 수업_id
1 John 22 1
2 Alice 25 2
3 Bob 30 1
4 Carol 22 3

2. WHERE: 조건 설정

WHERE 절은 데이터를 조회할 때 조건을 설정합니다. 다양한 연산자를 활용해 원하는 데이터를 필터링할 수 있습니다.

SELECT column_name FROM table_name WHERE condition;

옵션

연산자 설명 예시
> 값이 더 큰 데이터를 조회 SELECT FROM students WHERE 나이 > 25;
= 값이 같은 데이터를 조회 SELECT FROM students WHERE 나이 = 22;
< 값이 더 작은 데이터를 조회 SELECT FROM students WHERE 나이 < 30;
<> 값이 다른 데이터를 조회 SELECT FROM students WHERE 나이 <> 25;
BETWEEN 특정 범위 안의 데이터를 조회 SELECT FROM students WHERE 나이 BETWEEN 20 AND 30;
LIKE 특정 패턴을 가진 데이터를 조회 SELECT FROM students WHERE 이름 LIKE 'A%';
IS NULL NULL 값을 가진 데이터를 조회 SELECT FROM students WHERE 나이 IS NULL;
IN 지정된 값 목록에 포함된 데이터를 조회 SELECT FROM students WHERE 수업_id IN (1, 2);
NOT IN 지정된 값 목록에 포함되지 않은 데이터를 조회 SELECT FROM students WHERE 수업_id NOT IN (1, 2);
AND 두 조건을 동시에 만족하는 데이터를 조회 SELECT FROM students WHERE 나이 > 20 AND 나이 < 30;
OR 하나 이상의 조건을 만족하는 데이터를 조회 SELECT FROM students WHERE 나이 = 22 OR 이름 = 'Bob';
NOT 조건을 부정하여 만족하지 않는 데이터를 조회 SELECT FROM students WHERE NOT (나이 > 25);

예시

SELECT 이름 FROM students WHERE 나이 BETWEEN 22 AND 25;

결과

이름
John
Alice
Carol

3. JOIN: 테이블 결합

JOIN은 여러 테이블을 결합하여 데이터를 조회할 때 사용됩니다. 주로 사용하는 INNER JOINLEFT JOIN을 통해 관련 데이터를 결합합니다.

SELECT column_name
FROM table1
INNER JOIN table2 ON table1.column = table2.column;

옵션

JOIN 종류 설명
INNER JOIN 두 테이블에서 일치하는 데이터만 반환
LEFT JOIN 왼쪽 테이블의 모든 데이터와 일치하는 오른쪽 데이터 반환
RIGHT JOIN 오른쪽 테이블의 모든 데이터와 일치하는 왼쪽 데이터 반환
FULL JOIN 두 테이블의 모든 데이터를 반환
CROSS JOIN 두 테이블의 가능한 모든 조합을 반환

예시

SELECT students.이름, courses.수업명
FROM students
INNER JOIN courses ON students.수업_id = courses.수업_id;

결과

이름 수업명
John 수학
Bob 수학
Alice 물리학
Carol 화학

4. GROUP BY와 HAVING: 그룹화 및 조건 설정

GROUP BY는 데이터를 그룹화하며 집계 함수와 함께 사용됩니다. HAVING은 그룹화된 데이터에 조건을 추가할 때 사용됩니다.

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1;

옵션

함수 설명 예시
COUNT() 특정 컬럼의 행 개수를 반환 SELECT COUNT() FROM table_name
SUM() 숫자 컬럼의 합계를 반환 SELECT SUM(price) FROM orders
AVG() 숫자 컬럼의 평균값을 반환 SELECT AVG(age) FROM employees
MIN() 특정 컬럼의 최소값을 반환 SELECT MIN(age) FROM employees
MAX() 특정 컬럼의 최대값을 반환 SELECT MAX(salary) FROM employees
GROUP_CONCAT() 그룹 내의 값을 하나의 문자열로 결합 SELECT GROUP_CONCAT(name) FROM employees

예시

SELECT courses.수업명, COUNT(*)
FROM students
INNER JOIN courses ON students.수업_id = courses.수업_id
GROUP BY students.수업_id, courses.수업명
HAVING COUNT(*) > 1;

결과

수업명 COUNT()
수학 2

5. ORDER BY: 데이터 정렬

ORDER BY는 데이터를 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 때 사용됩니다.

SELECT column_name
FROM table_name
ORDER BY column_name ASC|DESC;

옵션

옵션 설명
ASC 데이터를 오름차순으로 정렬
DESC 데이터를 내림차순으로 정렬

예시

SELECT 이름, 나이
FROM students
ORDER BY 나이 DESC;

결과

이름 나이
Bob 30
Alice 25
John 22
Carol 22
위로 스크롤