본문 바로가기

Programming/Database

데이터베이스 7강

# 서브쿼리를 활용하여 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' 카테고리의 다른 글

데이터베이스 9강  (0) 2020.03.10
데이터베이스 8강  (0) 2020.03.10
데이터베이스 6강  (0) 2020.03.10
데이터베이스 5강  (0) 2020.03.10
데이터베이스 4강  (0) 2020.03.10