## TCL
-- Transaction : 최소 업무(작업) 단위
-- commit; db에 영속 반영
-- rollback; 원래 상태로 복구
-- savepoint 포인트명; 트랜잭션 중간 저장점 지정
-- rollback to 포인트명; 저장점부분 복구
-- DDL : 자동 반영(auto commit)
-- SQLDeveloper, SQL*Plus : 종료, 연결해제 auto commit;
-- DML : 명시적으로 commit, rollback 지정
## DML (데이터 조작어)
-- 레코드 : C(추가) R(조회) U(변경) D(삭제)
-- 레코드추가 C
>> 단일행 추가
1. 지정한컬럼에 대해서 값을 지정추가, NOT NULL 컬럼은 모두 포함되어있여함
INSERT INTO 테이블명(컬럼명1, 컬럼명X) VALUES(값1, 값X);
2. 테이블구조(스키마) 순서대로 값을 지정 추가
INSERT INTO 테이블명 VALUES(값1, 값2, 값X);
>> 다중행 추가 : 테스트 데이터, SAMPLE 데이터
insert into 테이블명(컬럼명1, 컬럼명x)
SELECT 컬럼명1, 컬럼명X
~~~
;
-- 레코드변경 U
1. 지정한 컬럼에 대해서 모든 레코드의 값을 변경
UPDATE 테이블명 SET 컬럼명1=변경값 , 컬럼명N=값;
2. 지정한 조건을 만족하는 레코드의 컬럼에 대해서 값을 변경
UPDATE 테이블명 SET 컬럼명1=변경값 , 컬럼명N=값
WHERE 조건구문;
-- 레코드 삭제 D
1. 지정한 컬럼에 대해서 모든 레코드를 삭제: 복구가능
DELETE 테이블명;
DELETE FROM 테이블명;
2. 지정한 조건을 만족하는 레코드만 삭제 : 복구 가능
DELETE 테이블명 WHERE 조건구문;
3. 레코드 삭제 : 복구 불가능
-- DDL : 자동 commit
-- TRUNCATE TABLE 테이블명
-- 복구 불가능 => 영구적 삭제처리 commit 수행
-- WHERE 구문 사용 불가
## JOIN
-- 데이터베이스 모델링 정규화
>> 중복 데이터를 분리 설계
-- 1개 이상의 여러개의 테이블 결합해서 조회
-- 예제: SCOTT(DEPT / EMP)
-- 1. ORACLE 전용 JOIN
-- 2. ANSI 표준 JOIN (SQLD/SQLP)
-- 오라클조인 기본형식:
SELECT
FROM 테이블명1 [ALIAS], 테이블명2 [ALIAS], (SUB-QUERY) [ALIAS]
[ WHERE ~ ]
## JOIN 종류
1. CROSS JOIN
2. EQUI JOIN
3. OUTER JOIN
4. SELF JOIN
5. NON-EQUI JOIN
## 1. CROSS JOIN
-- 조인조건 없음(누락), 모든 경우의수 반환 : 레코드행수 * 레코드행수
SELECT *
FROM EMP, DEPT;
SELECT COUNT(*)
FROM EMP, DEPT;
SELECT (SELECT COUNT(*) FROM EMP) * (SELECT COUNT(*)FROM DEPT)
FROM DUAL;
## 2. EQUI JOIN
-- 조인테이블의 조인조건 = 에 해당하는 레코드 조회
-- 조인테이블의 모두 존재하는 레코드만 대상 조회
-- 직원테이블에 신입사원 레코드 등록
-- 사번 7777, 이름 홍길동, 입사일 현재날짜, 급여 4000
-- DB 영속 반영
-- 직원의 부서번호, 부서명, 부서위치, 사번, 이름 정보를 조회 : 조인(직원의 부서번호 => 부서테이블 부서번호)
select emp.deptno, dname, loc, empno, ename
from emp, dept
where emp.deptno = dept.deptno
order by emp.deptno;
## 3. OUTER JOIN
-- equi join 시에 누락된 레코드도 함께 조회
-- equi join 조건식에서 데이터가 없는 테이블쪽 (+) 기호 표기
-- outer join시에는 null 도 조인의 대상 데이터로 간주
-- 부서를 배정받지 못한 직원의 정보도 함께 조회
select emp.deptno, dname, loc, empno, ename
from emp, dept
where emp.deptno = dept.deptno(+)
order by emp.deptno;
-- 부서원이 없는 부서의 정보도 함께 조회
select dept.deptno, dname, loc, empno, ename
from emp, dept
where emp.deptno(+) = dept.deptno
order by emp.deptno;
-- 부서를 배정받지 못한 직원, 부서원이 없는 부서의 정보도 함께 조회
-- ERROR : ORACLE FULL OUTER JOIN 지원하지 않음
-- 해결 : 집합연산(UNION) 처리
select dept.deptno, dname, loc, empno, ename
from emp, dept
where emp.deptno(+) = dept.deptno(+)
order by emp.deptno;
-- 집합연산자 : FULL OUTER JOIN
select emp.deptno, dname, loc, empno, ename
from emp, dept
where emp.deptno = dept.deptno(+)
UNION
select dept.deptno, dname, loc, empno, ename
from emp, dept
where emp.deptno(+) = dept.deptno
;
## 4. SELF JOIN
-- 현재 테이블 자신을 참조 조인의
-- 테이블에 대한 alias를 지정 사용
select alaias.컬럼명, alaias.컬럼명
from table alias, table alias
where alaias.컬럼명 = alaias.컬럼명
;
-- 직원의 사번, 이름, 상사사번, 상사이름 정보 조회
-- 직원의 사번 정렬 조회
select 직원.empno 직원사번, 직원.ename 직원이름, 상사.empno 상사사번, 상사.ename 상사이름
from emp 직원, emp 상사
where 직원.mgr = 상사.empno
order by 직원.empno
;
-- 상사가 없는 직원정보 누락
-- outer join 상사가 없는 직원정보도 함께 조회
select 직원.empno 직원사번, 직원.ename 직원이름, 상사.empno 상사사번, 상사.ename 상사이름
from emp 직원, emp 상사
where 직원.mgr = 상사.empno(+)
order by 직원.empno
;
## 5. NON-EQUI JOIN
-- 조인조건이 = 아닌 조인
-- 범위 sql 전용연산자 : between a and b
-- 급여 등급 테이블 조회(salgrade) : 구조, 전체 레코드 조회
-- 직원의 사번, 급여, 급여등급 조회
-- 테이블조인 : 직원, 급여등급
select empno, sal, grade
from emp, salgrade
where sal between losal and hisal;
[실습] 부서번호, 부서명, 사번, 이름, 급여, 급여등급 정보 조회
-- 3개 테이블 조인 : 직원, 부서, 급여등급
select e.deptno, d.dname, e.empno, e.ename, e.sal, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal
;
## 집합연산자
-- 2개 이상의 SQL 구문의 결과 연결시켜주는 연산자
-- SQL 구문의 결과 컬럼 숫자, 타입이 동일하게 매핑되어야함
1. 합집합 (중복 포함)
SELECT1 ~~ UNION ALL SELECT2;
2. 합집합 (중복 제외)
SELECT1 ~~ UNION SELECT2;
>> ORACLE FULL OUTER JOIN
3. 교집합
SELECT1 ~~ INTERSECT SELECT2;
4. 차집합
SELECT1 ~~ MINUS SELECT2;
-- 1. 직원의 부서번호, 이름 조회 : 10번, 20번 부서원 조회
-- 2. 직원의 부서번호, 이름 조회 : 10번, 30번 부서원 조회
## VIEW
-- 가상의 테이블
-- 뷰 생성에 따라서 CUD 가능/불가능, 읽기전용
-- 실제 데이터는 테이블 저장 ****
-- 목적(장점) : 사용자 편리성, 보안
-- 뷰종류 :
>> db 저장 : CREATE VIEW ~ , 반복 사용
>> IN-LINE VIEW : SELECT ~ FROM (SUB-QUERY), 일회성 VIEW
-- 뷰 데이터 딕셔너리 : USER_VIEWS
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
1. VIEW 생성 / 2. VIEW 변경
CREATE [OR REPLACE] VIEW 뷰이름
AS
SELECT 구문 ~~
[WITH READ ONLY]
;
3. VIEW 삭제
DROP VIEW 뷰이름;
## ANSI 표준 조인 : JOIN 종류
1. CROSS JOIN
SELECT ~
FROM 테이블1 CROSS JOIN 테이블2;
2. EQUI JOIN
(1)
SELECT ~
FROM 테이블1 [NATURAL] JOIN 테이블2
;
(2)
SELECT ~
FROM 테이블1 JOIN 테이블2
USING (조인컬럼명)
;
3. OUTER JOIN : 있는쪽을 기준으로해서 왼쪽이면 LEFT OUTER JOIN, 오른쪽이면 RIGHT OUTER JOIN
(1)
SELECT ~
FROM 테이블1 LEFT OUTER JOIN 테이블2
ON (조인조건식)
(2)
SELECT ~
FROM 테이블1 RIGHT OUTER JOIN 테이블2
ON (조인조건식)
(3)
SELECT ~
FROM 테이블1 FULL OUTER JOIN 테이블2
ON (조인조건식)
4. SELF JOIN :
SELECT ~
FROM 테이블1 JOIN 테이블2
ON (조인조건식)
;
5. NON-EQUI JOIN
SELECT ~
FROM 테이블1 JOIN 테이블2
ON (조인조건식)
;
## INDEX
-- 명령문의 처리속도를 향상하기위해서 컬럼에 적용하는 객체
-- 책의 목차와 같은 개념
-- 인덱스는 검색의 속도는 향상 되나, 지나친 인덱스는 cud 발생시에 속도를 저하 시킬 수 있음
-- PK 컬럼인 경우에는 자동으로 index 객체 생성됨
-- 인덱스 데이터 딕셔너리 : user_indexes
-- user_indexes
INDEX_NAME NOT NULL VARCHAR2(30)
INDEX_TYPE VARCHAR2(27)
TABLE_NAME NOT NULL VARCHAR2(30)