SQL활용 #2 - DDL / DML / TCL

김형우·2022년 3월 21일
0

SQL 활용

목록 보기
3/14

0. 계정 추가/ 삭제/ 권한부여

-- 시스템 계정 => system / 1111
-- 데이터 제어어(DCL) 사용자를 추가, 권한부여, 권한삭제, 제거

-- 계정 생성하기 (ID : QUEST / PW : 1234)
CREATE USER GUEST201 IDENTIFIED BY "1234";

-- 계정 확인
SELECT * FROM DBA_USERS;

-- 권한 부여
-- 접속, 리소스
GRANT CONNECT, RESOURCE TO GUEST201;

-- 권한 제거, 회수
-- 접속, 리소스
REVOKE CONNECT, RESOURCE FROM GUEST201;

-- 계정 삭제
-- CASCADE => 한방에 다 끝냄(지움)
DROP USER GUEST201 CASCADE;

ORACLE Developer

1. 데이터 정의어

  • 데이터 정의어(Data Definition Language)
  • 데이터의 구조를 정의하기 위한 테이블 생성, 수정, 삭제 명령어.
    CREATE : 테이블 생성
    DROP : 테이블 삭제
    ALTER : 테이블 수정
    TRUNCATE : 테이블에 있는 모든 데이터 삭제
    RENAME : 테이블명 변경

0. 제약조건과 타입

  1. 제약조건
    : 기본키(PK), 외래키(FK), 체크(CK), 고유값(UQ) 등
  2. 타입
    : NOT_NULL, VARCHAR2, NUMBER 등

1. CREATE : 테이블 생성

  • 기본 문법
CREATE TABLE 테이블명 (
	변수명 타입,
    변수명 타입,
);
  • 예시)
-- 데이터 정의어 : DDL
-- 테이블생성 및 구조, 제약조건 등을 설정
CREATE TABLE MEMBER3 (
    -- 실제 데이터
    ID VARCHAR2(30),
    PW VARCHAR2(200),
    AGE VARCHAR2(3),
    PHONE VARCHAR2(15),
    GENDER VARCHAR2(1),
    REGDATE DATE,
    REGDATE1 TIMESTAMP,
    -- 제약조건
    -- 기본키 명칭 및 기본키로 정할 항목(ID) 선택
    CONSTRAINT PK_MEMBER3_ID PRIMARY KEY(ID),
    -- 성별을 나타내는 GENDER에는 'M'과 'F'만 넣을 수 있다.
    CONSTRAINT CK_MEMBER3_GENDER CHECK (GENDER IN ('M','F'))
);

2. DROP : 테이블 삭제

  • 기본문법
    : CASCADE CONSTRAINTS는 모든 제약조건 등을 다 삭제한다는 뜻
DROP TABLE 테이블명 CASCADE CONSTRAINTS;
  • 예시)
DROP TABLE ITEM2 CASCADE CONSTRAINTS;
DROP TABLE MEMBER2 CASCADE CONSTRAINTS;
DROP TABLE ORDER2 CASCADE CONSTRAINTS;

3. ALTER : 테이블 수정

  • 기본문법
추가 => ALTER TABLE 테이블명 ADD 변수명 타입;
수정 => ALTER TABLE 테이블명 MODIFY 변수명 타입;
삭제 => ALTER TABLE 테이블명 DROP 변수명 타입;
제약조건 => ALTER TABLE 테이블명 [ADD, MODIFY, DROP] 
	CONSTRAINT 제약조건명 타입(추가, 수정, 삭제 할 변수명);
  • 예시)
-- 제약조건 추후에 추가/삭제
-- 주소컬럼 추가
ALTER TABLE MEMBER3 ADD ADDR VARCHAR2(100);

-- 주소 타입의 길이 100 -> 120
ALTER TABLE MEMBER3 MODIFY ADDR VARCHAR2(120);

-- 주소컬럼 삭제
ALTER TABLE MEMBER3 DROP COLUMN ADDR;

-- 기본키 제약조건 설정(지금은 동작안됨, 이미 기본키 생성되어있어서)
ALTER TABLE MEMBER3 ADD CONSTRAINT PK_MEMBER3_ID PRIMARY KEY(ID);

-- 성별에 NOT_NULL 추가
-- 타입을 바꾸는 개념이지 제약조건을 거는 것이 아니다
ALTER TABLE MEMBER3 MODIFY GENDER NOT NULL;

-- 연락처에 고유값(UNIQUE) 설정 (제약조건)
ALTER TABLE MEMBER3 ADD CONSTRAINT UQ_MEMBER3_PHONE UNIQUE(PHONE);

-- 고유값 설정 지우기 (제약조건 삭제)
ALTER TABLE MEMBER3 DROP CONSTRAINT UQ_MEMBER3_PHONE;

2. 데이터 조작어

  • 데이터 조작어(Data Manipulation Language) : 데이터 추가, 조회, 수정 및 삭제를 위한 명령어.
    INSERT : 데이터 입력
    UPDATE : 데이터 수정
    DELETE : 데이터 삭제
    SELECT : 데이터 조회

1. INSERT

  • 추가
  • 기본문법
    : INSERT INTO 테이블명(컬럼명) VALUES(추가값);
  • INSERT ALL
INSERT ALL 
	INTO 테이블명(컬럼명) VALUES(추가값)
    INTO 테이블명(컬럼명) VALUES(추가값)
    INTO 테이블명(컬럼명) VALUES(추가값)
SELECT * FROM DUAL;    
  • SELECT * FROM DUAL;
    : DUAL = 시스템 관리를 위한 테이블
  • 하나씩 여러번 INSERT를 하면 중간에 서버가 다운되거나 하는 등의 문제가 일어났을때 대처하기가 어렵다. 때문에 일괄추가가 더 실용적이다.

2. UPDATE

  • 수정
  • 기본문법
    : UPDATE 테이블명 SET 컬럼명=변경값, 컬럼명=변경값 WHERE 조건;
  • CASE문으로 조건을 줄 수 있다
-- 2-1. 나이가 0~20까지는 200, 21~40이면 300, 아니면 400으로
UPDATE MEMBER3 SET AGE =
    -- IF문 같은 개념
    CASE
        WHEN (AGE >= 0 AND AGE <= 20) THEN 200
        WHEN (AGE >= 21 AND AGE <= 40) THEN 300
        ELSE 400
    END;

3. DELETE

  • 삭제
  • 기본문법
    : DELETE FROM 테이블명 WHERE 조건; = 조건 컬럼만 삭제
    : DELETE FROM 테이블명; = 다 삭제
  • 예시) NO가 8번인 글을 삭제
    : DELETE FROM BOARD3 WHERE NO=8;
  • 회원A가 탈퇴
  • 탈퇴 안됨 외래키가 걸린 BOARD3의 글이 있기때문
  • 그래서 탈퇴가 불가능한 경우가 많다.
  • 이럴경우 ID만 남겨두고 중요정보를 빈칸으로 업데이트 시킨다.

4. SELECT

  • 조회
  • 기본문법
    : SELECT * FROM 테이블; = 전체조회
    : SELECT 컬럼, 컬럼 FROM 테이블; = 컬럼만 조회
  • 조회할 때는
  • DB의 데이터만 사용하는것이 아님
  • DB의 데이터를 가공해서 뷰를 만들고,
  • 그 뷰를 사용함, 뷰에서 직접적인 가공은 불가, 조회만
  • 뷰 생성
    : CREATE OR REPLACE VIEW 뷰이름 AS
    : +SELECT문;

3. 트랜잭션 제어어

-- 트랜잭션 제어어(Transaction Control Language)
COMMIT : 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것
ROLLBACK : 되돌리기
SAVEPOINT : 저장점을 정의

전체코드

-- 전체조회
-- SELECT * FROM 테이블명;
SELECT * FROM MEMBER3;

-- 추가
-- INSERT INTO 테이블명(컬럼명) VALUES(추가값);
INSERT INTO MEMBER3(ID, PW, AGE, PHONE, GENDER, REGDATE, REGDATE1) 
    VALUES('AR','AR',36,'010-0000-1111','M',CURRENT_DATE, CURRENT_DATE);

-- 2명의 회원 추가

COMMIT; -- 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것
ROLLBACK; -- 되돌리기
SAVEPOINT; -- 저장점을 정의

-- BOARD3에 내용 추가
-- 시퀀스 생성하기 (시퀀스명 : SEQ_BOARD3_NO)
CREATE SEQUENCE SEQ_BOARD3_NO
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;
-- 글쓰기 (작성자는 외래키)
-- 제목 내용 작성자 조회수
-- 시퀀스는 자동으로 커밋이 되기때문에 증가한 시퀀스값은 롤백 될 수 없다.
INSERT INTO BOARD3(NO, TITLE, CONTENT, WRITER, HIT, REGDATE)
    VALUES(SEQ_BOARD3_NO.NEXTVAL, '제목', '내용', 'AR', 1, CURRENT_DATE);
    
COMMIT; -- 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것
ROLLBACK; -- 되돌리기 COMMIT 하기전에 되돌리기 
SAVEPOINT; -- 저장점을 정의

-- 조회
SELECT * FROM BOARD3;

-- 시퀀스 조회
-- DUAL 시스템 관리를 위한 테이블
SELECT SEQ_BOARD3_NO.CURRVAL FROM DUAL;

-- 일괄 추가
-- 일괄 추가를 다 하거나 아예 하지 않거나
INSERT ALL
    INTO MEMBER3(ID, PW, AGE, PHONE, GENDER, REGDATE, REGDATE1) 
        VALUES('BR','AR',36,'010-0000-1111','M',CURRENT_DATE, CURRENT_DATE)
    INTO MEMBER3(ID, PW, AGE, PHONE, GENDER, REGDATE, REGDATE1) 
        VALUES('CR','AR',36,'010-0000-1111','M',CURRENT_DATE, CURRENT_DATE)
    INTO MEMBER3(ID, PW, AGE, PHONE, GENDER, REGDATE, REGDATE1) 
        VALUES('DR','AR',36,'010-0000-1111','M',CURRENT_DATE, CURRENT_DATE)
SELECT * FROM DUAL;  

SELECT * FROM MEMBER3;

COMMIT; -- 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것
ROLLBACK; -- 되돌리기 COMMIT 하기전에 되돌리기

-- 한번씩 여러번 추가
-- 하나넣고 커밋, 하나넣고 커밋, 만약 두개넣고 서버가 멈추거나 하면 
-- 롤백을 해야하는 등의 일이 벌어지기 때문에 
-- 일괄추가 할깨는 INSERT ALL을 사용하는 것이 더 낫다
INSERT INTO MEMBER3(ID, PW, AGE, PHONE, GENDER, REGDATE, REGDATE1) 
    VALUES('BR','AR',36,'010-0000-1111','M',CURRENT_DATE, CURRENT_DATE);
COMMIT; -- 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것    

INSERT INTO MEMBER3(ID, PW, AGE, PHONE, GENDER, REGDATE, REGDATE1) 
    VALUES('CR','AR',36,'010-0000-1111','M',CURRENT_DATE, CURRENT_DATE);
COMMIT; -- 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것    

INSERT INTO MEMBER3(ID, PW, AGE, PHONE, GENDER, REGDATE, REGDATE1) 
    VALUES('DR','AR',36,'010-0000-1111','M',CURRENT_DATE, CURRENT_DATE);
COMMIT; -- 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것    

COMMIT; -- 적용하기 (추가, 삭제, 수정) 변화된 데이터를 적용하는것
ROLLBACK; -- 되돌리기 COMMIT 하기전에 되돌리기

-----------------------
-- 수정
-- UPDATE 테이블명 SET 컬럼명=변경값, 컬럼명=변경값 WHERE 조건;

-- 1. 조회
SELECT * FROM MEMBER3;

-- 2. 수정
-- 조건을 정하지 않으면 모든 항목의 데이터가 변경됨
UPDATE MEMBER3 SET AGE=22, PHONE='010-5555-6666' WHERE ID='A';

-- 2-1. 나이가 0~20까지는 200, 21~40이면 300, 아니면 400으로
UPDATE MEMBER3 SET AGE =
    -- IF문 같은 개념
    CASE
        WHEN (AGE >= 0 AND AGE <= 20) THEN 200
        WHEN (AGE >= 21 AND AGE <= 40) THEN 300
        ELSE 400
    END;    

-- 3. 조회
SELECT * FROM MEMBER3;

-- 4. 적용하기/되돌리기
COMMIT;
ROLLBACK;

----------

-- 15, 13번 글 제목 수정
UPDATE BOARD3 SET TITLE='UPDATE1' WHERE NO IN (15, 13);
SELECT * FROM BOARD3;

-- 15, 13번 글 제목 다르게 수정
UPDATE BOARD3 SET TITLE='UPDATE1' WHERE NO IN 15;

---------- 해보세요

-- 1. 게시판에서 글번호가 1번인것의 제목을 'BBB' 조회수를 10
-- 2. 게시판에서 조회수가
-- 조회수가 0~9 => 10
-- 조회수가 10~20 => 20
-- 조회수가 30~40 => 30
-- 나머지 40

-- 1. 게시판에서 글번호가 1번인것의 제목을 'BBB' 조회수를 10
SELECT * FROM BOARD3;

UPDATE BOARD3 SET TITLE='BBB', HIT=10 WHERE NO=1;

-- 1-1. 글번호가 1, 13, 15번인 글의 제목 바꾸기
UPDATE BOARD3 SET TITLE='CCC', HIT=10 WHERE NO=1 OR NO=13 OR NO=15;
UPDATE BOARD3 SET TITLE='DDD', HIT=10 WHERE NO IN (1,13,15);

COMMIT;
ROLLBACK;

SELECT * FROM BOARD3;

-- 2. 게시판에서 조회수가~
-- 조회수가 0~9 => 10
-- 조회수가 10~20 => 20
-- 조회수가 30~40 => 30
-- 나머지 40
SELECT * FROM BOARD3;

UPDATE BOARD3 SET HIT =
    CASE
        WHEN(HIT >= 0 AND HIT <=9) THEN 10
        WHEN(HIT >= 10 AND HIT <=20) THEN 20
        WHEN(HIT >= 30 AND HIT <=40) THEN 30
        ELSE 40
    END;    

SELECT * FROM BOARD3;

COMMIT;
ROLLBACK;

-----------------------------------------------

-- 삭제
-- DELETE FROM 테이블명 WHERE 조건;
SELECT * FROM BOARD3;

-- BOARD3 다 삭제
DELETE FROM BOARD3;

-- NO가 8번인 글을 삭제
DELETE FROM BOARD3 WHERE NO=8;

SELECT * FROM BOARD3;
SELECT * FROM MEMBER3;

-- 회원A가 탈퇴
-- 탈퇴 안됨 외래키가 걸린 BOARD3의 글이 있기때문
-- 그래서 탈퇴가 불가능한 경우가 많다.
-- 이럴경우 ID만 남겨두고 중요정보를 빈칸으로 업데이트 시킨다.
DELETE FROM MEMBER3 WHERE ID='DR';

COMMIT;
ROLLBACK;

-----------------------------------------------

SELECT * FROM BOARD3;
SELECT * FROM MEMBER3;
-- 조회
SELECT * FROM MEMBER3 WHERE ID IN('AR','BR','CR');

-- 정렬
SELECT * FROM MEMBER3 WHERE ID IN('AR','BR','CR') ORDER BY ID DESC;

-- 게시판 조회수가 20이상인 것을 글번호 기준 내림차순 조회
SELECT * FROM BOARD3 WHERE HIT >= 20 ORDER BY NO DESC;

-----------------------------------------------

INSERT
    INTO BOARD3(NO, TITLE, CONTENT, WRITER, HIT, REGDATE)
        VALUES(SEQ_BOARD3_NO.NEXTVAL, '제목가다ASD', '내용', 'AR', 1, CURRENT_DATE);
        
COMMIT;

-- 검색
-- 제목에 '가' 포함된 것을 검색
-- SELECT 컬럼면 FROM 테이블명 WHERE 컬럼 LIKE 검색어
-- ORDER BY 컬럼 ASC|DESC
SELECT NO, TITLE, WRITER, HIT, REGDATE FROM BOARD3
    WHERE TITLE LIKE '%'||'AS'||'%'
    ORDER BY NO DESC;

-- 페이지네이션
-- 컬럼 명 변경 가능 -- 원래컬럼명 변경할컬럼명

-- 1. 오리지날 BOARD3
SELECT 
    NO NO, 
    TITLE TITLE, 
    WRITER WRITER, 
    HIT HIT, 
    REGDATE REGDATE
FROM 
    BOARD3;

-- 2. BOARD3 + ROWNO, REGDATE => DT
SELECT 
    NO NO, 
    TITLE TITLE, 
    WRITER WRITER, 
    HIT HIT, 
    REGDATE DT, 
    ROW_NUMBER() OVER (ORDER BY NO DESC) ROWNO
FROM 
    BOARD3;
    
-- 3. BOARD3의 명칭 변경
SELECT * FROM
(SELECT 
    NO NO, 
    TITLE TITLE, 
    WRITER WRITER, 
    HIT HIT, 
    REGDATE DT, 
    ROW_NUMBER() OVER (ORDER BY NO DESC) ROWNO
FROM 
    BOARD3) BOARD33;

-- 1~3번째 글 = 1페이지
SELECT * FROM (
        SELECT 
            NO, TITLE, WRITER, HIT, REGDATE DT, 
            ROW_NUMBER() OVER (ORDER BY NO DESC) ROWNO
        FROM 
            BOARD3
) BOARD33 WHERE ROWNO BETWEEN 1 AND 3;            

--------- 뷰 생성하기
CREATE OR REPLACE VIEW BOARD33 AS
SELECT
    NO NO, TITLE TITLE, WRITER WRITER, HIT HIT, REGDATE DT,
    ROW_NUMBER() OVER (ORDER BY NO DESC) ROWN
FROM 
    BOARD3;
    
-- 생성된 뷰 조회
SELECT * FROM BOARD33;

-- 조회할 때는
-- DB의 데이터만 사용하는것이 아님
-- DB의 데이터를 가공해서 뷰를 만들고,
-- 그 뷰를 사용함


예제

1. BOARD3 생성

-- 게시판(BOARD3) 테이블 생성
-- NO(NUMBER),
-- TITLE(제목),
-- CONTENT(내용),
-- WRITER(작성자),
-- HIT(조회수),
-- REGDATE(작성일자, DATE)

-- 테이블 삭제
--DROP TABLE BOARD3 CASCADE CONSTRAINTS;

-- 테이블 생성
CREATE TABLE BOARD3 (
    NO NUMBER,
    TITLE VARCHAR2(100),
    -- CLOB : 대량의 문자
    -- BLOB : 파일
    CONTENT CLOB,
    -- 외래키로 쓸 예정 (MEMBER3의 ID) 타입, 길이 일치해야함
    -- 외래키 제약조건 : MEMBER3의 ID가 , BOARD3의 WRITER
    WRITER VARCHAR2(30),
    HIT NUMBER,
    REGDATE DATE,
    CONSTRAINT PK_BOARD3_WRITER PRIMARY KEY(NO),
    CONSTRAINT FK_BOARD3_WRITER FOREIGN KEY(WRITER) REFERENCES MEMBER3(ID)
);

-------
-- 제약조건 추후 추가 
-- ALTER TABLE BOARD3 ADD CONSTRAINT PK_BOARD3_WRITER PRIMARY KEY(NO)
-- ALTER TABLE BOARD3 ADD CONSTRAINT FK_BOARD3_WRITER 
	FOREIGN KEY(WRITER) REFERENCES MEMBER3(ID)

2. 검색, 페이지네이션

INSERT
    INTO BOARD3(NO, TITLE, CONTENT, WRITER, HIT, REGDATE)
        VALUES(SEQ_BOARD3_NO.NEXTVAL, '제목가다ASD', '내용', 'AR', 1, CURRENT_DATE);
        
COMMIT;

-- 검색
-- 제목에 '가' 포함된 것을 검색
-- SELECT 컬럼면 FROM 테이블명 WHERE 컬럼 LIKE 검색어
-- ORDER BY 컬럼 ASC|DESC
SELECT NO, TITLE, WRITER, HIT, REGDATE FROM BOARD3
    WHERE TITLE LIKE '%'||'AS'||'%'
    ORDER BY NO DESC;

-- 페이지네이션
-- 컬럼 명 변경 가능 -- 원래컬럼명 변경할컬럼명

-- 1. 오리지날 BOARD3
SELECT 
    NO NO, 
    TITLE TITLE, 
    WRITER WRITER, 
    HIT HIT, 
    REGDATE REGDATE
FROM 
    BOARD3;

-- 2. BOARD3 + ROWNO, REGDATE => DT
SELECT 
    NO NO, 
    TITLE TITLE, 
    WRITER WRITER, 
    HIT HIT, 
    REGDATE DT, 
    ROW_NUMBER() OVER (ORDER BY NO DESC) ROWNO
FROM 
    BOARD3;
    
-- 3. BOARD3의 명칭 변경
SELECT * FROM
(SELECT 
    NO NO, 
    TITLE TITLE, 
    WRITER WRITER, 
    HIT HIT, 
    REGDATE DT, 
    ROW_NUMBER() OVER (ORDER BY NO DESC) ROWNO
FROM 
    BOARD3) BOARD33;

-- 1~3번째 글 = 1페이지
SELECT * FROM (
        SELECT 
            NO, TITLE, WRITER, HIT, REGDATE DT, 
            ROW_NUMBER() OVER (ORDER BY NO DESC) ROWNO
        FROM 
            BOARD3
) BOARD33 WHERE ROWNO BETWEEN 1 AND 3;            

--------- 뷰 생성하기
CREATE OR REPLACE VIEW BOARD33 AS
SELECT
    NO NO, TITLE TITLE, WRITER WRITER, HIT HIT, REGDATE DT,
    ROW_NUMBER() OVER (ORDER BY NO DESC) ROWN
FROM 
    BOARD3;
    
-- 생성된 뷰 조회
SELECT * FROM BOARD33;

-- 조회할 때는
-- DB의 데이터만 사용하는것이 아님
-- DB의 데이터를 가공해서 뷰를 만들고,
-- 그 뷰를 사용함

평가

1. 부서테이블(DEPARTMENT)

  1. 테이블생성(제약조건X)
    부서번호 : NO NUMBER,
    부서명 : NAME(10이상)

  2. 제약조건
    기본키

  3. 지역컬럼 추가(AREA VARCHAR2(20))

  4. 지역컬럼의 체크값을 "부산", "서울", "대전" 만 가능하게

  5. 부서명의 길이를 30으로 변경

  6. 부서명에 NOT_NULL 추가

  7. 부서명에 UNIQUE 제약조건 설정 UQ_DEPT_NAME

--1. 테이블생성(제약조건X)
CREATE TABLE DEPARTMENT (
    NO NUMBER,
    NAME VARCHAR2(3)        
);

--2. 제약조건
--기본키
ALTER TABLE DEPARTMENT ADD CONSTRAINT PK_DEPT_NO PRIMARY KEY(NO);

--3. 지역컬럼 추가(AREA VARCHAR2(20))
ALTER TABLE DEPARTMENT ADD AREA VARCHAR2(20);

--4. 지역컬럼의 체크값을 "부산", "서울", "대전" 만 가능하게
ALTER TABLE DEPARTMENT 
	ADD CONSTRAINT CK_DEPT_AREA CHECK(AREA IN ('부산', '서울', '대전'));

--5. 부서명의 길이를 30으로 변경
ALTER TABLE DEPARTMENT MODIFY NAME VARCHAR2(30);

--6. 부서명에 NOT_NULL 추가
ALTER TABLE DEPARTMENT MODIFY NAME NOT NULL;

--7. 부서명에 UNIQUE 제약조건 설정 UQ_DEPT_NAME
ALTER TABLE DEPARTMENT ADD CONSTRAINT UQ_DEPT_NAME UNIQUE(NAME);

2. 회사원테이블(EMPLOYEE)

  1. 테이블 생성
    사원번호 : NO NUMBER,
    이름 : NAME,
    부서번호 : DEPTNO (FK),
    상사번호 : PEMPNO,
    직급 : POSITION VARCHAR2(10), (CK - "대리", "과장", "부장", "차장")만 가능
    급여 : PAY NUMBER,
    등록일 : REGDATE DATE

  2. 부서테이블의 부서번호를 회사원 테이블의 부서번호와 연결

--1. 테이블 생성
CREATE TABLE EMPLOYEE (
    -- PK 바로 설정 가능
    NO NUMBER PRIMARY KEY,
    NAME VARCHAR2(20),
    DEPTNO NUMBER,
    PEMPNO NUMBER,
    POSITION VARCHAR2(10),
    PAY NUMBER,
    REGDATE DATE,
    --CONSTRAINT PK_EMPL_NO PRIMARY KEY(NO),
    CONSTRAINT CK_EMP_POSITION CHECK(POSITION IN ('대리', '과장', '부장', '차장'))    
);

--2. 부서테이블의 부서번호를 회사원 테이블의 부서번호와 연결
ALTER TABLE EMPLOYEE 
	ADD CONSTRAINT FK_EMP_DEPTNO FOREIGN KEY(DEPTNO) REFERENCES DEPARTMENT(NO);
profile
The best

0개의 댓글