[SQL] 논리 연산자

·2025년 7월 2일
0

SQL

목록 보기
31/126

예제 답

select ename, sal, job
 from emp
 where job = 'SALESMAN'
    and sal >= 1200;

오라클 연산자의 종류 3가지

  1. 산술연산자: + - * /
  2. 비교연산자: >, <, >=, <=, =, !=, <>, ^=
    (!=, <>, ^= 모두 같지 않다는 뜻)
  3. 논리연산자: and, or, not

기타 비교 연산자 4가지

  1. between ..and
  2. like
  3. in
  4. is null

문제1. 직업이 SALESMAN 이거나 월급이 1200 이상인 사원들의 이름과 월급과 직업을 출력하시오

select ename, sal, job
 from emp
 where job = 'SALESMAN' or sal >= 1200;

💡 and는 조건이 전부 true여야 결과가 출력되는데
or는 조건 중 1개만 true여도 결과가 출력됨


논리연산자 and와 or에 우선순위가 있음
and가 먼저 작동됨

예제2. 아래의 SQL 2개의 결과가 서로 같을까요? 다를까요?

-- job이 ANALYST이고 sal이 2000이상인 사람 먼저
select  ename, sal, job
   from  emp
   where  job='SALESMAN'  or  job ='ANALYST'  and  sal > 2000;

-- 괄호 먼저
select  ename, sal, job
   from  emp
   where  (job='SALESMAN'  or  job ='ANALYST')  and  sal > 2000;

💡 괄호가 없는 위의 SQL에서 and와 or가 같이 있으면 and가 먼저 작동됨


문제2. 부서번호가 10번이거나 20번이고 직업이 SALESMAN 인 사원들의 이름과 월급과 직업과 부서번호를 출력하는데 or 가 먼저 수행되게 하시오

select ename, sal, job, deptno
 from emp
 where (deptno = 10 or deptno = 20)
  and job = 'SALESMAN';

문제3. 다음중 직업이 ANALYST 이거나 CLERK 이고 월급이 1200 초과하는 모든 컬럼을 출력하는 SQL을 2개를 고르시오 (sqld 기출)

( OR 가 먼저 수행되게하시오 )

SELECT * FROM EMP
     WHERE  JOB  IN ('ANALYST','CLERK') AND SAL > 1200;.SELECT * FROM EMP
      WHERE JOB = 'ANALYST' OR JOB = 'CLERK' AND SAL > 1200;SELECT * FROM EMP
      WHERE (JOB = 'ANALYST' AND SAL > 1200) OR (JOB = 'CLERK' AND SAL > 1200);SELECT * FROM EMP
     WHERE (JOB = 'ANALYST' OR JOB = 'CLERK') AND SAL > 1200;

답: ①, ④

위 문제를 이해하기 위한 SQL

explain plan for
 SELECT * FROM EMP
     WHERE  JOB  IN ('ANALYST','CLERK') AND SAL > 1200;
     
select * from table(dbms_xplan.display);
Plan hash value: 3956160932
 
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     3 |   261 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     3 |   261 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - filter(("JOB"='ANALYST' OR "JOB"='CLERK') AND "SAL">1200)
 
Note
-----
   - dynamic statistics used: dynamic sampling (level=2)

0개의 댓글