Database/Oracle

[Oracle] 연산자 우선 순위

21종 2023. 6. 30. 19:02

<연산자 우선 순위>

    0. ( )
    1. 산술연산자
    2. 연결연산자
    3. 비교연산자
    4. IS NULL / LIKE '특정패턴' / IN
    5. BETWEEN A AND B
    6. NOT (논리연산자)
    7. AND (논리연산자)
    8. OR (논리연산자) --> 얘네가 중요함


직급코드가 J7이거나  J2인 사원들 중 급여가 200만원 이상인 사원들의 모든 컬럼 조회

 

SELECT *
FROM EMPLOYEE
WHERE JOB_CODE = 'J7' OR JOB_CODE = 'J2' AND SALARY >= 2000000; -- AND가 우선순위가 OR 보다 높기 때문에 이상하게 나옴

연산자 우선 순위를 고려하지 않아서 데이터가 이상하게 나온다.

 

연산자 우선 순위를 고려하여 작성해보자

SELECT *
FROM EMPLOYEE
--WHERE JOB_CODE = 'J7' OR JOB_CODE = 'J2' AND SALARY >= 2000000; -- AND가 우선순위가 OR 보다 높기 때문에 이상하게 나옴
WHERE (JOB_CODE = 'J7' OR JOB_CODE = 'J2') AND SALARY >= 2000000;

잘 나온다.


실습문제

 

1. 사수가 없고 부서배치도 받지 않은 사원들의 (사원명, 사수사번, 부서코드) 조회

SELECT EMP_NAME, MANAGER_ID, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;

 

2. 연봉(보너스미포함)이 3000만원 이상이고 보너스를 받지 않는 사원들의 (사번, 사원명, 급여, 보너스) 조회

SELECT EMP_ID, EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
WHERE SALARY * 12 >= 30000000 AND BONUS IS NULL;

 

3. 입사일이 '95/01/01'이상이고 부서배치를 받은 사원들의 (사번, 사원명, 입사일, 부서코드) 조회

SELECT EMP_ID, EMP_NAME, HIRE_DATE, DEPT_CODE
FROM EMPLOYEE
WHERE HIRE_DATE >= '95/01/01' AND DEPT_CODE IS NOT NULL;

 

4. 급여가 200만원 이상 500만원 이하이고 입사일이 '01/01/01' 이상이고 보너스를 받지 않는 사원들의
-- (사번, 사원명, 급여, 입사일, 보너스) 조회

SELECT EMP_ID, EMP_NAME, SALARY, HIRE_DATE, BONUS
FROM EMPLOYEE
WHERE SALARY BETWEEN 2000000 AND 5000000 AND HIRE_DATE >= '01/01/01' AND BONUS IS NULL;

 

5. 보너스포함 연봉이 NULL이 아니고 이름에 '하'가 포함되어있는 사원들의 (사번, 사원명, 급여, 보너스포함연봉) 조회

SELECT EMP_ID, EMP_NAME, SALARY, (SALARY + SALARY * BONUS) * 12 AS "보너스포함연봉"
FROM EMPLOYEE
WHERE (SALARY + SALARY * BONUS) * 12 IS NOT NULL AND EMP_NAME LIKE '%하%';