• [SQLD] WHERE절

    2025. 2. 22.

    by. hyunji1109

    where 절

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

     

     

    문법

     

     

    주의사항

    • 문자나 날짜 상수 표현 시 반드시 홀따옴표 사용(다른 절에서도 동일 적용)
    • ORACLE은 문자 상수의 경우 대소문자를 구분
    • MSSQL은 기본적으로 문자상수의 대소문자를 구분하지 X

     

    ① 이름이 SMITH인 직원 조회(조건절에 문자 상수 사용)

    👉 ORACLE의 경우 테이블에 데이터는 실제로 대문자로 저장되어 있어 소문자로 조회 시 데이터 출력 안됨

     

     

    ② COMM 값이 NULL인 직원 정보 출력

    7

     

     

    ③ 여러 조건 전달 - AND 연산자의 사용

    DEPTNO가 10번이면서 SAL이 2000 이상인 직원 출력


    👉 두 조건이 모두 만족하는 대상을 찾을 경우 AND 연산자 사용

     

     

    ④ 여러 조건 전달 - OR 연산자의 사용

    DEPTNO가 10번이거나 SAL이 2000이상인 직원 정보 출력


    👉 위와 똑같은 조건이지만 두 조건을 연결하는 논리연산자를 AND(모두 만족)로 사용할 때와 결과가 다름. OR는 두 조건 중 하나만 성립해도 되는, 두 조건 결과의 합집합을 출력하는 논리연산자임

     

     

    IN 연산자

    • 포함연산자로 여러 상수와 일치하는 조건 전달 시 사용
    • 상수를 괄호로 묶어서 동시에 전달 (문자와 날짜 상수의 경우 반드시 홀따옴표와 함께)

     

    ① SMITH와 SCOTT의 직원 정보 출력


    👉 이름이 SMITH 이면서 SCOTT일 수는 없으므로 두 조건을 각각 만족하는 합집합을 구하라는 의미임. 하지만 동일한 조건대상(ENAME)이 계속 반복돼야 하는 불편함이 있음 -> IN 연산자 사용

     

     

    ② IN 연산자로 변경


    👉 IN 연산자를 사용하면 조건대상(ENAME)과 연산자(=)의 반복을 줄일 수 있음

    👉 이 때, ()안의 상수도 문자상수와 날짜상수는 홀따옴표 필수

     

     

    BETWEEN A AND B 연산자

    • A보다는 크거나 같고 B도 작거나 같은 조건을 만족
    • A와 B에는 범위로 묶을 상수값 전달 (문자,숫자,날짜 모두 전달 가능)
    • 반드시 A가 B도 작아야 함 (반대로 작성 시 아무것도 출력되지 X)

     

    ① SAL이 2000이상 3000이하인 직원 정보 출력

    👉 역시 SAL이 반복되는 특징을 보임 -> BETWEEN A AND B 연산자 사용

     

     

    ② BETWEEN 연산자 사용

    👉 BETWEEN 연산자를 사용하면 SAL에 대한 반복을 할 필요 없음

     

     

    ③ BETWEEN 연산자 주의사항


    👉 BETWEEN A AND B에서 A가 B보다 더 큰 값일 경우 아무것도 조회되지 않음

     

     

    LIKE 연산자

    • ENAME LIKE 'S%'
      • 이름이 S로 시작하는
    • ENAME LIKE '%S%'
      • 이름에 S를 포함하는
    • ENAME LIKE '%S'
      • 이름이 S로 끝나는
    • ENAME LIKE '_S%'
      • 이름의 두 번째 글자가 S인
      • 맨 앞이 _인것 주의! %이면 자리수 상관없이 S를 포함하기만 하면 됨
    • ENAME LIKE '__S__'
      • 이름의 가운데 글자가 S이며 이름의 길이가 5글자인

     

     

    NOT 연산자

    • 조건 결과의 반대집합. 즉, 여집합을 출력하는 연산자
    • NOT 뒤에 어는 연산 결과의 반대 집합 출력
    • 주로 NOT IN, NOT BETWEEN A AND B, NOT LIKE, NOT NULL로 사용

     

    ① NOT 연산자의 사용

    👉 이 경우 "3000보다 작거나 같은" 조건으로 변경 가능하므로 위처럼 NOT을 사용하지 않는다

     

    👉 1000 이상 3000 이하의 반대 집합 -> 1000 미만 또는 3000 초과

    'CS > SQL' 카테고리의 다른 글

    [SQLD] ORDER BY절  (0) 2025.02.22
    [SQLD] GROUP BY절, HAVING절  (0) 2025.02.22
    [SQLD] 함수  (0) 2025.02.21
    [SQLD] SELECT문  (0) 2025.02.20
    [SQLD] 관계형 데이터베이스  (0) 2025.02.19

    댓글