예시 테이블
students 테이블
| id | 이름 | 나이 | 수업_id |
|---|
| 1 | John | 22 | 1 |
| 2 | Alice | 25 | 2 |
| 3 | Bob | 30 | 1 |
| 4 | Carol | 22 | 3 |
courses 테이블
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;
결과
3. JOIN: 테이블 결합
JOIN은 여러 테이블을 결합하여 데이터를 조회할 때 사용됩니다. 주로 사용하는 INNER JOIN과 LEFT 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;
결과
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 |