2025-08-18 00:21

Tags: SQL

WHERE

  • 테이블의 데이터 중 원하는 조건에 맞는 데이터만 조회하고 싶을 경우 사용(엑셀의 필터기능과 유사)
  • 여러 조건 동시 전달 가능(AND와 OR로 조건 연결
  • NULL 조회 시 IS NULL / IS NOT NULL 연산자 사용 (= 연산자로 조회 불가)
  • 연산자를 사용하여 다양한 표현이 가능
  • 조건 전달 시 비교 대상의 데이터 타입 일치하는것이 좋음
    ex) EMP 테이블의 부서번호 컬럼의 데이터타입은 숫자지만 문자상수로 비교 시, 성능 문제 발생할 수 있음
  • 집계 그룹 함수 사용 불가
SELECT [DISTINCT/ALL] 칼럼명 [별칭명]
FROM 테이블명
WHERE 조건식

연산자 종류

연산자 종류설명
=같은 조건을 검색
!=, <>같지 않은 조건을 검색
>큰 조건을 검색
>=크거나 같은 조건을 검색
<작은 조건을 검색
<=작거나 같은 조건을 검색
BETWEEN a AND bA와 B 사이에 있는 범위 값을 모두 검색, 이상이하, 순서 중요
IN(a, b, c)A이나 B나 C인 조건을 검색(= OR 의 축약형)
LIKE특정 패턴을 가지고 있는 값을 검색
IS NULL / IS NOT NULLNull 값이거나 Null이 아닌 값을 검색
A AND B2개의 조건이 모두 참일 때만 참인 값을 검색
A OR B2개의 조건이 모두 거짓일 때만 참인 값을 검색
NOT AA가 아닌 모든 조건을 검색

연산자 우선순위 (NAO)

  1. 괄호
  2. 부정연산자(NOT)
  3. 비교 연산자, SQL 연산자
  4. AND
  5. OR

WHERE 과 IN

  • 특정 컬럼의 값이 지정된 목록 중에 일치하는 값 있는지 확인
SELECT * FROM EMPLOYEES
WHERE 부서 IN ('개발부', '영업부', '마케팅부');
 
SELECT * FROM EMPLOYEES
WHERE 부서 = '개발부' 
   OR 부서 = '영업부'
   OR 부서 = '마케팅부';
 
SELECT * FROM EMPLOYEES
WHERE 부서 NOT IN ('개발부', '영업부', '마케팅부');
 
-- 직업이 MANAGER이면서 부서 20이거나, 직업이 CLERK이면서 30번 부서에 속하는 사원 조회
SELECT ENAME, JOB, DEPTNO
FROM EMP
WHERE (JOB, DEPTNO) IN (('MANAGER', 20), ('CLERK', 30));
 
-- 직업이 MANAGER이거나 CLERK이면서, 20번이나 30번 부서에 속하는 사원 조회
SELECT ENAME, JOB, DEPTNO
FROM EMP
WHERE JOB IN ('MANAGER', 'CLERK') AND DEPTNO IN (20, 30);
 

WHERE 과 BETWEEN A AND B

  • A 보다 크거나 같고 B 보다 작거나 같은 조건을 만족 (반드시 A < B)
  • A와 B에는 범위로 묶을 상수값 전달(숫자, 문자, 날짜 모두 가능)
SELECT * FROM BOOKSHELT
WHERE PRICE BETWEEN 15000 AND 20000;
 
SELECT * FROM BOOKSHELT
WHERE PRICE >= 15000 AND PRICE <= 20000;
 
SELECT * FROM BOOKSHELT
WHERE PRICE NOT BETWEEN 15000 AND 20000;
 

WHERE 과 LIKE 연산자

  • 정확하게 일치하지 않아도 되는 패턴 조건 전달 시 사용
  • LIKE는 특정 패턴과 일치하는 데이터들을 조회할 때 사용
  • %와 _와 함께 사용됨
    1. % : 자리수 제한 없는 모든이라는 의미, 0개 이상의 문자
    2. _ : 하나 당 한 자리수를 의미하며 모든 값을 표현함, 1개의 문자 만 예제) LIKE 연산자
  • ENAME LIKE ‘S%’ : 이름이 S로 시작하는
  • ENAME LIKE ‘%S%’ : 이름에 S를 포함하는
  • ENAME LIKE ‘%S’ : 이름이 S로 끝나는
  • ENAME LIKE ‘_S%’ : 이름의 두 번째 글자가 S(맨 앞이 _인 것 주의! %이면 자리수 상관없이 S를 포함하기만 하면 됨)
  • ENAME LIKE ‘__S__’ : 이름의 가운데 글자가 S이며 이름의 길이가 5글자인
WHERE TITLE LIKE 'S%'
WHERE TITLE LIKE '%S%'
WHERE TITLE LIKE '%S'
WHERE TITLE LIKE 'S__'

WHERE 과 IS NULL

  • NULL값과의 수치연산은 NULL값 리턴
  • NULL값과의 비교연산은 거짓을 리턴

따라서 비교연산자 ’=’, ’>’, ’<’ 사용 시 WHERE 절의 조건이 FALSE가 되어 WHERE 절의 조건을 만족하는 데이터를 한 건도 얻지 못하게 됨
어떤 값과 비교할 수도 없으며, 특정 값보다 크다, 작다라고 표현 불가

-- 포지션이 없는 선수 조회
SELECT PLAYER_NAME, TEAM_NAME
FROM PLAYER
WHERE POSITION IS NULL;