Akashic Records

PLT 5.2 특정 행의 검색 본문

오래된글/DataBase

PLT 5.2 특정 행의 검색

Andrew's Akashic Records 2018. 4. 17. 15:45
728x90

PLT 5.2 특정 행의 검색

일반적인 경우 테이블에 있는 모든 자료를 조회할 필요 없이 사용자가 원하는 자료를 조회하는 경우가 대부분 입니다. 이러한 질의를 만족하게 하는 것이 WHERE절입니다. WHERE절은 수행될 조건 절을 포함하며 FROM절 바로 다음에 기술됩니다.

SELECT           [DISTINCT]        {*, column [alias], . . .}

            FROM             table_name

            [WHERE                     condition]

            [ORDER BY      {column, expression} [ASC | DESC]];


DISTINCT          중복 행 제거 옵션

*                      테이블의 모든 column 출력

alias                해당 column에 대한 다른 이름 부여

table_name        테이블명 질의 대상 테이블 이름

WHERE             조건을 만족하는 행들만 검색

condition           column명, 표현식, 문자 상수, 숫자 상수, 비교 연산자로 구성된다.

ORDER BY        질의 결과 정렬을 위한 옵션(ASC:오름차순(Default),DESC내림차순)

WHERE절에 사용되는 연산자

  • WHERE절을 사용하여 행들을 제한할 수 있다.

  • WHERE절은 FROM절 다음에 온다.

  • 조건은 아래의 것으로 구성된다.

       column 명, 표현식, 상수

       비교 연산자, SQL연산자, 논리연산자

       문자(Literal)

비교연산자

연산자

의   미

=

같다

>

보다 크다

>=

보다 크거나 같다

<

보다 작다

<=

보다 작거나 같다

<>, !=, ^=

같지 않다

NOT  Column_name =

같지 않다

NOT  Column_name >

보다 크지 않다


SELECT empno,ename,job,sal,hiredate,deptno

FROM emp

WHERE hiredate >= '01-JAN-82';


  • 문자 STRING과 날짜 값은 단일 인용 부호(‘ ‘)를 사용한다.

  • 문자 값은 대소문자를 구분하고 날짜 값은 날짜 형식을 구분합니다.

  • Default날짜 형식은 ‘DD-MON-YY’ 입니다.

SQL연산자

연산자

설    명

BETWEEN a AND b

a와b사이에 있다.(a, b값 포함)

IN  (list)

list의 값 중 어느 하나와 일치한다.

LIKE

문자 형태와 일치한다.(%,_사용)

IS NULL

NULL값을 가졌다.

NOT BETWEEN a AND b

a와b사이에 있지않다.(a, b값 포함하지 않음)       

NOT IN  (list)

list의 값과 일치하지 않는다..

NOT LIKE

문자 형태와 일치하지 않는다.

NOT IS NULL

NULL값을 갖지 않는다.


BETWEEN연산자

두 값의 범위에 해당하는 행을 출력하기 위해 사용한다. BETWEEN연산자를 기술할 경우 명시된 값도 포함 된다. 또한 작은 값을 앞에 기술하고 큰 값은 뒤에 기술하여야 한다.

SQL> SELECT ename,job,sal,deptno

 2 FROM emp

 3 WHERE sal BETWEEN 1300 AND 1500;

다음과 같다.

SQL> SELECT ename,job,sal,deptno

 2 FROM emp

 3 WHERE sal >= 1300 AND sal <= 1500;


IN 연산자

목록에 있는 값에 대해서 출력하기 위해 IN연산자를 사용한다.

SQL> SELECT empno,ename,job,sal,hiredate

 2 FROM emp

 3 WHERE empno IN (7902,7788,7566);

다음과 같다.

SQL> SELECT empno,ename,job,sal,hiredate

 2 FROM emp

 3 WHERE empno = 7902 OR empno = 7788 OR empno = 7566;


LIKE 연산자

  • 검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE연산자를 사용한다.

  • 검색 조건은 LITERAL 문자나 숫자를 포함할 수 있다.

  • ‘%’는 문자가 없거나 하나 이상의 문자를 ‘_’는 하나의 문자와 대치됩니다.

  • 패턴 일치 문자를 조합할 수 있습니다.

  • ‘%’나 ‘_’에 대해서 검색하기 위해서는 Escape 식별자를 이용할 수 있습니다.

name에 값이 X_Y가 포함되어 있는 문자열을 조회하고자 할 경우 Escape를 사용한다

WHERE name LIKE ‘%X_Y%’ ESCAPE ‘’;


SQL> SELECT empno,ename,job,sal,hiredate,deptno

 2 FROM emp

 3 WHERE hiredate LIKE '%82';


  • 기본 날짜 형식이 ‘YY-MM-DD’일 경우는 WHERE hiredate LIKE '82%';로 기술한다.

  • SQL> ALTER SESSION SET NLS_DATE_FORMAT = ‘YY-MM-DD’; 명령어로 연결되어 있는 SQL*Plus 창(SESSION)에서 날짜 타입을 바꿀 수 있다.

IS NULL 연산자

NULL값은 값이 없거나, 알 수 없거나, 적용할 수 없다는 의미이므로 NULL값을 조회하고자 할 경우에 사용한다.

SQL> SELECT empno,ename,job,sal,comm,deptno

 2 FROM emp

 3 WHERE comm IS NULL;


논리 연산자

NOT 연산자는 BETWEEN, LIKE, IS NULL과 같은 다른 SQL연산자와 함께 사용될 수 있습니다.

연산자

의    미

AND

양쪽 컴포넌트의 조건이 TRUE이면 TRUE를 RETURN합니다.

OR

한쪽 컴포넌트의 조건만이 TRUE이면 TRUE를 RETURN합니다

NOT

이후의 조건이 FALSE이면 TRUE를 RETURN합니다


AND연산자

AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

FALSE

NULL

NULL

FALSE

NULL


SQL> SELECT empno,ename,job,sal,hiredate,deptno

 2 FROM emp

 3 WHERE sal >= 1100 AND job = 'MANAGER';


OR 연산자

OR

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL


SQL> SELECT empno,ename,job,sal,hiredate,deptno

 2 FROM emp

 3 WHERE sal >= 1100 OR job = 'MANAGER';


NOT연산자

NOT

TRUE

FALSE

NULL

FALSE

TRUE

NULL


SQL> SELECT empno,ename,job,sal,deptno

 2 FROM emp

 3 WHERE job NOT IN ('MANAGER','CLERK','ANALYST');


우선 순위 규칙

1

괄호

2

모든 비교 연산자

3

NOT

4

AND

5

OR


SQL> SELECT empno,ename,job,sal

 2 FROM emp

 3 WHERE job = 'SALESMAN' OR job = 'PRESIDENT' AND sal > 1500;


PLT 5.3 ORDER BY절

질의 결과에 RETURN되는 행의 순서는 정의되지 않습니다. ORDER BY절은 행을 정렬하는데 사용할 수 있습니다. ORDER BY절 사용하는 경우 SELECT문의 맨 뒤에 기술되어야 합니다. 정렬을 위한 표현식이나 Alias을 명시할 수 있습니다. ORDER BY절이 사용되지 않았다면, 정렬 순서가 정의되지 않은 것이며 오라클 서버는 똑같은 질의를 두 번 실행했을 때 행을 똑같은 순서로 나타내지 않을 수도 있습니다.

SELECT           [DISTINCT]        {*, column [alias], . . .}

            FROM             table_name

            [WHERE                     condition]

            [ORDER BY      {column, expression} [ASC | DESC]];


ORDER BY        검색된 행이 출력되는 순서를 명시합니다.

ASC                 행의 오름차순 정렬(Default)

DESC               행의 내림차순 정렬

데이터의 정렬

디폴트 정렬은 오름차순입니다:

1.    숫자 값은 가장 적은 값이 먼저 출력됩니다.(예 : 1 ~ 999)

2.    날짜 값은 가장 빠른 값이 먼저 출력됩니다.(예 : 01-JAN-92 ~ 01-JAN-95)

3.    문자 값은 알파벳 순서로 출력됩니다.(예 : A ~ Z ~ a ~ z)

4.    Null값은 오름차순에서는 제일 나중에 그리고 내림차순에서는 제일 먼저 옵니다.


디폴트 순서 변경

1.    행이 디스플레이 되는 순서를 바꾸기 위해서, ORDER BY절에서 열 이름 뒤에DESC키워드를 명시해야 합니다.

SQL> SELECT hiredate,empno,ename,job,sal,deptno

 2 FROM emp

3  ORDER BY hiredate;

SQL> SELECT hiredate,empno,ename,job,sal, deptno

 2 FROM emp

3  ORDER BY hiredate DESC;

SQL> SELECT empno,ename,job,sal,sal*12 annsal

 2 FROM emp

3  ORDER BY annsal;

SQL> SELECT empno,ename,job,sal,sal*12 annsal

 2 FROM emp

3  ORDER BY sal*12;

SQL> SELECT empno,ename,job,sal,sal*12 annsal

 2 FROM emp

3  ORDER BY 5;


다중 열에 의한 정렬

  • 하나 이상의 열로 질의 결과를 정렬할 수 있습니다.

  • 주어진 테이블에 있는 개수까지만 가능합니다.

  • ORDER BY절에서 열을 명시하고, 열 이름은 콤마로 구분합니다.

  • 열의 순서를 바꾸고자 한다면 열 이름 뒤에 DESC를 명시합니다.

  • SELECT절에 포함되지 않는 열로 정렬할 수도 있습니다.

SQL> SELECT deptno,sal,empno,ename,job

 2 FROM emp

 3 ORDER BY deptno, sal DESC;

SQL> SELECT deptno,job,sal,empno,ename,hiredate

 2 FROM emp

 3 ORDER BY deptno,job,sal DESC;



728x90
Comments