# 서브쿼리를 활용하여 employees값 가져오는 테이블 생성 
CREATE table empsal80 
AS SELECT last_name, salary 
FROM employees 
WHERE department_id = 80; 
# 테이블 설정확인 
DESC empsal80; 
# 테이블 모든 값 확인 
SELECT * 
FROM empsal80; 
#테이블 삭제 
DROP TABLE empsal80; 
# 사원의 이름과 연봉을 저장하는 ANNSAL 테이블을 생성하시오. 
NAME과 ANNSAL로 지정하시오. 
# 컬럼의 타입 설정 
CREATE TABLE test5 
( a number(5), 
b char(3)); 
# 데이터 작업 승인 
COMMIT; 
# 확인 
SELECT * 
FROM test5; 
# 승인된 테이블 값을 변경 : ALTER TABLE 
# 새로 추가한 컬럼은 끝에  NULL값 추가 
ALTER TABLE test5 
ADD ( c char(5)); 
# INSERT로 데이터 추가하면 NULL값 밑으로 값이 추가 
INSERT INTO test5(c) 
VALUES('bb'); 
# 데이터의 변경 : UPDATE TABLE 
UPDATE test5 
SET c='bb' 
WHERE a = 10; 
ROLLBACK; 
# 컬럼 이름을 바꾸는 명령문은 없음 
# 데이터 타입변경 
ALTER TABLE test5 
MODIFY (c number(5)); 
# 데이터 타입 변경, 사이즈 축소를 하려면 데이터가 비어있어야 함 
# 데이터 사이즈 확대는 데이터가 있어도 가능 
# 데이터 조작하는 DML이 데이터 구조를 정의하는 DML보다 더 중요 
# 데이터를 보호하는 데이터베이스 
# 테이블 COLUMN 삭제 
ALTER TABLE test5 
DROP COLUMN c; 
# 기본 키 삭제 불가 
ALTER TABLE departments 
DROP COLUMN department_id; 
# SET UNUSED옵션 
DROP은 저장공간까지 삭제하며 다른 작업을 못하게 함 
SET UNUSED는 저장공간은 두고 값만 삭제하여  COLUMN 비활성화 
# 테이블 삭제 
# 참조받는 테이블은 삭제불가 
DROP TABLE test5; 
# 삭제 명령 
delete : data value삭제, data 저장구조 유지, table저장구조 유지, rollback으로 복구 
    WHERE 사용 
truncate : data value삭제, data 저장구조 삭제, table저장구조 유지, rollback으로 복구불가 
    WHERE 없음 
drop : data value삭제, data 저장구조 삭제, table저장구조 삭제, rollback으로 복구불가 
# COLUMN 단위로 제약조건을 설정 
# 네임규칙 : table_col_제약조건 (test5_a_pk) 
# constraint 제약조건이름 NOT NULL에서 constraint 제약조건이름 생략 
TEST5 
column name datatype length 제약조건 
a                 number    3         PK 
b                 number    3         NN 
c                 number    3         UK 
CREATE TABLE test5 
(a number(3), 
b number(3) NOT NULL, 
c number(3), 
CONSTRAINT test5_a_pk primary key(a), 
CONSTRAINT test5_c_uk unique(c) 
) 
# FOREIGN KEY는 REFERENCE가 붙어서 참조하는 테이블과 컬럼을 표시 
# 제약조건 추가 
ALTER TABLE test5 
ADD ( d number(5)); 
ALTER TABLE test5 
ADD CONSTRAINT test5_d_uk unique(d); 
# NOT NULL조건 추가는 
MODIFY를 사용, ADD 안씀 
MODIFY e CONSTRAINT test_e_nn NOT NULL; 
# sql 문서저장 
save text7.sql 
C:\oraclexe\app\oracle\product\11.2.0\server\bin 
# 스크립트 편집 : 문서 저장 editor 열어서 편집 
DROP TABLE test7 CASCADE constraints; 
CREATE TABLE test7 
(a number(5), 
constraint test7_a_pk primary key(a) 
); 
INSERT INTO test7 
VALUES (10); 
COMMIT; 
/ 
# 프롬프트에서 열기 
@text7.sql 
# 스크립트 편집 
SAVE empdept.sql 
# 문자는 싱글 쿼테이션으로 표시, 대소문자 구분가능 
  문자를 더블 쿼테이션으로 표시불가 
# INSERT INTO 테이블명 
  VALUES (데이터, 데이터); 
  1개씩 작성 
# date 타입은 () 없음 
DROP TABLE dept CASCADE constraints; 
DROP TABLE emp CASCADE constraints; 
CREATE table dept 
( 
deptno number(2), 
dname varchar2(14) NOT NULL, 
loc varchar2(13), 
CONSTRAINT dept_deptno_pk primary key(deptno) 
) 
; 
CREATE TABLE emp 
( 
empno number(4), 
ename varchar2(10) NOT NULL, 
job varchar2(9) NOT NULL, 
mgr number(4), 
hiredate date, 
sal number(7, 2) NOT NULL, 
comm number(7, 2), 
deptno number(2), 
CONSTRAINT emp_empno_pk primary key(empno) 
) 
; 
ALTER TABLE emp 
ADD CONSTRAINT emp_deptno_fk foreign key(deptno) 
REFERENCEs dept(deptno); 
INSERT INTO dept 
VALUES (10, 'Administration', 1700); 
INSERT INTO dept 
VALUES (20, 'Marketing', 1800); 
INSERT INTO dept 
VALUES (30, 'Purchasing', 1700); 
INSERT INTO dept 
VALUES (40, 'Human Resource', 2400); 
INSERT INTO dept 
VALUES (50, 'Shipping', 1500); 
INSERT INTO emp 
VALUES (100, 'king', 'AD_PRES', null, '1987-01-17', 24000, null, 10); 
INSERT INTO emp 
VALUES (101, 'Kochar', 'AD_VP', 100, '1989-09-21', 17000, null, 50); 
INSERT INTO emp 
VALUES (102, 'DE HAEN', 'AD_VP', 100, '1993-01-13', 17000, null, 50); 
INSERT INTO emp 
VALUES (103, 'Hunold', 'IT_POG', 102, '1990-07-03', 9000, null, 40); 
INSERT INTO emp 
VALUES (104, 'Ernst', 'IT_PROG', 103, '1997-07-25', 4800, null, 40); 
COMMIT; 
# 스크립트실행 
@empdept.sql 
2권 16페이지 
# 뷰 : 테이블의 데이터 엑세스 제한 
# 뷰 생성 
CREATE VIEW empvu80 
AS SELECT employee_id, last_name, salary 
FROM employees 
WHERE department_id = 80; 
# 테이블과 뷰의 차이점 
테이블 : 테이블을 생성하면 저장공간 할당, 실제 데이터를 공간에 저장하여 처리 
뷰 : 뷰를 생성하는 서브쿼리의 문장을 저장 
# 뷰는 ALTER 없고 CREATE와 DELETE로 덮어써서 변경 
# FROM  절에서 사용 : 인라인 뷰 
# TOP-N 뷰는 인라인 뷰를 사용해야함
Programming/Database