- Null 의 개념
JOIN시에도 Null 이 있는 컬럼을 사용하게 되면 비교자체가 안되기 때문에 조인될 수 없다.
NVL - ISNULL
DUAL 테이블 - SELECT 문의 FROM 절이 필요없을 때 Dummy 처럼 사용하는 테이블
SQL> ed
Wrote file afiedt.buf
1 select ename, sal, comm
2 from emp
3* where comm is NOT null
SQL> /
ENAME SAL COMM
---------- ---------- ----------
ALLEN 1600 300
WARD 1250 500
MARTIN 1250 1400
TURNER 1500 0
SQL> select ename, sal, deptno
2 from emp
3 where deptno=20
4 and ( sal = 3000 or sal = 800 )
ENAME SAL DEPTNO
---------- ---------- ----------
SMITH 800 20
SCOTT 3000 20
FORD 3000 20
SQL> ed
Wrote file afiedt.buf
1 select ename, sal, deptno
2 from emp
3 where deptno=20
4* and sal IN (3000,800)
5 /
ENAME SAL DEPTNO
---------- ---------- ----------
SMITH 800 20
SCOTT 3000 20
FORD 3000 20
SQL> ed
Wrote file afiedt.buf
1 select ename, sal, deptno
2 from emp
3 where deptno=20
4* and sal=3000 or sal=800
SQL> /
ENAME SAL DEPTNO
---------- ---------- ----------
SMITH 800 20
SCOTT 3000 20
FORD 3000 20
집합연산자는 데이터 검증 할 때 꽤 유용하게 사용할 만 하다.
집합연산자
UNION / UNION ALL / INTERSECT / MINUS
INTERSECT 교집합만 보여줌
MINUS 차집합만 보여줌
두 질의의 컬럼수가 동일해야함.
- 데이터변환
날짜 <> 문자 <> 숫자
모두 문자를 기준으로 변환이 가능하다. 날짜 → 숫자 혹은 숫자 → 날짜 변환은 불가능 하다.
대소문자 변환
INITCAP 모든 단어의 첫문자만 대문자로 나머지는 전부 소문자
UPPER 모든 문자를 대문자로
LOWER 모든 문자를 소문자
SQL> ed
Wrote file afiedt.buf
1 select UPPER(ename), LOWER(ename), INITCAP(ename) from emp
2* where empno=7979
SQL> /
UPPER(ENAM LOWER(ENAM INITCAP(EN
---------- ---------- ----------
KTMINNAME ktminname Ktminname
- 문자열길이반환 함수
LENGTH (글자 수)
LENGTHB (바이트단위)
SQL> SELECT LENGTH(ENAME), LENGTHB(ENAME), ENAME FROM EMP;
LENGTH(ENAME) LENGTHB(ENAME) ENAME
------------- -------------- ----------
5 5 KTMIN
5 9 민경_왕태
5 5 SMITH
한글은 2BYTE 로 인식하는 것은 SQL SERVER 와 동일함.
- 문자열 자르는 함수
SUBSTR - SQL SERVER와 동일함
문자열 찾는 함수
- INSTR - 문자열내에 찾고자 하는 문자가 몇번째에 있는지 반환해주는 함수 (SQL SERVER 에 있는지 체크 필요)
SQL> ed
Wrote file afiedt.buf
1* select ename, instr( ename, 'L', 2,2) from emp
SQL> /
ENAME INSTR(ENAME,'L',2,2)
---------- --------------------
KTMIN 0
민경_왕태 0
SMITH 0
ALLEN 3
- 문자열 체워주는 함수
LPAD
RPAD
SQL> select ename, LPAD(ename, 10, '-') , RPAD(ename, 10, '-') from emp;
ENAME LPAD(ENAME,10,'-') RPAD(ENAME,10,'-')
---------- -------------------- --------------------
KTMIN -----KTMIN KTMIN-----
민경_왕태 -민경_왕태 민경_왕태-
SMITH -----SMITH SMITH-----
ALLEN -----ALLEN ALLEN-----
WARD ------WARD WARD------
JONES -----JONES JONES-----
LTRIM
RTRIM
SQL> select ename, ltrim(ename, 'A') from emp;
ENAME LTRIM(ENAM
---------- ----------
KTMIN KTMIN
민경_왕태 민경_왕태
SMITH SMITH
ALLEN LLEN
ROUND 반올림
TRUNC 내림
MOD 나눈 나머지
CEIL 큰 정수 중 가장 작은 정수
FLOOR 작은 정수 중 가장 큰 정수
- 날짜 관련 함수
SYSDATE - GETDATE()
ADD_MONTHS - DATEADD
+ 연산이 먹힌다!!
SQL> select ename, hiredate, hiredate+20 from emp;
ENAME HIREDATE HIREDATE+20
---------- ------------ ------------
KTMIN 08-NOV-12 28-NOV-12
민경_왕태 08-NOV-12 28-NOV-12
SMITH 17-DEC-80 06-JAN-81
ALLEN 20-FEB-81 12-MAR-81
SQL> SELECT TO_CHAR(sysdate, 'YY/MM/DD HH24:MI:SS') HIREDATE,
TO_CHAR(ROUND(sysdate, 'dd'), 'YY/MM/DD') round_dd,
TO_CHAR(ROUND(sysdate, 'mm'), 'YY/MM/DD') round_mm,
TO_CHAR(ROUND(sysdate, 'yy'), 'YY/MM/DD') round_yy
FROM DUAL;
HIREDATE ROUND_DD ROUND_MM ROUND_YY
----------------- -------- -------- --------
12/08/14 22:09:15 12/08/15 12/08/01 13/01/01
묵시적/명시적 형 변환 SQL SERVER와 거의 유사함.
날짜출력형식을 다양하게 지정해줄 수 있다.
SQL SERVER에서는 정해진 것만 쓸수 있는 것에 반해서 다양성이 제공해줌.
TO_CHAR 에서 임의의 문자열을 넣을 때는 " " 를 사용해서 문자열 지정이 가능함
'SQL > SQL 교육' 카테고리의 다른 글
[교육] SQL초보에서실전전문가까지 ORACLE - 5 (0) | 2012.08.20 |
---|---|
[교육] SQL초보에서실전전문가까지 ORACLE - 4 (0) | 2012.08.16 |
[교육] SQL초보에서실전전문가까지 ORACLE - 2 (0) | 2012.08.10 |
[교육] SQL초보에서실전전문가까지 ORACLE - 1 (0) | 2012.08.09 |
[SQL 전문가] 제1장 데이터 모델링의 이해 (0) | 2011.09.27 |