#2-7
-Session의 default 날짜 형식을 확인해본다.
SQL> SELECT sysdate FROM dual;
SYSDATE
------------
15-AUG-16
SQL> exit
방법 1. 세션의 Default날짜 형식 변경-환경변수 사용
클라이언트 환경 cmd창
C:\Users\Administrator>SET NLS_DATE_FORMAT=YYYY-MM-DD
C:\Users\Administrator>sqlplus usera/oracle@192.168.10.11:1521/orcl.oraedu.com
SQL> SELECT sysdate FROM dual;
SYSDATE
----------
2016-08-15
방법 2. 세션의 Default날짜 형식 변경-ALTER SESSION SET명령 사용
SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-RR';
Session altered.
SQL> SELECT sysdate FROM dual;
SYSDATE
------------
15-AUG-16
입사일자가 1981년 1월 1일 이후인 사람 출력.
SQL> SELECT * FROM emp WHERE hiredate >= '01-JAN-81';
입사일자가 1981년 1월 1일 이후이고 1981년 12월 31일 이전인 사람
SQL> SELECT * FROM emp WHERE hiredate >= '01-JAN-81' AND '31-DEC-81;
아래의 방법으로도 가능 (권장사항)
SQL> SELECT * FROM emp WHERE hiredate BETWEEN '01-JAN-81' AND '31-DEC-81';
결과는 같다.
job이 'CLERK'인 사람, 'SALESMAN'인 사람, 'MANAGER'인 사람 출력
방법1.
SQL> SELECT * FROM emp WHERE job = 'CLERK' OR job = 'SALESMAN' OR job = 'MANAGER';
방법2.
SQL> SELECT * FROM emp WHERE job IN ('CLERK' , 'SALESMAN', 'MANAGER');
방법3.
SQL> SELECT * FROM emp WHERE job = 'CLERK'
UNION ALL
SELECT * FROM emp WHERE job = 'SALESMAN'
UNION ALL
SELECT * FROM emp WHERE job = 'MANAGER';
1번과 2번은 완전하게 같은 결과, 3번은 결과는 같지만 정렬은 다르다.
#2-12
테스트 테이블 t1 생성
drop table t1 purge;
create table t1 (col1 varchar2(10));
insert into t1 values('AAA');
insert into t1 values('ABA');
insert into t1 values('A_A');
insert into t1 values('A__A');
commit;
SQL> select * FROM t1;
COL1
--------------------
AAA
ABA
A_A
A__A
SQL> SELECT * FROM t1 WHERE col1 LIKE '_\_%' ESCAPE '\';
COL1
--------------------
A_A
A__A
SQL> SELECT * FROM t1 WHERE col1 LIKE '_!_%' ESCAPE '!';
COL1
--------------------
A_A
A__A
SQL> SELECT * FROM t1 WHERE col1 LIKE '_^_%' ESCAPE '^';
COL1
--------------------
A_A
A__A
입사년도에 관계없이 입사월 순으로 sort(정렬) 하기
SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MON') FROM emp ORDER BY hiredate;
입사월 순으로 정상적으로 정렬되지 않음.
SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MON') FROM emp;
SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MM') FROM emp;
SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MM') FROM emp ORDER BY TO_CHAR(hiredate, 'MM');
입사월 순으로 정상적으로 정렬됨.
# 2-22 치환변수
SQL> SELECT * FROM emp WHERE deptno = &d1;
SQL> SELECT * FROM emp WHERE deptno = &&a1;
SQL> DEFINE a1
DEFINE A1 = "20" (CHAR)
SQL> UNDEFINE a1
&변수명은
실행시에 변수명값이 있으면 값을 달라고 요구하지 않음.
실행시에 변수명값이 없으면 값을 달라고 요구하여 그 값을 받아 써먹고 변수값을 clear함.
&&변수명은
실행시에 변수명값이 있으면 값을 달라고 요구하지 않음.
실행시에 변수명값이 없으면 값을 달라고 요구하여 그 값을 받아 써먹고 변수값을 clear하지 않음.
생각해 볼 문제.
언제 &을 쓰고 언제 &&을 쓸 것인가?
※치환변수(797참조)
'ORACLE11g > SQL' 카테고리의 다른 글
[11gSQL] 4장 날짜 포맷(Date Format) (0) | 2016.09.16 |
---|---|
[11gSQL] 3장 함수 (0) | 2016.09.11 |
[11gSQL] 1장 데이터베이스 소개 (0) | 2016.08.02 |
[11gSQL] 1장 데이터를 조회해보기 (0) | 2016.08.01 |
[11gSQL] 0-1장 간단한 테스트와 login.sql파일 생성 (0) | 2016.07.31 |