home
자바
home
🗞️

06. CREATE(DDL)

DQL (QUERY 질의) : SELECT
DML (MANIPULATION 조작) : [SELECT], INSERT, UPDATE, DELETE
DDL (DEFINITION 정의) : CREATE, ALTER, DROP
DCL (CONTROLL 제어) : GRANT, REVOKE, [COMMIT, ROLLBACK]
TCL (TRANSACTION) : COMMIT, ROLLBACK

DDL(DATA DEFINITION LANGUAGE) : 데이터 정의 언어

오라클에서 제공하는 객체(OBJECT)들을 새로이 만들고(CREATE), 구조를 변경(ALTER)하고, 구조 자체를 삭제(DROP)하는 구문
주로 DB설계자, DB관리자가 사용하는 구문
오라클에서의 객체(구조) : 테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE), 인덱스(INDEX), 패키지(PACKAGE), 트리거(TRIGGER), 프로시저(PROCEDURE), 함수(FUNCTION), 동의어(SYNONYM), 사용자(USER)

CREATE : 다양한 객체(구조)들 생성하는 구문

1. 테이블 생성

테이블? : 행(ROW)과 열(COLUMN)로 구성되는 가장 기본적인 데이터베이스 객체 데이터들을 보관하기 위한 제일 핵심적인 객체
[표현법] CREATE TABLE 테이블명( 컬럼명 자료형(크기), 컬럼명 자료형(크기), 컬럼명 자료형, ... );
자료형 (DATA TYPE)
문자 (CHAR(크기) / VARCHAR2(크기))
CHAR(크기) : 최대 2000BYTE까지 지정 가능 / 고정길이 (아무리 적은 값은 들어와도 처음 할당한 크기 그대로 유지 공백으로라도 채워서!) →고정적인 길이의 데이터가 들어올 예정일 경우
VARCHAR2(크기) : 최대 4000BYTE까지 지정 가능 / 가변길이 (담기는 값에 따라서 공간의 크기 맞춰짐) →유동적인 길이의 데이터가 들어올 예정일 경우
숫자 (NUMBER)
날짜 (DATE)
--> 회원에 대한 데이터를 담기위한 테이블 MEMBER CREATE TABLE MEMBER( MEM_NO NUMBER, MEM_ID VARCHAR2(20), MEM_PWD VARCHAR2(20), MEM_NAME VARCHAR2(20), GENDER CHAR(3), PHONE CHAR(13), EMAIL VARCHAR2(50), MEM_DATE DATE );
SQL
복사

2. 컬럼에 주석 달기 (컬럼에 대한 설명같은 것)

[표현법] COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';
COMMENT ON COLUMN MEMBER.MEM_NO IS '회원번호'; COMMENT ON COLUMN MEMBER.MEM_ID IS '아이디'; COMMENT ON COLUMN MEMBER.MEM_PWD IS '비밀번호'; COMMENT ON COLUMN MEMBER.MEM_NAME IS '이름'; COMMENT ON COLUMN MEMBER.GENDER IS '성별(남/여)'; COMMENT ON COLUMN MEMBER.PHONE IS '전화번호'; COMMENT ON COLUMN MEMBER.EMAIL IS '이메일'; COMMENT ON COLUMN MEMBER.MEM_DATE IS '가입일';
SQL
복사
-- 테이블 삭제하고자 할 때 : DROP TABLE 테이블명;
SQL
복사
-- 데이터 딕셔너리 : 다양한 객체들의 정보를 저장하고 있는 시스템 테이블들 (이미 존재) -- [참고] USER_TABLES : 이 사용자가 가지고 있는 테이블들의 전반적인 구조를 확인할 수 있는 시스템테이블 SELECT * FROM USER_TABLES; -- [참고] USER_TAB_COLUMNS : 이 사용자가 가지고있는 테이블들 상에 정의되어있는 모든 컬럼과 전반적인 구조를 확인할 수 있는 시스템테이블 SELECT * FROM USER_TAB_COLUMNS;
SQL
복사
-- 데이터 추가할 수 있는 구문 -- INSERT INTO 테이블명 VALUES(값, 값, 값, ....); INSERT INTO MEMBER VALUES(1, 'user01', 'pass01', '홍길동', '남', '010-1111-2222', 'aaa@naver.com', '19/12/30'); INSERT INTO MEMBER VALUES('2', 'user02', 'pass02', '홍길녀', '여', NULL, null, SYSDATE); INSERT INTO MEMBER VALUES(NULL, NULL, NULL, NULL, NULL, NULL, null, SYSDATE);
SQL
복사

제약조건 CONSTRAINTS

원하는 데이터값(유효한값)만 유지하기 위해서 특정 컬럼에 설정하는 제약
데이터 무결성 보장을 목적으로 한다.
종류 : NOT NULL, UNIQUE, CHECK(조건), PRIMARY KEY, FOREIGN KEY
NOT NULL 제약조건
해당 컬럼에 반드시 값이 존재해야만 할 경우 (즉, 해당 컬럼에 NULL이 들어와서는 안되는 경우)
삽입/수정시 NULL값을 허용하지 않도록 제한
제약조건을 부여하는 방식이 크게 2가지 있음 (컬럼레벨방식 / 테이블레벨방식)
NOT NULL 제약조건 부여시 오로지 컬럼레벨방식 밖에 안됨 !!!
-- 컬럼레벨 방식 : 컬럼명 자료형 제약조건 CREATE TABLE MEM_NOTNULL( MEM_NO NUMBER NOT NULL, MEM_ID VARCHAR2(20) NOT NULL, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3), PHONE CHAR(13), EMAIL VARCHAR2(50) );
SQL
복사
INSERT INTO MEM_NOTNULL VALUES(1, 'user01', 'pass01', '홍길동', '남', null, null); INSERT INTO MEM_NOTNULL VALUES(2, 'user02', NULL, '김말순', '여', '010-1111-2222', null); --> NOT NULL 제약조건에 위배되어 오류 발생!! (내가 의도했던 대로!!) INSERT INTO MEM_NOTNULL VALUES(2, 'user02', 'pass02', '김말순', '여', '010-1111-2222', null); INSERT INTO MEM_NOTNULL VALUES(3, 'user01', 'pass03', '강개똥', null, null, null); --> 아이디가 중복되었음에도 불구하고 잘 삽입됨
SQL
복사
UNIQUE 제약조건
컬럼값에 중복값을 제한하는 제약조건
삽입/수정시 기존에 있는 데이터값 중 중복값이 있을 경우 오류 발생
컬럼레벨방식 / 테이블레벨 방식 둘 다 가능
CREATE TABLE MEM_UNIQUE( MEM_NO NUMBER NOT NULL, MEM_ID VARCHAR2(20) NOT NULL UNIQUE, --> 컬럼레벨방식 MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3), PHONE CHAR(13), EMAIL VARCHAR2(50) ); -- 테이블레벨 방식 : 모든 컬럼들 다 나열한 후 마지막쪽에 기술 -- 제약조건(컬럼명) CREATE TABLE MEM_UNIQUE( MEM_NO NUMBER NOT NULL, MEM_ID VARCHAR2(20) NOT NULL, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3), PHONE CHAR(13), EMAIL VARCHAR2(50), UNIQUE(MEM_ID) --> 테이블 레벨 방식 ); INSERT INTO MEM_UNIQUE VALUES(1, 'user01', 'pass01', '홍길동', null, null, null); insert into mem_unique values(2, 'user02', 'pass02', '강개순', '여', null, null); INSERT INTO MEM_UNIQUE VALUES(3, 'user01', 'pass03', '김말똥', null, null, null); --> unique 제약조건에 위배되었으므로 insert 실패!! --> 오류 구문을 제약조건명으로 알려줌!(특정 컬럼에 어떤 제약조건이 위배되었는지 상세히 알려주지 않음..) --> 쉽게 파악하기 어려움.. (제약조건명을 지정해주지 않으면 시스템에서 알아서 임의의 제약조건명을 부여해버림)
SQL
복사
제약조건명까지 지어주면서 제약조건을 부여하는 표현법
컬럼 레벨 방식 CREATE TABLE 테이블명( 컬럼명 자료형 [CONSTRAINT 제약조건명] 제약조건, 컬럼명 자료형 );
테이블 레벨 방식 CREATE TABLE 테이블명( 컬럼명 자료형, 컬럼명 자료형, [CONSTRAINT 제약조건명] 제약조건(컬럼명) );
CREATE TABLE MEM_UNIQUE( MEM_NO NUMBER CONSTRAINT MEMNO_NN NOT NULL, MEM_ID VARCHAR2(20) CONSTRAINT MEMID_NN NOT NULL, MEM_PWD VARCHAR2(20) CONSTRAINT MEMPWD_NN NOT NULL, MEM_NAME VARCHAR2(20) CONSTRAINT MEMNM_NN NOT NULL, GENDER CHAR(3), PHONE CHAR(13), EMAIL VARCHAR2(50), CONSTRAINT MEMID_UQ UNIQUE(MEM_ID) --> 테이블 레벨 방식 ); INSERT INTO MEM_UNIQUE VALUES(1, 'user01', 'pass01', '홍길동', null, null, null); insert into mem_unique values(2, 'user02', 'pass02', '강개순', '여', null, null); INSERT INTO MEM_UNIQUE VALUES(3, 'user01', 'pass03', '김말똥', null, null, null); INSERT INTO MEM_UNIQUE VALUES(3, 'user03', 'pass03', '홍길녀', '강', null, null); --> 성별에 유효한 값이 아닌게 들어와도 잘 insert가 되어버림 SELECT * FROM MEM_UNIQUE;
SQL
복사
CHECK(조건) 제약조건
특정 컬럼에 들어올 값에 대한 조건을 제시해둘 수 있음
해당 조건에 만족하는 데이터값만 담길 수 있음
CREATE TABLE MEM_CHECK( MEM_NO NUMBER NOT NULL, MEM_ID VARCHAR2(20) NOT NULL, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3) CONSTRAINT GENDER_CK CHECK(GENDER IN ('남', '여')), -- 컬럼레벨방식 PHONE CHAR(13), EMAIL VARCHAR2(50), UNIQUE(MEM_ID) --, CONSTRAINT GENDER_CK CHECK(GENDER IN ('남', '여')) -- 테이블레벨방식 ); INSERT INTO MEM_CHECK VALUES(1, 'user01', 'pass01', '홍길동', '남', null, null); INSERT INTO MEM_CHECK VALUES(2, 'user02', 'pass02', '강개똥', null, null, null); INSERT INTO MEM_CHECK VALUES(3, 'user03', 'pass03', '강개순', 'f', null, null); --> GENDER 컬럼에 값이 들어간다면 '남' 또는 '여'만 가능 --> 뿐만 아니라 NULL도 INSERT가능!! --> 만약에 NULL도 못들어가게끔 하고자 한다면 NOT NULL제약조건도 부여해야됨!! INSERT INTO MEM_CHECK VALUES(2, 'user04', 'pass04', '강개순', null, null, null); --> 회원번호가 동일해도 성공적으로 INSERT 되어버림
SQL
복사
PRIMARY KEY(기본키) 제약조건
테이블에서 각 행의 정보를 식별하기 위해 사용될 컬럼에 부여하는 제약조건 (식별자의 역할)
EX) 학번, 회원번호, 사원번호, 부서코드, 직급코드, 주문번호, 예약번호, 운송장번호, ...
PRIMARY KEY 제약조건을 부여하게 되면 해당 그 컬럼에 NOT NULL+UNIQUE 제약조건을 의미
주의할점 : 한 테이블당 한개만 설정 가능
CREATE TABLE MEM_PRIMARYKEY( MEM_NO NUMBER CONSTRAINT MEMNO_PK PRIMARY KEY, --> 컬럼레벨 방식 MEM_ID VARCHAR2(20) NOT NULL, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3) CHECK(GENDER IN ('남', '여')), PHONE CHAR(13), EMAIL VARCHAR2(50), UNIQUE(MEM_ID) -- , CONSTRAINT MEMNO_PK PRIMARY KEY(MEM_NO) --> 테이블레벨 방식 ); INSERT INTO MEM_PRIMARYKEY VALUES(1, 'user01', 'pass01', '홍길동', '남', '010-1111-2222', null); INSERT INTO MEM_PRIMARYKEY VALUES(1, 'user02', 'pass02', '이순신', '남', null, null); --> 기본키에 해당하는 컬럼에 중복값을 담으려고 할 때 (unique제약조건 위배) INSERT INTO MEM_PRIMARYKEY VALUES(NULL, 'user02', 'pass02', '이순신', '남', null, null); --> 기본키에 해당하는 컬럼에 NULL을 담으려고 할 때 (NOT NULL제약조건 위배) INSERT INTO MEM_PRIMARYKEY VALUES(2, 'user02', 'pass02', '이순신', '남', null, null); CREATE TABLE MEM_PRIMARYKEY2( MEM_NO NUMBER, MEM_ID VARCHAR2(20), MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3) CHECK(GENDER IN ('남', '여')), PHONE CHAR(13), EMAIL VARCHAR2(50), PRIMARY KEY(MEM_NO, MEM_ID) --> 묶어서 PRIMARY KEY제약조건 부여 (복합키) ); INSERT INTO MEM_PRIMARYKEY2 VALUES(1, 'user01', 'pass01', '홍길동', null, null, null); INSERT INTO MEM_PRIMARYKEY2 VALUES(1, 'user02', 'pass02', '홍길녀', null, null, null); INSERT INTO MEM_PRIMARYKEY2 VALUES(2, 'user02', 'pass01', '홍길녀', null, null, null); INSERT INTO MEM_PRIMARYKEY2 VALUES(null, 'user03', 'pass02', '홍길녀', null, null, null); --> 기본키로 묶여있는 각 컬럼에는 절대 null을 허용하지 않음
SQL
복사
회원등급에 대한 데이터를 따로 보관하는 테이블
CREATE TABLE MEM_GRADE( GRADE_CODE NUMBER PRIMARY KEY, GRADE_NAME VARCHAR2(30) NOT NULL ); INSERT INTO MEM_GRADE VALUES(10, '일반회원'); INSERT INTO MEM_GRADE VALUES(20, '우수회원'); INSERT INTO MEM_GRADE VALUES(30, '특별회원'); CREATE TABLE MEM( MEM_NO NUMBER PRIMARY KEY, MEM_ID VARCHAR2(20) NOT NULL UNIQUE, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3) CHECK(GENDER IN ('남', '여')), PHONE CHAR(13), EMAIL VARCHAR2(50), GRADE_ID NUMBER --> 회원등급번호 같이 보관할 컬럼 ); INSERT INTO MEM VALUES(1, 'user01', 'pass01', '홍길동', null, null, null, null); INSERT INTO MEM VALUES(2, 'user02', 'pass02', '이순신', null, null, null, 10); INSERT INTO MEM VALUES(3, 'user03', 'pass03', '김말똥', null, null, null, 40); --> 유효한 회원등급번호가 아님에도 불구하고 잘 insert가 되어버림
SQL
복사
FOREIGN KEY(외래키) 제약조건
다른테이블에 존재하는 값만 들어와야되는 특정 컬럼에 부여하는 제약조건 → 다른 테이블을 참조한다고 표현 → FOREIGN KEY 제약조건에 의해 테이블 간의 관계가 형성됨!
컬럼레벨방식 컬럼명 자료형 [CONSTRAINT 제약조건명] REFERENCES 참조할테이블명[(참조할컬럼명)]
테이블레벨방식 [CONSTRAINT 제약조건명] FOREIGN KEY(컬럼명) REFERENCES 참조할테이블명[(참조할컬럼명)]
공통 : 참조할컬럼명 생략시 참조할테이블에 PRIMARY KEY로 잡혀있는 컬럼으로 매칭
CREATE TABLE MEM( MEM_NO NUMBER PRIMARY KEY, MEM_ID VARCHAR2(20) NOT NULL UNIQUE, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3) CHECK(GENDER IN ('남', '여')), PHONE CHAR(13), EMAIL VARCHAR2(50), GRADE_ID NUMBER, --REFERENCES MEM_GRADE --(GRADE_CODE) --> 컬럼레벨방식 FOREIGN KEY(GRADE_ID) REFERENCES MEM_GRADE--(GRADE_CODE) --> 테이블레벨방식 ); INSERT INTO MEM VALUES(1, 'user01', 'pass01', '홍길동', null, null, null, 10); INSERT INTO MEM VALUES(2, 'user02', 'pass02', '김말똥', null, null, null, 20); INSERT INTO MEM VALUES(3, 'user03', 'pass03', '안중근', null, null, null, 10); INSERT INTO MEM VALUES(4, 'user04', 'pass04', '강개순', null, null, null, null); --> 외래키 제약조건이 부여된 컬럼에 기본적으로 null 허용됨 INSERT INTO MEM VALUES(5, 'user05', 'pass05', '강말순', null, null, null, 40); --> parent key를 찾을 수 없다는 오류 발생 -- 부모테이블(MEM_GRADE) -|--------<-(1 대 다) 자식테이블(MEM) -- 전체 회원의 회원번호, 회원명, 등급명 -- 오라클구문 SELECT MEM_NO, MEM_NAME, GRADE_NAME FROM MEM, MEM_GRADE WHERE GRADE_ID = GRADE_CODE(+); -- ANSI구문 SELECT MEM_NO, MEM_NAME, GRADE_NAME FROM MEM LEFT JOIN MEM_GRADE ON (GRADE_ID = GRADE_CODE); --> 부모테이블(MEM_GRADE)에서 데이터값으르 삭제할 경우 어떤 문제? --> 10번등급 삭제!! -- 데이터삭제 : DELETE FROM 테이블명 WHERE 조건식; DELETE FROM MEM_GRADE WHERE GRADE_CODE = 10; --> 자식테이블(MEM) 중에 10이라는 값을 사용하고 있기 때문에 삭제가 안됨!! --> 자식테이블에 사용하고 있는 값이 있을 경우 부모테이블로부터 삭제가 안되는 -- "삭제제한" 옵션이 걸려있음!! DELETE FROM MEM_GRADE WHERE GRADE_CODE = 30; INSERT INTO MEM_GRADE VALUES(30, '특별회원');
SQL
복사
→자식테이블 생성시 외래키 제약조건 부여할 때 삭제옵션 부여가능
삭제옵션
부모테이블의 데이터 삭제시 그 데이터를 사용하고 있는 자식테이블의 값을 어떻게 처리할 건지에 대한 옵션
FOREIGN KEY 삭제옵션
ON DELETE RESTRICTED (삭제제한) : 자식데이터로 쓰이는 부모데이터는 삭제 아예 안되게끔 (기본값)
ON DELETE SET NULL : 부모데이터 삭제시 해당데이터를 쓰고있는 자식데이터의 값을 NULL로 변경
ON DELETE CASCADE : 부모데이터 삭제시 해당데이터를 쓰고있는 자식데이터도 같이 삭제시키는
-- ON DELETE SET NULL : 부모데이터 삭제시 해당데이터를 쓰고있는 자식데이터의 값을 NULL로 변경 DROP TABLE MEM; CREATE TABLE MEM( MEM_NO NUMBER PRIMARY KEY, MEM_ID VARCHAR2(20) NOT NULL UNIQUE, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3) CHECK(GENDER IN ('남', '여')), PHONE CHAR(13), EMAIL VARCHAR2(50), GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE) ON DELETE SET NULL ); INSERT INTO MEM VALUES(1, 'user01', 'pass01', '홍길동', null, null, null, 10); INSERT INTO MEM VALUES(2, 'user02', 'pass02', '김말똥', null, null, null, 20); INSERT INTO MEM VALUES(3, 'user03', 'pass03', '안중근', null, null, null, 10); INSERT INTO MEM VALUES(4, 'user04', 'pass04', '강개순', null, null, null, null); -- 10번 등급 삭제 DELETE FROM MEM_GRADE WHERE GRADE_CODE = 10; --> 잘 삭제됨 (단, 10을 가져다 쓰고있던 자식데이터값도 NULL로 변경) ROLLBACK; -- ON DELETE CASCADE : 부모데이터 삭제시 해당데이터를 쓰고있는 자식데이터도 같이 삭제시키는 DROP TABLE MEM; CREATE TABLE MEM( MEM_NO NUMBER PRIMARY KEY, MEM_ID VARCHAR2(20) NOT NULL UNIQUE, MEM_PWD VARCHAR2(20) NOT NULL, MEM_NAME VARCHAR2(20) NOT NULL, GENDER CHAR(3) CHECK(GENDER IN ('남', '여')), PHONE CHAR(13), EMAIL VARCHAR2(50), GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE) ON DELETE CASCADE ); INSERT INTO MEM VALUES(1, 'user01', 'pass01', '홍길동', null, null, null, 10); INSERT INTO MEM VALUES(2, 'user02', 'pass02', '김말똥', null, null, null, 20); INSERT INTO MEM VALUES(3, 'user03', 'pass03', '안중근', null, null, null, 10); INSERT INTO MEM VALUES(4, 'user04', 'pass04', '강개순', null, null, null, null); DELETE FROM MEM_GRADE WHERE GRADE_CODE = 10; --> 잘 삭제됨 (단, 해당 데이터를 사용하고 있던 자식데이터도 같이 DELETE됨)
SQL
복사
< DEFAULT 기본값 > (제약조건 아님!!!!) 컬럼을 선정하지 않고 INSERT시 NULL이 아닌 기본값을 INSERT하고자 할 때 세팅해둘 수 있는 값
DROP TABLE MEMBER; CREATE TABLE MEMBER( MEM_NO NUMBER PRIMARY KEY, MEM_NAME VARCHAR2(20) NOT NULL, MEM_AGE NUMBER, ENROLL_DATE DATE DEFAULT SYSDATE ); -- INSERT INTO 테이블명 VALUES(컬럼값, 컬럼값, 컬럼값, 컬럼값); INSERT INTO MEMBER VALUES(1, '홍길동', 20, SYSDATE); INSERT INTO MEMBER VALUES(2, '김말똥', NULL, NULL); -- INSERT INTO 테이블명(컬럼명, 컬럼명) VALUES(컬럼값, 컬럼값); INSERT INTO MEMBER(MEM_NO, MEM_NAME) VALUES(3, '강개순'); --> 선택되지 않은 컬럼에는 기본적으로 NULL이 들어감 --> 단, 해당 컬럼에 DEFAULT값이 부여되어있을 경우 NULL이 아닌 DEFAULT값이 들어감
SQL
복사
SUBQUERY를 이용한 테이블 생성 (테이블 복사뜨는 개념)
[표현식] CREATE TABLE 테이블명 AS 서브쿼리;
-- EMPLOYEE 테이블을 복제한 새로운 테이블 생성 DROP TABLE EMPLOYEE_COPY; CREATE TABLE EMPLOYEE_COPY AS SELECT * FROM EMPLOYEE; --> 컬럼, 데이터값, 제약조건 같은 경우 NOT NULL만 복사됨 SELECT * FROM EMPLOYEE_COPY; CREATE TABLE EMPLYOEE_COPY2 AS SELECT EMP_ID, EMP_NAME, SALARY, BONUS FROM EMPLOYEE WHERE 1=0; --> 구조만을 복사하고자 할 때 쓰이는 구문 (데이터값은 필요없을 때) CREATE TABLE EMPLOYEE_COPY3 AS SELECT EMP_ID, EMP_NAME, SALARY, SALARY*12 "연봉" FROM EMPLOYEE; --> 서브쿼리 SELECT절에 산술식 또는 함수식 기술된 경우 반드시 별칭 지정해야됨 SELECT EMP_NAME, 연봉 FROM EMPLOYEE_COPY3;
SQL
복사
테이블 다 생성된 후에 뒤늦게 제약조건 추가
ALTER TABLE 테이블명 변경할내용;
PRIMARY KEY : ALTER TABLE 테이블명 ADD PRIMARY KEY(컬럼명);
FOREIGN KEY : ALTER TABLE 테이블명 ADD FOREIFN KEY(컬럼명) REFERENCES 참조할테이블명[(참조할컬럼명)];
UNIQUE : ALTER TABLE 테이블명 ADD UNIQUE(컬럼명);
CHECK : ALTER TABLE 테이블명 ADD CHECK(컬럼에대한 조건);
NOT NULL : ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL;
-- EMPLOYEE_COPY 테이블에 PRIMARY KEY제약조건 추가(EMP_ID) ALTER TABLE EMPLOYEE_COPY ADD PRIMARY KEY(EMP_ID); -- EMPLOYEE 테이블에 DEPT_CODE에 외래키제약조건 추가 (참조하는테이블(부모) : DEPARTMENT(DEPT_ID)) ALTER TABLE EMPLOYEE ADD FOREIGN KEY(DEPT_CODE) REFERENCES DEPARTMENT; --(DEPT_ID); -- EMPLOYEE 테이블 JOB_CODE에 외래키제약조건 추가 (참조하는테이블 : JOB) ALTER TABLE EMPLOYEE ADD FOREIGN KEY(JOB_CODE) REFERENCES JOB; -- DEPARTMENT 테이블에 LOCATION_ID에 외래키제약조건 추가 (참조하는테이블:LOCATION) ALTER TABLE DEPARTMENT ADD FOREIGN KEY(LOCATION_ID) REFERENCES LOCATION;
SQL
복사