코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

SQL Select

SQL SELECT: 데이터 조회 및 필터링

SQL SELECT 문은 관계형 데이터베이스에서 데이터를 조회하기 위해 가장 많이 사용되는 명령어입니다. SELECT 문을 사용하면 특정 테이블에서 원하는 데이터를 선택하고 필터링할 수 있으며, 다양한 절을 사용하여 결과를 조작할 수 있습니다. 이 글에서는 SELECT 문법, 다양한 옵션, 그리고 실전 예제를 다루어 SQL 데이터를 효율적으로 조회하는 방법을 설명하겠습니다.

1. 기본 SELECT 문법

SQL에서 SELECT 문은 다음과 같은 기본 구조를 가집니다:

SELECT 열이름1, 열이름2, ...
FROM 테이블이름
WHERE 조건;

  • 열이름: 조회할 열(Column)의 이름을 지정합니다. 모든 열을 조회하려면 ``를 사용할 수 있습니다.
  • 테이블이름: 데이터를 조회할 테이블 이름을 지정합니다.
  • WHERE 조건: 선택적으로 조건을 지정하여 원하는 데이터만 필터링합니다.

예제:

SELECT name, salary
FROM employees
WHERE department = 'Sales';

이 쿼리는 employees 테이블에서 부서가 Sales인 직원의 이름과 급여를 조회합니다.

2. 모든 열 조회: SELECT *

모든 열을 조회하고 싶다면, *를 사용하여 테이블의 모든 열을 선택할 수 있습니다.

SELECT *
FROM employees;

위 쿼리는 employees 테이블의 모든 열과 행을 반환합니다.

3. DISTINCT: 중복 제거

DISTINCT 키워드는 중복된 값을 제거하고 고유한 값만 반환합니다.

SELECT DISTINCT department
FROM employees;

위 쿼리는 employees 테이블에서 중복을 제거한 부서 목록을 반환합니다.

4. WHERE 절: 조건 필터링

WHERE 절은 특정 조건을 만족하는 행만 조회할 때 사용됩니다. 다양한 조건을 조합하여 데이터를 필터링할 수 있습니다.

4.1 기본 비교 연산자

  • =: 같음
  • != 또는 <>: 같지 않음
  • >: 큼
  • <: 작음
  • >=: 크거나 같음
  • <=: 작거나 같음

예제:

SELECT *
FROM employees
WHERE salary > 5000;

이 쿼리는 급여가 5,000보다 큰 직원들을 조회합니다.

4.2 논리 연산자

  • AND: 두 조건이 모두 참일 때.
  • OR: 두 조건 중 하나가 참일 때.
  • NOT: 조건을 반전할 때.

예제:

SELECT *
FROM employees
WHERE salary > 5000 AND department = 'Sales';

이 쿼리는 급여가 5,000 이상이면서 부서가 Sales인 직원들을 조회합니다.

4.3 BETWEEN

BETWEEN은 값이 두 범위 사이에 있는지 확인합니다.

SELECT *
FROM employees
WHERE salary BETWEEN 3000 AND 6000;

이 쿼리는 급여가 3,000에서 6,000 사이인 직원들을 조회합니다.

4.4 IN

IN은 여러 값 중 하나가 일치하는지 확인합니다.

SELECT *
FROM employees
WHERE department IN ('Sales', 'HR');

이 쿼리는 부서가 Sales 또는 HR인 직원들을 조회합니다.

4.5 LIKE

LIKE는 문자열 패턴을 검색할 때 사용됩니다. %는 와일드카드로, 0개 이상의 임의 문자를 의미합니다.

SELECT *
FROM employees
WHERE name LIKE 'J%';

이 쿼리는 이름이 'J'로 시작하는 직원들을 조회합니다.

5. ORDER BY: 데이터 정렬

ORDER BY 절을 사용하면 쿼리 결과를 특정 열을 기준으로 정렬할 수 있습니다. 기본값은 오름차순(ASC)이며, 내림차순으로 정렬하려면 DESC 키워드를 사용합니다.

SELECT *
FROM employees
ORDER BY salary DESC;

이 쿼리는 급여를 기준으로 내림차순으로 직원 목록을 정렬합니다.

6. LIMIT: 결과 행 수 제한

LIMIT 절은 쿼리 결과에서 반환할 행의 개수를 제한할 때 사용합니다.

SELECT *
FROM employees
LIMIT 5;

이 쿼리는 employees 테이블에서 첫 5개의 행만 반환합니다.

7. GROUP BY: 그룹화

GROUP BY 절은 동일한 값을 가진 행을 그룹으로 묶어 집계 함수와 함께 사용할 수 있습니다. 집계 함수는 COUNT(), SUM(), AVG(), MAX(), MIN() 등이 있습니다.

SELECT department, AVG(salary)
FROM employees
GROUP BY department;

이 쿼리는 각 부서별 평균 급여를 계산하여 반환합니다.

8. HAVING: 그룹 조건 필터링

HAVING 절은 GROUP BY와 함께 사용하여 그룹화된 데이터에 조건을 적용합니다. WHERE 절은 행에 조건을 적용하지만, HAVING은 그룹화된 결과에 조건을 적용합니다.

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;

이 쿼리는 부서별 평균 급여가 5,000 이상인 부서만 반환합니다.

9. JOIN: 테이블 간 데이터 연결

JOIN은 여러 테이블의 데이터를 연결하여 조회할 때 사용됩니다. 가장 일반적인 조인 유형은 INNER JOINLEFT JOIN입니다.

9.1 INNER JOIN

INNER JOIN은 두 테이블 간 공통된 값을 가진 행만 반환합니다.

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;

이 쿼리는 employees 테이블과 departments 테이블을 연결하여 직원의 이름과 부서 이름을 조회합니다.

9.2 LEFT JOIN

LEFT JOIN은 왼쪽 테이블의 모든 행과, 일치하는 경우 오른쪽 테이블의 값을 반환합니다.

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;

이 쿼리는 employees 테이블의 모든 행을 반환하며, 일치하는 경우 departments 테이블에서 부서 이름을 함께 반환합니다.

10. 서브쿼리: 쿼리 안의 쿼리

서브쿼리는 쿼리 내에 포함된 또 다른 쿼리로, 주로 데이터를 필터링하거나 특정 값을 추출할 때 사용됩니다.

SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

이 쿼리는 직원 중에서 전체 평균 급여보다 높은 급여를 받는 직원들의 이름을 조회합니다.

실전 예제

예제 1: 특정 부서에서 급여가 높은 직원 조회

SELECT name, salary
FROM employees
WHERE department = 'HR'
ORDER BY salary DESC
LIMIT 3;

이 쿼리는 HR 부서에서 급여가 가장 높은 3명의 직원을 조회합니다.

예제 2: 부서별 직원 수 조회

SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

이 쿼리는 각 부서의 직원 수를 반환합니다.

요약

SQL의 SELECT 문은 데이터베이스에서 데이터를 조회하는 데 사용되며, 다양한 절(WHERE, ORDER BY, GROUP BY 등)을 통해 데이터를 필터링, 정렬, 그룹화할 수 있습니다. 또한 JOIN을 사용하여 여러 테이블의 데이터를 결합하고, LIMITDISTINCT을 통해 결과의 양과 중복을 조절할 수 있습니다. SQL의 강력한 데이터 조회 기능을 잘 활용하면 복잡한 데이터 분석 작업도 효율적으로 수행할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com