본문 바로가기

데이터베이스

[ORACLE 5일차] DML (4)

◈ SELECT문 실행 순서


SQL의 실행 순서는 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 순으로 진행된다.


* 형변환 ; 두 개의 데이터의 데이터 타입이 일치하도록 변환하는 것.

- 명시적(Explicit) 형변화과 암시적(Implicit) 형변환 


* 명시적 형변환 : 개발자가 SQL을 사용할 때 형변환 함수를 사용하는 것.

* 암시적 형변환 : 개발자가 하지 않는 경우, DBMS에서 자동으로 형변환을 하는것을 의미한다.


 DUAL 테이블

오라클 데이터베이스에 의해서 자도으로 생성되는 테이블이다.

오라클 데이터베이스 사용자가 임시로 사용할 수 있는 테이블로 내장형 함수를 실행할 때도 사용할 수 있다.

오라클 데이터베이스의 모든 사용자가 사용할 수 있다.



◈ 날짜형 함수 중에서 오늘 날짜를 구하기 위해서는 "SYSDATE"를 사용하면 된다.

   만약 해당 연도만 알고 싶다면, EXTRACT함수를 사용한다.

   TO_CHAR함수는 형변환 함수 중에서 가장 많이 사용하는 것으로 숫자나 날짜를 원하는 포맷의 문자열로 변환한다.



select sysdate, extract(YEAR from sysdate), TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;



다음과 같이 출력되는 것을 알 수 있다.




◈ DECODE문

DECODE문으로 IF문을 구현할 수 있다. 즉, 특정 조건이 참이면 A, 거짓이면 B로 응답하게 할 수 있는 것.


예를 들어,

SELECT DECODE(EMPNO,101,'TRUE','FALSE') FROM EMP;



TRUE가 출력된 것은 EMPNO가 101인 항은 TRUE로 아닌 경우는 FALSE로 SELECT한다.


◈ CASE문

CASE문은 IF~THEN~ELSE-END의 프로그래밍 언어처럼 조건문을 사용할 수 있다.

조건은 WHEN구에 사용하고 THEN은 해당 조건이 참이면 실행되고 거짓이면 ELSE구가 실행된다.


SELECT CASE

WHEN EMPNO = 101 THEN 'A'

WHEN EMPNO = 104 THEN 'B'

ELSE 'C'

END

FROM EMP;




 ROWNUM 

ROWNUM은 SELECT문의 결과에 대해서 논리적인 일렬번호를 부여한다. 

조회되는 행 수를 제한할 때 많이 사용한다.

이것을 사용함으로써 한 개의 행을 가지고 올 수 있으나, 여러 개의 행을 가지고 올 때는 인라인 뷰(Inline view)를 사용해야 한다.



SELECT * FROM EMP WHERE ROWNUM<=1;

-> 한 행을 조회한다.


SELECT * FROM EMP WHERE ROWNUM<2; 와 같이 사용할 수 있다. 쿼리문의 결과는 동일하다.




SELECT * FROM (SELECT ROWNUM list, ENAME FROM EMP) WHERE list<=3;

ROWNUM에 별칭 list를 준다.  EMP 테이블에는 총 5개의 행이 있는데, LIST가 3이하 이므로 다음과 같이 테이블이 나오게 된다. 



◈ SELECT 문의 FROM절에 SELECT문을 사용하면 Inline view라고 한다. 여러 행을 조회하기 위해서는 Inline view를 반드시 사용해야 하며,

    Inline view는 다음과 같이 ROWNUM에 별칭(list)을 사용해야 한다. 



◈ 웹 페이지의 단위 조회에서 인라인 뷰를 사용할 수 있다

SELECT * FROM (SELECT ROWNUM LIST, ENAME FROM EMP) WHERE LIST BETWEEN 5 AND 10;



◈ ROWID : 오라클 데이터베이스 내에서 데이터를 구분할 수 있는 유일한 값이다.


◈ WITH구문 

서브쿼리를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있는 구문이다.

서브쿼리 블록에 별칭을 지정할 수 있다.

옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단한다.


예를 들어, 

WITH viewData AS (SELECT * FROM EMP UNION ALL SELECT * FROM EMP) 

SELECT * FROM viewData WHERE EMPNO=101;











'데이터베이스' 카테고리의 다른 글

[ORACLE 7일차] TCL  (0) 2019.01.13
[ORACLE 6일차] DCL  (0) 2019.01.12
[ORACLE 4일차] DML (3)  (0) 2019.01.10
[ORACLE 3일차] DML (2)  (0) 2019.01.09
[ORACLE 2일차] DML (1)  (0) 2019.01.08