WHERE


WHERE 절을 사용하지 않으면 FROM 절에 명시된 table의 모든 row를 조회하게 된다.

Table 내의 특정 row만 선택하고 싶을 때 WHERE 절에 조건식(condition)을 써준다.

Oracle server는 Table의 row를 하나씩 읽어 WHERE 절의 조건식을 평가하여 TRUE로 만족하는 것만을 선택한다.

Condition을 평가한 결과는 TRUE, FALSE, NULL 중의 하나이다.

emp 테이블에 ename 이 SMITH이면 즉 TRUE이면 해당 행을 띄워줘라.

select *
from emp
where ename = 'SMITH'



Date값은 현재 session의 nls_date_format에 맞춰 표현해 준다.

형식에 맞게

                      맞지않게

이렇게 포맷이 맞지않으면 오류가 난다.



비교 연산자 중에서 같지 않음을 나타내는 <> 연산자는 모든 운영체제에서 사용 가능하며, 운영 체제 종류에 따라 != 나 ^= 도 사용될 수 있다.


EMP테이블 열이름 - EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO

DEPT테이블 열이름 -   DEPTNO, DNAME          LOC

<문제>

사번이 7788인 사원의 이름과 급여를 출력하시오.
급여가 3000 이 넘는 직종을 출력하시오
PRESIDENT 를 제외한 사원들의 이름과 직종을 출력하시오.
BOSTON 지역에 있는 부서의 번호와 이름을 출력하시오.

Date 값에 대해 조건을 줄 때는 현재 session의 NLS_DATE_FORMAT에 맞춰 주도록 한다.
SQL> SELECT value FROM nls_session_parameters
WHERE parameter = 'NLS_DATE_FORMAT';
SQL> ALTER SESSION SET nls_date_format = 'DD-MON-RR';
SQL> SELECT empno, ename FROM emp WHERE hiredate >= '01-JAN-82';
SQL> ALTER SESSION SET nls_date_format = 'RR/MM/DD';
SQL> SELECT empno, ename FROM emp WHERE hiredate >= '82/01/01';



IN
select * from emp
where sal in(800, 1500, 3000) 800, 1500, 3000인 값들을 찾아줌

ANY
 select * from emp
 where sal <ANY(800, 1500) 800보다 작은 행들 1500보다작은 행들을 찾아줌

ALL
 select * from emp
where sal >ALL(800, 1500)  1500보다 큰 행들을 찾아준다.


ANY와 ALL 연산자의 앞에 비교연산자가 반드시 함께 쓰여야 한다.
IN 연산자는 =ANY 연산자와 같은 결과이다.
NOT IN 연산자는 <>ALL 연산자와 같은 결과이다.

BETWEEN

select *
from emp
where sal between 1000 and 2000  1000과 2000사이의 sal이 있는 값을 가져와라.

LIKE

 select *
 from emp
 where ename like 'S%'  대문자 S로 시작하는 사람

 select *
 from emp
 where ename like '%S'  대문자 S로 끝나는 사람

 
  1 select *
  2  from emp
  3* where comm = NULL
SQL> /
선택된 레코드가 없습니다.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
  1  select *
  2  from emp
  3* where comm is NULL
SQL> /
     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20
      7566 JONES      MANAGER         7839 81/04/02       2975                    20
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10
      7788 SCOTT      ANALYST         7566 87/04/19       3000                    20
      7839 KING       PRESIDENT            81/11/17       5000                    10
      7876 ADAMS      CLERK           7788 87/05/23       1100                    20
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7902 FORD       ANALYST         7566 81/12/03       3000                    20
      7934 MILLER     CLERK           7782 82/01/23       1300                    10
10 개의 행이 선택되었습니다.

comm = NULL 은 허용 안되고 comm is NULL로 하여야 한다. 반대일때는 coom is NOT NULL


 1  select *
 2  from emp
 3* where hiredate like '%03%'  //03 뒤에 NULL값이 오므로 정상적으로 03이 검색된다.
SQL> /
     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7902 FORD       ANALYST         7566 81/12/03       3000                    20
SQL> ed
file afiedt.buf(이)가 기록되었습니다
  1  select *
  2  from emp
  3* where hiredate like '%03' //찾는 값이 맨 앞에 03이 아니면 꼭 시작할 때 %붙여주자.
SQL> /
     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7902 FORD       ANALYST         7566 81/12/03       3000                    20




정리
Wildcard ‘%’는 0개 이상의 문자를 대표한다.
Wildcard ‘_’는 1개의 문자를 대표한다.
Wildcard 문자를 일반 문자로 사용하고 싶을 때 ESCAPE 문자를 사용한다. ESCAPE 문자 바로 뒤에 사용된 wildcard 문자는 일반 문자로 인식된다.
Column의 Null여부를 판단할 때는 반드시 ‘IS NULL’ 혹은 ‘IS NOT NULL’ 연산자를 사용해야 한다.




연산자 우선순위




논리 연산 진리표




ORDER BY


ORDER BY 절에 정렬의 기준이 되는 column을 여러 개 명시할 수 있다. Oracle은 첫 번째 column으로 정렬한 다음, 그 column 값이 같은 row들에 대해서는 두 번째 column값으로 정렬을 해준다.

오름차 순(ASC) 정렬이 default이며, 내림차 순으로 정렬하고자 할 때는 DESC 라는 옵션을 명시해 준다.

ORDER BY 절에 column 명 대신 positional notation을 사용할 수도 있다. Position number는 SELECT절의 column 순서를 의미한다.

  1  SELECT *
  2  FROM emp
  3* order by sal desc, ename
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7839 KING       PRESIDENT            81/11/17       5000                    10
      7902 FORD       ANALYST         7566 81/12/03       3000                    20
      7788 SCOTT      ANALYST         7566 87/04/19       3000                    20
      7566 JONES      MANAGER         7839 81/04/02       2975                    20
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
      7934 MILLER     CLERK           7782 82/01/23       1300                    10
      7654 MARTIN     SALESMAN        7698 81/09/28       1250       1400         30
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
      7876 ADAMS      CLERK           7788 87/05/23       1100                    20
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7369 SMITH      CLERK           7902 80/12/17        800                    20


sal을 기준으로 내림차순하여 정렬하고 그 다음 ename을 기준으로 오름차순 정렬한다.


SQL> SELECT ename, sal FROM emp ORDER BY 2 DESC, 1;
두번째 열을 내림차순으로 첫번째 열을 오름차순으로 정렬한다.


'프로그래밍 기초 > 오라클' 카테고리의 다른 글

Advanced Query  (0) 2010.02.25
Single-Row Functions  (0) 2010.02.24
기본쿼리2  (0) 2010.02.24
기본쿼리  (1) 2010.02.23
SQL문 정리  (0) 2010.02.22
Database System  (0) 2010.02.22
Posted by 아몰라
TAG ,

댓글을 달아 주세요