# 서브쿼리를 활용하여 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