데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL), 트랜잭션 제어어(TCL)
사용자에게 권한 생성 혹은 권한 삭제 명령어.
CREATE : 계정 생성
DROP : 계정 삭제
GRANT : 권한 생성
REVOKE : 권한 삭제
데이터의 구조를 정의하기 위한 테이블 생성, 수정, 삭제 명령어.
CREATE : 테이블 생성
DROP : 테이블 삭제
ALTER : 테이블 수정
TRUNCATE : 테이블에 있는 모든 데이터 삭제
RENAME : 테이블명 변경
데이터 추가, 조회, 수정 및 삭제를 위한 명령어.
-- commit 또는 rollback
SELECT : 데이터 조회
INSERT : 데이터 입력
UPDATE : 데이터 수정
DELETE : 데이터 삭제
COMMIT : 적용하기
ROLLBACK : 되돌리기
SAVEPOINT : 저장점을 정의
** SELECT은 결과화면과 SQL문 작성하고, 나머지는 SQL문만 작성해서 제출합니다.
CREATE USER GUEST03 IDENTIFIED BY "1234";
GRANT CONNECT, RESOURCE, DBA TO GUEST03;
CREATE TABLE dept03 (
dept NUMBER,
dname VARCHAR2(7)
);
ALTER TABLE dept03 ADD area VARCHAR2(20);
ALTER TABLE dept03 MODIFY dname VARCHAR2(20);
ALTER TABLE dept03 MODIFY dname NOT NULL;
ALTER TABLE dept03 ADD CONSTRAINT PK_DEPT03_NO PRIMARY KEY(deptno);
ALTER TABLE dept03 ADD CONSTRAINT UQ_DEPT01_DNAME UNIQUE(dname);
CREATE TABLE emp03(
empno NUMBER PRIMARY KEY,
name VARCHAR2(10),
deptno NUMBER NOT NULL,
pempno NUMBER,
pay NUMBER NOT NULL,
position VARCHAR(10),
regdate TIMESTAMP,
CONSTRAINT CK_EMP03_POSITION CHECK ( position IN ('사원','대리','과장', '차장','부장') )
);
ALTER TABLE EMP03 ADD CONSTRAINT FK_EMP03_DEPTNO FOREIGN KEY(deptno) REFERENCES DEPT03(deptno);
CREATE SEQUENCE SEQ_EMP03_EMPNO START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCACHE;
INSERT INTO DEPT03 ( DEPTNO, DNAME, AREA) VALUES (101,'영업부', '');
INSERT INTO DEPT03 ( DEPTNO, DNAME, AREA) VALUES (102,'총무부', '');
INSERT INTO DEPT03 ( DEPTNO, DNAME, AREA) VALUES (103,'기획부', '');
INSERT INTO DEPT03 ( DEPTNO, DNAME, AREA) VALUES (104,'홍보부', '');
COMMIT;
INSERT INTO EMP03(EMPNO, NAME, DEPTNO, PEMPNO, PAY, POSITION, REGDATE) VALUES (SEQ_EMP03_EMPNO.NEXTVAL, '가가가', 101, 1001, 200, '부장', CURRENT_DATE);
INSERT INTO EMP03(EMPNO, NAME, DEPTNO, PEMPNO, PAY, POSITION, REGDATE) VALUES (SEQ_EMP03_EMPNO.NEXTVAL, '나나나', 104, 1001, 200, '차장', CURRENT_DATE);
INSERT INTO EMP03(EMPNO, NAME, DEPTNO, PEMPNO, PAY, POSITION, REGDATE) VALUES (SEQ_EMP03_EMPNO.NEXTVAL, '다다다', 103, 1001, 200, '과장', CURRENT_DATE);
INSERT INTO EMP03(EMPNO, NAME, DEPTNO, PEMPNO, PAY, POSITION, REGDATE) VALUES (SEQ_EMP03_EMPNO.NEXTVAL, '라라라', 102, 1001, 200, '대리', CURRENT_DATE);
INSERT INTO EMP03(EMPNO, NAME, DEPTNO, PEMPNO, PAY, POSITION, REGDATE) VALUES (SEQ_EMP03_EMPNO.NEXTVAL, '마마마', 104, 1001, 200, '사원', CURRENT_DATE);
COMMIT;
UPDATE DEPT03 SET AREA =
CASE
WHEN (DEPTNO=101) THEN '서울'
ELSE '부산'
END;
COMMIT;
DELETE FROM EMP03 WHERE DEPTNO=101;
COMMIT; 또는 ROLLBACK;
SELECT NAME 사원이름, POSITION 직급 FROM EMP03 WHERE DEPTNO IN (101, 102) ORDER BY EMPNO ASC;
SELECT E.EMPNO 사원코드, E.NAME 사원이름, TO_CHAR(E.REGDATE, 'YYYY-MM-DD')날짜 FROM EMP03 E
SELECT NAME 이름, PAY 급여,
CASE
WHEN (PAY >=0 AND PAY<=200) THEN PAY*0.05
WHEN (PAY >=201 AND PAY<=300) THEN PAY*0.1
WHEN (PAY >=201 AND PAY<=300) THEN PAY*0.15
ELSE PAY*0.2
END 세금
FROM EMP03;
SELECT DEPTNO, AVG(PAY) 평균급여, COUNT(*) 인원수 FROM EMP03 GROUP BY DEPTNO;
SELECT D.DEPTNO 부서번호, DNAME 부서명 , AP 평균급여 FROM DEPT03 D,
( SELECT DEPTNO, AVG(PAY) AP FROM EMP03 GROUP BY DEPTNO HAVING AVG(PAY) > 300) E
WHERE D.DEPTNO=E.DEPTNO;
CREATE INDEX INDEX_EMP03 ON emp03(name);
CREATE OR REPLACE VIEW EMP03_VIEW AS
SELECT E.EMPNO 사원번호, E.NAME 사원이름, D.DNAME 부서명, E.PAY 급여
FROM EMP03 E, DEPT03 D WHERE E.DEPTNO=D.DEPTNO;
CREATE OR REPLACE FUNCTION FUNC_GET_SEQ RETURN NUMBER
IS
V_SEQ NUMBER := 0;
BEGIN
SELECT SEQ_EMP03_EMPNO.NEXTVAL INTO V_SEQ FROM DUAL;
RETURN V_SEQ;
END;
/
-- 확인
SELECT FUNC_GET_REQ FROM DUAL;