◈ 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 |