[ SQLD 필기 ] - SELECT, WHERE문이란?✏️

Mandung2·2026년 10월 10일

SQLD 자격증 도전기

목록 보기
2/6
post-thumbnail

📘 SELECT문

1) SELECT문 기본 구조

  • SELECT문은 테이블에 저장된 데이터를 조회할 때 사용한다.

SELECT [ALL | DISTINCT] 컬럼명1, 컬럼명2, ...
FROM 테이블명;

구문설명
SELECT조회할 컬럼지정
ALL중복된 행을 포함하여 조회(기본값)
DISTINCT중복된 결과 제거
*모든 컬럼 조회
FROM데이터를 조회할 테이블 지정


💡 예시

-- 모든 컬럼 조회
SELECT *
FROM EMPLOYEES;

-- 특정 컬럼 조회
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES;

-- 중복 제거
SELECT DISTINCT DEPARTMENT_ID
FROM EMPLOYEES;
  • DISTINCT는 조회 결과에서 중복된 행을 제거한다. 여러 컬럼을 함께 지정하면 해당 컬럼들의 조합이 같은 행을 중복으로 판단한다.

2) 컬럼 별칭(ALIAS)

  • 컬럼 별칭은 조회 결과에 표시할 컬럼명을 변경할 때 사용한다.

SELECT FIRST_NAME AS 이름
FROM EMPLOYEES;

  • 별칭 사용 규칙
    : 컬럼명 바로 뒤에 별칭을 작성한다.
    : AS 키워드를 사용할 수 있다.
    : 공백이나 특수문자가 포함되거나 대소문자를 구분해야 할 때는 큰따옴표(" ")를 사용한다.
-- AS 사용
SELECT FIRST_NAME AS 이름
FROM EMPLOYEES;

-- AS 생략
SELECT FIRST_NAME 이름
FROM EMPLOYEES;

-- 공백이 포함된 별칭
SELECT FIRST_NAME AS "사원 이름"
FROM EMPLOYEES;

⚠️ Oracle에서 큰따옴표는 별칭에 사용한다. 문자열 값을 표현할 때는
작은따옴표(' ')를 사용한다.

3) 합성연산자

  • 합성 연산자는 두 문자열을 하나로 연결할 때 사용한다.
구분사용 방법
oracle\\(수직 바 2개)
SQL server+
문자열 연결 함수CONCAT()

💡 Oracle 예시

SELECT FIRST_NAME || LAST_NAME AS FULL_NAME
FROM EMPLOYEES;
  • FIRST_NAME과 LAST_NAME의 문자열을 연결하여 FULL_NAME이라는 별칭으로 조회한다.

  • 공백을 넣어 이름을 연결하고 싶다면 다음과 같이 작성할 수 있다.

SELECT FIRST_NAME || ' ' || LAST_NAME AS FULL_NAME
FROM EMPLOYEES;

4) SELECT문의 논리적 실행 순서

SQL문은 작성한 순서와 실제 논리적 처리 순서가 다르다.

[실행 순서]
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY


🔎 WHERE 절

1) WHERE 절이란?

  • WHERE절은 조건에 맞는 행만 조회할 때 사용한다.

SELECT 컬럼명
FROM 테이블명
WHERE 조건식;

  • 조건식에는 일반적으로 다음과 같은 요소가 사용된다.
    : 컬럼명, 비교 연산자, 문자, 숫자 또는 표현식, 다른 컬럼과의 비교 조건

💡 예시

SELECT *
FROM EMPLOYEES
WHERE SALARY >= 3000;

//급여가 3000 이상인 행만 조회한다.

2) 비교 연산자

연산자의미
=같다
>, <크다, 작다
>=,<=크거나, 작거나 같다
!=, <>같지 않다
^=oracle에서 같지 않다

3) SQL 연산자

① BETWEEN

  • 지정한 범위에 포함되는 값을 조회한다. 양쪽 경계값을 모두 포함한다.
SELECT *
FROM EMPLOYEES
WHERE SALARY BETWEEN 2000 AND 5000;

→ 급여가 2000 이상 5000 이하인 행을 조회한다.
  • 반대 조건은 NOT BETWEEN이다.
WHERE SALARY NOT BETWEEN 2000 AND 5000;

② IN

  • 여러 값 중 하나와 일치하는 행을 조회한다.
SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (10, 20, 30);

→ 부서 번호가 10, 20, 30 중 하나인 행을 조회한다.

반대 조건은 NOT IN이다.

WHERE DEPARTMENT_ID NOT IN (10, 20, 30);

⚠️ NOT IN 목록에 NULL이 포함되면 예상과 달리 결과가 반환되지 않을 수 있으므로 주의한다.

③ LIKE

  • 문자열의 특정 패턴과 일치하는 값을 조회한다.

③ LIKE

문자열의 특정 패턴과 일치하는 값을 조회한다.

와일드카드의미
%0개 이상의 임의의 문자
_임의의 문자 1개

💡 예시

-- A로 시작하는 이름
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'A%';

-- A로 시작하고 두 번째 문자가 임의의 한 글자인 이름
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'A_%';

④ IS NULL

  • 컬럼의 값이 NULL인지 확인할 때 사용한다.
SELECT *
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL;
  • NULL은 값이 없거나 알 수 없음을 나타내므로 = NULL 또는 != NULL로 비교하지 않는다.

반대 조건은 IS NOT NULL이다.

WHERE COMMISSION_PCT IS NOT NULL;

+) Oracle에서는 길이가 0인 문자열('')을 NULL로 취급한다.

SELECT *
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL;

일반적으로 공백 한 칸인 ' '은 빈 문자열''과 다르므로 주의해야 한다.

4) 논리 연산자

연산자의미
AND두 조건을 모두 만족
OR두 조건 중 하나 이상 만족
NOT조건의 결과를 반대로 변경

💡 예시

SELECT *
FROM EMPLOYEES
WHERE SALARY >= 3000
  AND DEPARTMENT_ID = 10;

→ 급여가 3000 이상이면서 부서 번호가 10인 행을 조회한다.
  • 논리 연산자 우선순위

    NOT → AND → OR

  • 조건이 여러 개라면 괄호를 사용해 의도를 명확하게 표현할 수 있다.

5. 부정 비교 연산자와 부정 SQL 연산자

구분연산자
부정 비교 연산자!=, ^=, <>
부정 SQL 연산자NOT BETWEEN, NOT IN, NOT LIKE
NULL 부정조건IS NOT NULL

💡 예시

-- 범위에 포함되지 않는 값
WHERE SALARY NOT BETWEEN 2000 AND 5000;

-- 목록에 포함되지 않는 값
WHERE DEPARTMENT_ID NOT IN (10, 20, 30);

-- 패턴과 일치하지 않는 값
WHERE FIRST_NAME NOT LIKE 'A%';

6) CASE 표현식과 DECODE 함수

① 검색 CASE 표현식

  • 각 조건을 순서대로 확인하고, 처음으로 참인 조건의 결과를 반환한다.
SELECT SALARY,
       CASE
           WHEN SALARY >= 5000 THEN 'HIGH'
           WHEN SALARY >= 3000 THEN 'MIDDLE'
           ELSE 'LOW'
       END AS SALARY_GRADE
FROM EMPLOYEES;

② 단순 CASE 표현식

  • 하나의 표현식 값을 기준으로 여러 값과 비교한다.
SELECT DEPARTMENT_ID,
       CASE DEPARTMENT_ID
           WHEN 10 THEN 'ACCOUNTING'
           WHEN 20 THEN 'RESEARCH'
           ELSE 'OTHER'
       END AS DEPT_NAME
FROM EMPLOYEES;

③ DECODE 함수

  • Oracle에서 사용하는 조건 비교 함수로, 기준값과 비교값이 일치하는 경우 해당 결과를 반환한다.
SELECT DEPARTMENT_ID,
       DECODE(DEPARTMENT_ID,
              10, 'ACCOUNTING',
              20, 'RESEARCH',
              'OTHER') AS DEPT_NAME
FROM EMPLOYEES;

↕️ ORDER BY 절

ORDER BY란?

  • ORDER BY절은 조회 결과를 특정 컬럼이나 표현식을 기준으로 정렬한다.

  • ASC : 오름차순(기본값)

  • DESC : 내림차순

    • 숫자 : 오름차순은 작은 값부터 큰 값 순서
      문자 : 일반적으로 사전식 순서
      날짜 : 오름차순은 과거에서 미래 순서
      NULL : 오름차순-> 마지막, 내림차순 처음(최댓값 취급)
      (원하는 위치를 직접 지정할 수도 있다.)
      	```
      	-- NULL을 마지막에 정렬
      	ORDER BY COMMISSION_PCT ASC NULLS LAST;
      
      	-- NULL을 처음에 정렬
      	ORDER BY COMMISSION_PCT ASC NULLS FIRST;
    
    
    
  • 컬럼을 여러 개 지정하면 앞의 정렬 기준을 우선 적용하고, 값이 같은 경우 다음 기준으로 정렬한다.

SELECT FIRST_NAME, DEPARTMENT_ID, SALARY
FROM EMPLOYEES
ORDER BY DEPARTMENT_ID ASC, SALARY DESC;

→ 부서 번호는 오름차순, 같은 부서 안에서는 급여를 내림차순으로 정렬한다.

0개의 댓글