- 4장은 P2-36 'For Lab' 수행후에~
- // 일단 system계정으로 접속~
- SQL> conn system/system
Connected. - // ID/PW = test00/test00인 계정 생성
SQL> CREATE USER test00 IDENTIFIED BY test00; - User created.
- // test00 계정에게 권한 부여
- SQL> GRANT resource, connect TO test00;
- Grant succeeded.
- // test00 계정으로 재접속
- SQL> conn test00/test00;
Connected. - // ALTER SESSION SET -> 현재 세션과 관련된 정보 변경 (summit2.sql 파일의 내용과 맞추려고??)
- // 날짜 형식 변경
- SQL> ALTER SESSION SET nls_date_format = 'DD-MON-RR';
- Session altered.
- // 언어 변경
- SQL> ALTER SESSION SET nls_language = 'ENGLISH';
- Session altered.
- // summit2.sql 파일 이용해서 테이블 생성
- SQL> @D:\비트교육센터\Oracle\Oracle_1\summit2.sql
- Creating and populating tables and sequences. Please wait.
Tables and sequences created and populated. - / // 25개가 나와야 함~
- SQL> SELECT COUNT(*) FROM s_emp;
- COUNT(*)
----------
25 - 1 row selected.
- // 12개가 나와야 함~
- SQL> SELECT COUNT(*) FROM s_dept;
- COUNT(*)
----------
12 - 1 row selected.
- // 날짜 형식 원래으로 변경
- SQL> ALTER SESSION SET nls_date_format = 'RR/MM/DD';
- Session altered.
Table Alias(cont.) (P4-5)
- column이 어느 table 소속인지를 명확히 하기 위해 아래와 같인 WHERE절을 수정해준다.
- // 아래 구문은 에러남~ id가 s_dept 소속인지 s_emp 소속인지 모름
- SQL> SELECT * FROM s_dept, s_emp WHERE id = dept_id;
- // id가 어디 소속인지 명시적으로 표혐~ 에러 안남~
- SQL> SELECT * FROM s_dept, s_emp WHERE s_dept.id = s_emp.dept_id;
- 복잡한 SELECT 문장을 작성하는 경우, 또는 table 명이 길어서 불편하거나, 또는 동일한 table을 두 번 이상 FROM 절에 사용하는 경우 등에는 table alias를 쓰도록 한다.
- SQL> SELECT *
2 FROM s_dept d, s_emp e
3 WHERE d.id = e.dept_id;
Equijoin(cont.) (P4-7)
- 사원 이름과 부서명 출력~(해당 사원이 소속된 부서~)
- SQL> conn scott/tiger
Connected.
SQL> SELECT ename, dname
2 FROM emp, dept
3 WHERE emp.deptno = dept.deptno; - ENAME DNAME
---------- --------------
CLARK ACCOUNTING
KING ACCOUNTING
MILLER ACCOUNTING
SMITH RESEARCH
ADAMS RESEARCH
FORD RESEARCH
SCOTT RESEARCH
JONES RESEARCH
ALLEN SALES
BLAKE SALES
MARTIN SALES - JAMES SALES
TURNER SALES
WARD SALES - 14 rows selected.
Non-equijoin(cont.) (P4-9)
- Equal(=)이외의 연산자를 사용하여 join condition을 작성한 경우 non-equijoin이라고 함
- 사원의 이름과 직종, 급여 그리고 급여의 등급을 출력하시오.
- SQL> conn scott/tiger;
Connected.
SQL> SELECT e.ename, e.job, e.sal, s.grade
2 FROM emp e, salgrade s
3 WHERE e.sal BETWEEN s.losal AND s.hisal; // WHERE 조건이 없으면 Table1.데이터 갯수 * Table2.데이터 갯수 -> Cartesian Product라고 함(p4-1) -> 성능, 메모리 등에 영향을 끼침- ENAME JOB SAL GRADE
---------- --------- ---------- ----------
SMITH CLERK 800 1
JAMES CLERK 950 1
ADAMS CLERK 1100 1
WARD SALESMAN 1250 2
MARTIN SALESMAN 1250 2
MILLER CLERK 1300 2
TURNER SALESMAN 1500 3
ALLEN SALESMAN 1600 3
CLARK MANAGER 2450 4
BLAKE MANAGER 2850 4
JONES MANAGER 2975 4 - SCOTT ANALYST 3000 4
FORD ANALYST 3000 4
KING PRESIDENT 5000 5 - 14 rows selected.
Outer Join(cont.) (P4-10)
- SQL> SELECT ename, dname, d.deptno
2 FROM emp e, dept d
3 WHERE e.deptno(+) = d.deptno; - ENAME DNAME DEPTNO
---------- -------------- ----------
CLARK ACCOUNTING 10
KING ACCOUNTING 10
MILLER ACCOUNTING 10
SMITH RESEARCH 20
ADAMS RESEARCH 20
FORD RESEARCH 20
SCOTT RESEARCH 20
JONES RESEARCH 20
ALLEN SALES 30
BLAKE SALES 30
MARTIN SALES 30 - JAMES SALES 30
TURNER SALES 30
WARD SALES 30
OPERATIONS 40 - 15 rows selected.
이 글은 스프링노트에서 작성되었습니다.