<테이블 컬럼(열)의 추가/수정/삭제>

 

  • 90번 부서의 직원들을 새테이블 E_EMP에 입력

1
2
3
4
5
CREATE TABLE E_EMP
AS
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE department_id=90;
cs

 

 

 

 


 

  • 열의 이름을 지정해서 E_EMP2 테이블 생성

1
2
3
4
5
6
7
CREATE TABLE E_EMP2(emp_id, name, sal, dept_id)
AS
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE department_id=90;
 
SELECT * FROM E_EMP2;
cs

 

 

 

 


 

  • 열의 추가

1
2
3
4
ALTER TABLE E_EMP
ADD (GENDER VARCHAR2(1));
 
SELECT * FROM E_EMP;
cs

 

 


 

  • 디폴트 값을 0으로 하는 열 추가

1
2
3
4
ALTER TABLE E_EMP
ADD (커미션 NUMBER DEFAULT 0 NOT NULL);
 
SELECT * FROM E_EMP;
cs

 

 

 


 

  • 두 개의 열을 추가

1
2
3
4
5
ALTER TABLE E_EMP
ADD (날짜 DATE DEFAULT sysdate,
     제작자 VARCHAR2(100DEFAULT USER);
 
SELECT * FROM E_EMP;
cs

 

 

 

 


 

  • 열의 수정

1
2
3
ALTER TABLE E_EMP
MODIFY (제작자 VARCHAR2(200)); --원래 (100)=>(200) 사이즈로
DESC e_emp;
cs

 

 

 


 

 

1
2
3
ALTER TABLE E_EMP
MODIFY (제작자 VARCHAR2(50)); --원래 (200)=>(50) 사이즈로
DESC e_emp;
cs

 

 

 


 

 

1
2
ALTER TABLE E_EMP
MODIFY (제작자 VARCHAR2(1)); --원래 (50)=>(1) 사이즈로
cs

 

제작자 열은 2byte 크기의 데이터 타입이므로 1로 줄일 수 없다.

 

 

 

 


 

 

1
2
ALTER TABLE E_EMP
MODIFY (제작자 number);
cs

 

이미 문자형 데이터가 있기 때문에 숫자형으로 바꿀 수 없다.

 

 


 

 

1
2
ALTER TABLE E_EMP
MODIFY (GENDER number);
cs

 

NULL값인 경우에 입력된 값이 없기 때문에 데이터 형식을 바꿀 수 있다.

 


 

  • 제작자의 데이터 형식을 바꾸려 하면

1
2
UPDATE E_EMP
SET 제작자 = NULL;
cs

 


 

 

  • 열의 삭제

1
2
ALTER TABLE e_emp
DROP COLUMN 제작자; --제작자 열 삭제
cs

 

 

  • 여러개의 열 삭제

1
2
ALTER TABLE e_emp
DROP (GENDER, 커미션, 날짜); --여러개 열 삭제
cs

 

 

 

 


  • 열의 이름 수정

1
2
ALTER TABLE e_emp
RENAME COLUMN department_id TO 부서번호;
cs

 

 

 

1
2
3
4
5
6
ALTER TABLE e_emp
RENAME COLUMN salary TO 급여;
ALTER TABLE e_emp
RENAME COLUMN employee_id TO 직원번호;
ALTER TABLE e_emp
RENAME COLUMN last_name TO 이름;
cs

 

 

 

 


 

 

  • 테이블의 이름 수정

1
RENAME e_emp TO 직원테이블;
cs

 

 

 


 

 

<예제>

 

  • employees 테이블의 job_id가 'ST_MAN'인 직원들을 새 테이블 stmans를 만들어 입력. 단 테이블의 컬럼 이름은 id, job, sal (직원 테이블의 employee_id, job_id, salary)

1
2
3
4
5
6
7
CREATE TABLE stmans (id, job, sal)
AS
SELECT employee_id, job_id, salary
FROM employees
WHERE job_id='ST_MAN';
 
SELECT * FROM stmans;
cs

 

 

'Learning > SQL' 카테고리의 다른 글

인덱스  (0) 2020.06.22
  (0) 2020.06.22
제약조건의 삭제  (0) 2020.06.22
제약조건의 추가 및 수정  (0) 2020.06.22
제약조건 (constraints)  (0) 2020.06.19

<제약조건의 삭제>

 

  • 제약조건의 이름으로 삭제

1
2
ALTER TABLE class
DROP CONSTRAINT class_cno_pk;
cs

 

기본키를 참조하는 외래키가 있기 때문에 에러 발생

 

 

 


 

 

  • CASCADE 옵션시 참조하는 외래키도 삭제

1
2
ALTER TABLE class
DROP CONSTRAINT class_cno_pk CASCADE;
cs

 

 

 


 

  • 제약조건으로 삭제

1
2
3
4
5
6
ALTER TABLE class
DROP UNIQUE (cname); 
--클래스 테이블의 cname열의 유니크 제약조건 삭제
 
ALTER TABLE student
DROP PRIMARY KEY--기본키의 삭제
cs

 

 

 


 

  • 테이블의 삭제

1
2
DROP TABLE class;
DROP TABLE student;
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

  (0) 2020.06.22
테이블 컬럼(열)의 추가/수정/삭제  (0) 2020.06.22
제약조건의 추가 및 수정  (0) 2020.06.22
제약조건 (constraints)  (0) 2020.06.19
테이블 만들고 삭제하기  (0) 2020.06.19

<제약조건의 추가 및 수정>

 

  • 클래스 테이블 생성

1
2
3
4
CREATE TABLE class (
    cno VARCHAR2(2),
    cname VARCHAR2(50)
);
cs

 

  • 테이블에 새 행을 입력

1
2
3
INSERT INTO class VALUES ('01','데이터베이스');
INSERT INTO class VALUES ('02','자바');
SELECT * FROM class;
cs

 

 


 

  • 학생 테이블 생성

1
2
3
4
5
CREATE TABLE student(
    sno VARCHAR2(4),
    sname VARCHAR2(50),
    cno VARCHAR(2)
);
cs

 

  • 학생 테이블에 새 행을 입력

1
2
3
4
5
INSERT INTO student VALUES ('0414','홍길동','01');
INSERT INTO student VALUES ('0415','임꺽정','02');
INSERT INTO student VALUES ('0416','이순신','03');
commit; --영구 저장
SELECT * FROM student;
cs

 

 


 

 

  • 클래스 테이블에 기본키 추가

1
2
ALTER TABLE class
ADD CONSTRAINT class_cno_pk PRIMARY KEY(cno);
cs

 

 

 


 

  • 기본키는 널값이나 중복될 수 없음

1
INSERT INTO class VALUES (NULL,'데이터베이스');
cs

 

 

 

 


 

 

  • 클래스 테이블에 유니크 키를 추가

1
2
ALTER TABLE class
ADD CONSTRAINT class_cname_uk UNIQUE(cname);
cs

 

 

 


 

 

  • 유니크키는 중복안됨

1
INSERT INTO class VALUES ('03''데이터베이스');
cs

 

 

 


 

  • 제약 조건을 조회하는 명령문

1
2
3
SELECT *
FROM ALL_CONSTRAINTS --모든 제약조건
WHERE table_name = 'CLASS'--테이블명 입력시 대문자
cs

 

 

 


 

  • 학생 테이블에 기본키를 추가

1
2
ALTER TABLE student
ADD CONSTRAINT student_sno_pk PRIMARY KEY(sno);
cs

 

 

  • 학생 테이블의 sname에 NOT NULL 추가 (NOT NULL 일경우 MODIFY 사용)

1
2
ALTER TABLE student
MODIFY sname CONSTRAINT student_sname_nn NOT NULL;
cs

 

 

 

  • 학생 테이블에 외래키 추가

1
2
3
4
5
ALTER TABLE student
ADD CONSTRAINT student_cno_fk FOREIGN KEY(cno)
    REFERENCES class(cno); --클래스 테이블에 cno열을 참조
 
--03이 참조하는 데이터에 없기 때문에 에러발생
cs

 

 

 

+ 학생 테이블에 외래키 추가가 안되는 이유는? 03이 참조하는 데이터에 없기 때문.

(0416 이순신 03 행에서 03을 01로 바꾼다.)

 

1
2
3
4
--제약조건을 추가할 때 이미 만들어진 테이블에 각 행의 데이터가 
만족해야
제약조건이 추가된다.
UPDATE student SET cno = '01'
WHERE sno='0416';
cs

 

 

+ 그 다음 외래키를 추가하면 테이블 변경이 된다.

1
2
3
ALTER TABLE student
ADD CONSTRAINT student_cno_fk FOREIGN KEY(cno)
    REFERENCES class(cno);
cs

 

'Learning > SQL' 카테고리의 다른 글

테이블 컬럼(열)의 추가/수정/삭제  (0) 2020.06.22
제약조건의 삭제  (0) 2020.06.22
제약조건 (constraints)  (0) 2020.06.19
테이블 만들고 삭제하기  (0) 2020.06.19
오라클 SQL의 데이터타입  (0) 2020.06.19

+ Recent posts