SQL
ORACLE SQL 03) LIKE, IN
2025. 7. 28. 17:18

   <LIKE>
    비교하고자하는 컬럼값이 내가 제시한 특정 패턴에 만족할 경우 조회
    

    [표현법]
    비교한 대상 컬럼 LIKE '특정패턴' ; -> 일치하는 것만 조회


    
    특정패턴을 제시할 때 와일드카드라는 특정 패턴이 정의 되어있다.
    1. '%' : 포함문자 검색 (0글자 이상 전부 조회)
 

 EX) 비교할 대상 컬럼 LIKE "문자%" : 비교할 대상컬럼 값 중에서 해당 문자로 시작하는 값을 전부 조회
     비교할 대상 컬럼 LIKE "%문자" : 비교할 대상컬럼 값 중에서 해당 문자로 끝나는 값을 전부 조회
     비교할 대상 컬럼 LIKE "%문자%" : 비교할 대상컬럼 값 중에서 해당 문자가 포함된 값을 전부 조회


    
    2. '_' : 1글자를 대체 검색할 때 사용
   

EX) 비교할 대상 컬럼 LIKE '_문자" : 비교할 대상 컬럼 값 문자 앞에 아무 글자나 딱 한 글자 있는 값을 조회
    비교할 대상 컬럼 LIKE "문자_" : 비교할 대상 컬럼 값 문자 앞에 아무 글자나 딱 한 글자 있는 값을 조회
    비교할 대상 컬럼 LIKE "_문자_" : 비교할 대상 컬럼 값 문자 앞,뒤에 아무 글자나 딱 한 글자 있는 값을 조회
            
    비교할 대상 컬럼 LIKE '_문자___" >> 내가 원하는 형태로 _를 통해서 조회를 조절할 수 있다.

 

 

 


예시

SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';

 

'전' 이 EMP_NAME에서 맨 앞에 오는 경우를 조회

 

 

SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%연';

 

'연' 이 EMP_NAME에서 맨 끝에 오는 경우를 조회

 

 

 

SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';

 

'하' 가 EMP_NAME에 포함되는 경우를 조회

 

 

SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '_전';

 

'전' 이 EMP_NAME에 한 문자가 앞에 오는 경우가 없다.

 

 

SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '_하_';

%하% 와는 다르게, '하' 앞 뒤로 한 글자씩 있는 경우만 조회

 

 

--실습 문제

사원들 중에서 전화번호가 3번째 자리가 1인 사원들의 사번, 사원명, 전화번호 조회

SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '__1%';



-- 이메일 중 _앞의 글자가 3글자인 사원들의 사번, 이름, 이메일 조회

SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
--WHERE EMAIL LIKE '____%';  // 와일드카드로 인식되기 때문에 정상적으로 출력할 수 없다.
--와일드카드를 직접 문자로 사용할 때는 일반 문자로 구분을 해줘야한다.
-- ESCAPE OPTION을 등록해서 나만의 탈출문자를 사용할 수  있음.
WHERE EMAIL LIKE '___/_%' ESCAPE '/';

JUNG, MOON 같은 4글자는 나오지 않는다.





    <IN>
    WHERE절에 비교대상 컬럼 값을 가지고 내가 제시한 목록 중에 일치하는지 검사하는 문법
    

    [표현법]
    비교대상 컬럼 IN (값, 값, 값, 값...)




부서코드가 D6 이거나 D8 이거나 D5인 부서원들의 이름, 부서코드, 급여

SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
--WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D8' OR DEPT_CODE = 'D5';
WHERE DEPT_CODE IN ('D6', 'D8', 'D5');

D5, D6, D8만 조회된 모습




    <연산자 우선순위>
        1. 산술연산자
        2. 연결연산자
        3. 비교연산자
        4. IS NULL / LIKE / IN
        5. BETWEEN A AND B
        6. NOT 
        7. AND  
        8. OR 
    ===> 에러가 날 것 같은 연산자에는 괄호()를 잘 쳐두어 조건 구분을 잘 해두는 것이 좋다