Data/Sql

[SQL] 데이터 보유 여부 확인 - In, Like, Isnull

재은초 2023. 6. 19. 11:53
반응형

In - 보유여부

  • 특정 집합에서 특정 요소가 존재하는지 확인
  • 옵티마이저 특성상 IN조건이 유리할때가 많다 (DBMS/SQL 최적화 문법)
---------- # IN: 있는 경우
SELECT
       CUSTOMER_ID
     , RENTAL_ID
     , RETURN_DATE
  FROM RENTAL
 WHERE
       CUSTOMER_ID IN (1, 2)                   -- customerid가 1 또는 2 
ORDER BY RETURN_DATE DESC
;

---------- # IN 대신 OR 사용, 동일함.
SELECT
       CUSTOMER_ID
     , RENTAL_ID
     , RETURN_DATE
  FROM RENTAL
 WHERE
       CUSTOMER_ID = 1                       -- customerid가 1 또는 2
    OR CUSTOMER_ID = 2
ORDER BY RETURN_DATE DESC
;

---------- # NOT IN: 아닌 경우
SELECT
       CUSTOMER_ID
     , RENTAL_ID
     , RETURN_DATE
  FROM RENTAL
 WHERE
       CUSTOMER_ID NOT IN (1, 2)             -- 1 또는 2가 아닌 것
ORDER BY RETURN_DATE DESC
;

---------- # NOT IN + AND (<>와 같음)
SELECT
      CUSTOMER_ID
     , RENTAL_ID
     , RETURN_DATE
  FROM RENTAL
 WHERE
       CUSTOMER_ID <> 1 
   AND CUSTOMER_ID <> 2
ORDER BY RETURN_DATE DESC
;

---------- # cast 데이터 형식 변환: cast (변환하고자 하는 데이터 AS 데이터 형식)
---------- returndate를 date 타입 변환 후 '2005-05-27'의 customer_id 불러오기
SELECT
             CUSTOMER_ID
FROM
             RENTAL
WHERE
    CAST (RETURN_DATE AS DATE) = '2005-05-27'
;

 

Like - 비슷한 패턴 출력

  • 특정 값과 유사한 패턴을 갖는 집합 출력
    • %는 어떤 문자든 가능
    • _는 한 개의 임의의 문자
---------- # LIKE 특정 패턴과 유사한 집합 출력
SELECT
      FIRST_NAME
    , LAST_NAME
 FROM
      CUSTOMER
WHERE
      FIRST_NAME LIKE 'Jen%'                -- firstname이 jen으로 시작하는
;

---------- # '%'는 어떤 문자든 가능
SELECT 'FOO' LIKE 'FOO'                    -- true
         , 'FOO' LIKE 'F%'                 -- true
         , 'FOO' LIKE '_O_'                -- true
         , 'BAR' LIKE 'B_'                 -- false
;

---------- # '-'는 한 개의 임의의 문자
SELECT
      FIRST_NAME
    , LAST_NAME
 FROM
      CUSTOMER
WHERE
      FIRST_NAME LIKE '%er%'               -- 어떤 문자든지 중간에 er 들어감
;

---------- # '-' + '%'
SELECT
      FIRST_NAME
    , LAST_NAME
 FROM
      CUSTOMER
WHERE
    FIRST_NAME LIKE '_er%'                -- 임의의 글자로 시작 중간에 er
;

---------- # NOT LIKE: 아닌 경우
SELECT
      FIRST_NAME
    , LAST_NAME
FROM
      CUSTOMER
WHERE
    FIRST_NAME NOT LIKE 'Jen%'             -- jen으로 시작하지 않는 것
;

 

Isnull - 널값확인

  • 특정 값이 Null 값인지 아닌지 판단
  • Null 값에서 연산자 = 사용 안 되고, ISNULL만 가능
---------- # Null 값에서 연산자 '=' 사용안됨
SELECT
       ID
     , FIRST_NAME
     , LAST_NAME
     , EMAIL
     , PHONE
  FROM
       CONTACTS
 WHERE PHONE = NULL
;

---------- # IS NULL
 SELECT
       ID
     , FIRST_NAME
     , LAST_NAME
     , EMAIL
     , PHONE
  FROM
       CONTACTS
WHERE PHONE IS NULL
;

---------- # IS NOT NULL: 널 값이 아니면 출력
SELECT
       ID
     , FIRST_NAME
     , LAST_NAME
     , EMAIL
     , PHONE
  FROM
       CONTACTS
WHERE PHONE IS NOT NULL
;

 

Reference

  • Fast Campus, 모두를 위한 SQL/DB 올인원 패키지 온라인 강의

 

 

반응형