ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] WHERE절
    RDS/Oracle 2019. 2. 24. 11:31
    반응형

    WHERE 조건절 

     - 자료를 검색할 때 SELECT절과 FROM 절만을 사용하여 기본적인 SQL 문장을 구성한다면, 테이블에 있는 모든 자료들이 결과로 출력되어 실제로 원하는 자료를 확인하기 어려울 수 있습니다.  사용자들은 자신이 원하는 자료만을 검색하기 위해서 SQL 문장에 WHERE 절을 이용하여 자료들에 대하여 제한할 수 있습니다. WHERE 절에는 두 개 이상의 테이블에 대한 조인 조건을 기술하거나 결과를 제한하기 위한 조건을 기술할 도 있습니다.

    1
    2
    3
    SELECT [DISTINCT/ALL] 컬럼명 [ALIAS명]
      FROM 테이블명
     WHERE 조건식; 
    cs

     

    조건식 구성

    1.컬럼명 (보통 조건식의 좌측에 위치)

    2.비교 연산자

    3.문자, 숫자, 표현식 (보통 조건식의 우측에 위치)

    4.비교 컬럼명 (JOIN 사용시)


    연산자의 종류

    1.비교 연산자 (부정 비교 연산자 포함)

    2.SQL 연산자 (부정 SQL 연산자 포함)

    3.논리 연산자


    연산자의 운선순위

    1.괄호 ()

    2.NOT 연산자

    3.비교 연산자, SQL 비교 연산자

    4.AND

    5.OR

     

    1.비교 연산자

     - 조건을 기술하기 위해서 =(같다), >(크다), >=(크거나 작다), <(작다), <=(작거나 같다), <>(같지 않다)와 같은 연산자가 사용되는데 이러한 연산자를 비교 연산자라고 합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -- EMP 테이블에 모든 데이터를 출력
    SELECT *
      FROM EMP;
      
    -- 부서번호가 10번인 직원
    SELECT *
      FROM EMP
     WHERE DEPTNO = 10;
     
    -- 급여가 3,000 이상인 직원
    SELECT *
      FROM EMP
     WHERE SAL >= 3000;
    cs


    문자 유형 컬럼의 경우 단일 따옴표('') 표시가 없는 경우 에러가 발생합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- 직원명이 SMITH인 직원 (단일 따옴표 미 적용)
     SELECT *
      FROM EMP
     WHERE ENAME = SMITH;
     
    -- 직원명이 SMITH인 직원 (단일 따옴표 적용)
    SELECT *
      FROM EMP
     WHERE ENAME = 'SMITH';
    cs


    2.SQL 연산자

     - SQL 연산자는 SQL문장에서 사용하도록 기본적으로 예약되어 있는 연산자로서 모든 데이터 타입에 대해서 연산이 가능한 4가지 종류가 있습니다.


    1.BETWEEN a AND b

     - a와 b의 값 사이에 있는 경우 (a와 b 값이 포함)

    2.IN(list)

     - 리스트에 있는 값 중에서 어느 하나라도 경우

    3.LIKE '비교문자열'

     - 비교 문자열과 형태가 일치하는 경우

    4.IN NULL

     - NULL 값인 경우

     

    BETWEEN a AND b 연산자

    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- 급여가 1,000과 3,000 사이에 있는 직원 
    SELECT *
      FROM EMP
     WHERE SAL >= 1000 AND SAL <= 3000;
     
    -- 급여가 1,000과 3,000 사이에 있는 직원 (BETWEEN a AND b 연산자)
    SELECT *
      FROM EMP
     WHERE SAL BETWEEN 1000 AND 3000
    cs


    IN 연산자

    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- 급여가 1,300 또는 3,000 또는 5,000 인 직원 
    SELECT *
      FROM EMP
     WHERE SAL = 1300 OR SAL = 3000 OR SAL = 5000
     
    -- 급여가 1,300 또는 3,000 또는 5,000 인 직원 (IN 연산자)
    SELECT *
      FROM EMP
     WHERE SAL IN (130030005000);
    cs


    LIKE 연산자

     - LIKE 연산자에서는 와일드카드(WildCard)를 사용할 수 있습니다. 와일드카드란 한 개 혹인 0개 이상의 문자를 대신해서 사용하기 위한 특수 문자를 의미하면, 이를 조합하여 사용하는 것도 가능하므로 SQL 문장에서 사영하는 String 값으로 사용할 수 있습니다.


    와일드 카드의 종류

    % - 0개 이상의 어떤 문자를 의미합니다.

    _ - 1개인 단일 문자를 의미합니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    -- 직원명이 A인 직원 
    SELECT *
      FROM EMP
     WHERE ENAME LIKE 'A';
     
    -- 직원명이 A로 시작하는 직원 (와일드 카드 % 사용)  
    SELECT *
      FROM EMP
     WHERE ENAME LIKE 'A%';
     
    -- 직원명에 A가 포함된 직원 (와일드 카드 % 사용)  
    SELECT *
      FROM EMP
     WHERE ENAME LIKE '%A%';
     
    -- 직원명 값에 두 번째 문자가 A인 직원 (와일드 카드 _, % 사용)  
    SELECT *
      FROM EMP
     WHERE ENAME LIKE '_A%';
    cs


    IS NULL 연산자

     - NULL은 값이 존재하지 않는 것으로 확정되지 않은 값을 표현할 때 사용합니다. 따라서 어떤 값보다 크거나 작지도 않고 ''(공백)이나 0(Zero)과 달리 비교 자체가 불가능한 값입니다.

     

    NULL 특성

     - NULL 값과의 수치연산은 NULL 값을 리턴합니다.

     - NULL 값과의 비교연산은 거짓(FALSE)을 리턴합니다.

     - 어떤 값과 비교할 수도 없으며, 특정 값보다 크다, 적다라고 표현할 수 없습니다.


     NULL 값의 비교는 비교 연산자 "=", ">", ">=", "<", "<="를 통해서 비교할 수도 없고, 만일 비교 연산을 하게 되면 결과는 거짓(FALSE)을 리턴한고, 수치 연산자(+, -, *, / 등)를 통해서 NULL 값과 연산을 하게 되면 NULL 값이 리턴합니다. NULL 값의 비교 연산은 IS NULL, IS NOT NULL 이라는 정해진 문구를 사용해야 원하는 결과를 조회할 수 있습니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- COMM에 값이 NULL 직원
    SELECT *
      FROM EMP
     WHERE COMM = NULL
     
    -- COMM에 값이 NULL 직원 (NULL 연산자) 
    SELECT *
      FROM EMP
     WHERE COMM IS NULL
    cs

     

     WHERE 절에서 COMM = NULL 을 사용한 경우 문법 에러가 발생하지는 않지만 WHERE 절의 조건이 거짓(FALSE)가 되어 WHERE 절의 조건을 만족하는 데이터를 조회할 수 없습니다.


    3.논리 연산자 

     - 비교 연산자나 SQL 연산자들로 이루어진 여러 개의 조건들을 논리적으로 연결시키기 위해서 사용되는 연산자입니다.


    1.AND

     - 앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 됩니다. 즉, 앞의 조건과 뒤의 조건을 동시에 만족해야 하는 것 입니다.

    2.OR

     - 앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 됩니다. 즉, 앞뒤의 조건 중 하나만 참(TRUE)이면 됩니다.

    3.NOT

     - 뒤에 오는 조건에 반대되는 결과를 되돌려 줍니다.

     

    AND 연산자

    1
    2
    3
    4
    5
    -- 부서번호가 10이고 직원명이 KING 직원 
    SELECT *
      FROM EMP 
     WHERE DEPTNO = 10
       AND ENAME = 'KING';
    cs


    OR 연산자

    1
    2
    3
    4
    5
    -- 부서번호가 10이거나 직원이 JOB이 MANAGER인 직원  
    SELECT *
      FROM EMP 
     WHERE DEPTNO = 10
       OR JOB = 'MANAGER';
    cs


    NOT 연산자 

    1
    2
    3
    4
    -- 부서번호가 10가 아닌 직원  
    SELECT *
      FROM EMP 
     WHERE NOT DEPTNO = 10;
    cs

     NOT 연산자는 비교 연산자(IN, LIKE, BETWEEN, NULL)들과도 함께 사용 가능합니다.  

    반응형

    댓글

Designed by Tistory.