LIKE : Query 조건으로 와일드카드를 사용 할 때 이용 한다. 와일드 카드인 ‘%’는 0개 이상의 문자, ‘_’(Under bar)는 한 개의 문자를 의미 한다. 또한 비교하려는 문자에 ‘%’, ‘_’등이 포함되어 있어 와일드 카드로서의 의미보다는 문자로서(리터럴값 자체)의 의미를 나타내기 위해서는 ESCAPE 옵션을 이용 한다.
2. SQL 조건연산자를 이용한 조건검색
SQL기초강좌_ 조건연산자를 이용한 조건검색
LIKE 패턴 비교,부분적으로 일치(%, _ )하면 참
IS NULL NULL 이면 참
IS NOT NULL NULL이 아니면 참
LIKE : Query 조건으로 와일드카드를 사용 할 때 이용 한다. 와일드 카드인
‘%’는 0개 이상의 문자, ‘_’(Under bar)는 한 개의 문자를 의미 한다. 또한
비교하려는 문자에 ‘%’, ‘_’등이 포함되어 있어 와일드 카드로서의 의미보다
는 문자로서(리터럴값 자체)의 의미를 나타내기 위해서는 ESCAPE 옵션을
이용 한다.
3. --아래는 이름이 S로 시작하는 사원의 이름, 급여를 선택하는 질의임.
SQL> select ename, sal from emp
where ename like 'S%';
ENAME SAL
---------- -------
SMITH 800
SCOTT 3000
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
4. --아래는 이름이 S로 시작하는 사원의 이름, 급여를 선택하는 질의임.
SQL> select ename from emp;
ENAME
----------
SMITH
……
JONES
JAMES
ADAMS
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
5. --아래는 이름이 S로 시작하는 사원의 이름, 급여를 선택하는 질의임.
SQL> select ename, sal from emp
where ename like 'J___S'; -- 언더바 3개(첫글자는 J, 이후 세 글자 오고 마지막은 S)
ENAME SAL
---------- ----------
JONES 2975
JAMES 950
SQL> insert into emp (empno, ename, sal) values (7777, 'J_SARA',700);
SQL> insert into emp (empno, ename, sal) values (7778, 'J_PAGE',800);
SQL> commit;
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
6. --아래는 이름이 S로 시작하는 사원의 이름, 급여를 선택하는 질의임.
SQL> select ename, sal from emp
where ename like 'J___S'; -- 언더바 3개(첫글자는 J, 이후 세 글자 오고 마지막은 S)
ENAME SAL
---------- ----------
JONES 2975
JAMES 950
SQL> insert into emp (empno, ename, sal) values (7777, 'J_SARA',700);
SQL> insert into emp (empno, ename, sal) values (7778, 'J_PAGE',800);
SQL> commit;
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
7. -- 이름이 J_로 시작하는 직원의 이름, 급여를 출력하세요
(잘못된 문장)
SQL> select ename, sal from emp
where ename like 'J_%';
ENAME SAL
---------- ----------
JONES 2975
JAMES 950
J_SARA 700
J_PAGE 800
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
8. -- 아래처럼 ESCAPE를 사용해야 한다.
SQL> select ename, sal from emp
where ename like 'J_%' escape '';
ENAME SAL
---------- ----------
J_SARA 700
J_PAGE 800
SQL> 2 where ename like 'J|_%' escape '|';
SQL> /
ENAME SAL
---------- ----------
J_SARA 700
J_PAGE 800
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
9. -- MYEMP1 테이블에서 이름이 ‘홍’으로 시작하는 사원들의 급여 최대값을
구하라.
SQL> SELECT MAX(SAL) FROM MYEMP1
WHERE ENAME LIKE '홍%'
MAX(SAL)
----------
5999995
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
10. SQL> select count(*) from emp
2 where comm is null;
COUNT(*)
----------
11
SQL> 2 where comm = NULL
SQL> /
COUNT(*)
----------
0
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
IS[NOT] NULL : NULL 값인지의 여부를 검사, NULL을 검사하기 위한 유일한
연산자, 원래 NULL을 가지고 어떠한 연산이라도 할 수 없다. NULL인지 비교하
기 위해 ‘=’, ‘!=’ 연산자를 이용하는 것은 잘못된 방식이다.
11. -- MYEMP1 테이블의 COMM 칼럼에 인덱스를 만들자.
SQL> CREATE INDEX IDX_MYEMP1_COMM ON MYEMP1(COMM);
-- MYEMP1 테이블에서 COMM이 NULL인 사원의 수를 출력하세요. IS
NULL은 인덱스를 사용하지 못한다. 인덱스 영역에는 NULL값은 보관하지 않
는다.
SQL> SELECT COUNT(*) FROM MYEMP1
WHERE COMM IS NULL;
COUNT(*)
----------
8333335
경 과: 00:00:16.63
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
13. -- MYEMP1 테이블에서 COMM이 NULL이 아닌 사원의 수를 출력하세요. IS
NOT NULL인 경우에는 인덱스를 사용함을 확인하고 실행시간도 위 쿼리와
비교하라.
SQL> SELECT COUNT(*) FROM MYEMP1
WHERE COMM IS NOT NULL;
COUNT(*)
---------
1666667
경 과: 00:00:00.49
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색
14. Execution Plan
----------------------------------------------------------------------------------------------
Id Operation Name Rows Bytes Cost (%CPU) Time
----------------------------------------------------------------------------------------------
0 SELECT STATEMENT 1 13 1056 00:00:13
1 SORT AGGREGATE 1 13
2 INDEX FAST FULL SCAN IDX_MYEMP1_COMM 500K 6347K 1056 00:00:13
----------------------------------------------------------------------------------------------
SQL기초강좌_ 조건연산자를 이용한 조건검색
SQL 조건연산자를 이용한 조건검색