[오라클]AND / OR / IN() /NOT 연산자, 범위 연산자

심심이·2024년 2월 18일

oracle

목록 보기
5/40

WHERE 절의 조합 (AND / OR / IN() /NOT)

  • AND : ~이고(조건 모두 만족)

  • OR : ~가 아니면(하나 이상의 조건 만족)
    WHERE절에서 AND OR 같은 논리 연산자를 사용할때는 각 연산자를 모두 괄호로 묶어주는 것이 좋다. (AND 와 OR이 혼용되어 사용될 경우, 연산의 우선순위에 따라 AND 가 먼저 실행된다.)
    AND, OR은 != 로 NOT을 표현한다.

  • IN() : OR을 여러개 쓸 때 사용하며, 값 중 하나 이상과 일치하면 조건에 맞음

  • NOT : IN과 함께 쓰이며 열의 앞에 사용(NOT 칼럼 IN('값1','값'))
    또는 WHERE 절 바로 다음에 붙어서 WHERE절 전체를 부정할 때 사용


DESC employees;

SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE 
    department_id = 80 AND
    salary >= 10000;


    
--- employees 테이블에서 30번, 60번, 80번, null 부서에 근무하는 사원들만
--- 사원번호, 사원명, 기본급여, 부서번호를 나타내세요 

    
SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE 
    department_id IN(30,60,80) 
    OR department_id IS NULL;
    
    
--- employees 테이블에서 30번, 60번, 80번 부서에 근무하지 않는 사원들만
--- 사원번호, 사원명, 기본급여, 부서번호를 나타내세요 

SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE 
    NOT department_id IN(30,60,80) 
    OR department_id IS NULL;


범위 연산자

-- > < >= <= between A and B

  • !! 범위 연산자에 사용되는 데이터는 숫자 뿐만 아니라 문자, 날짜까지 모두 사용된다. !!

  • between A and B : A 이상 B 이하

----------------------------------- **** 범위 연산자 **** -------------------------------------
--     >   <   >=    <=   between A and B 
-- 범위 연산자에 사용되는 데이터는 숫자 뿐만 아니라 문자, 날짜까지 모두 사용된다.


-- employees 테이블에서 부서번호가 30, 50, 60번 부서에 근무하는 사원들중에 
-- 연봉(월급*12)이 20000 이상 60000 이하인 사원들만 
-- 사원번호, 사원명, 연봉(월급*12), 부서번호를 나타내어주되
-- 부서번호의 오름차순으로 정렬한 후 동일한 부서번호내에서는 연봉의 내림차순으로 나타내세요. 
    
SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    (NVL(salary + (salary * commission_pct), salary)  * 12) AS 연봉,
    department_id AS 부서번호
FROM 
    employees
WHERE 
    department_id IN(30,50,60) 
    AND (NVL(salary + (salary * commission_pct), salary)  * 12) 
    BETWEEN 20000 AND 60000
ORDER BY
    부서번호, 
    연봉 DESC;
    
------------------------------------------
        
SELECT
    first_name,
    last_name,
    salary
FROM
    employees
WHERE
        first_name >= 'J'
    AND first_name <= 'S' -- J와 S 사이의 것을 출력 (J,S 포함) 
ORDER BY
    first_name;

-------------또는 

SELECT
    first_name,
    last_name,
    salary
FROM
    employees
WHERE
    first_name BETWEEN 'J' AND 'S'
ORDER BY
    first_name;
profile
개발하는 심심이

0개의 댓글