반응형
-- 08_Table_CUD
-- 테이블 생성
-- CRUD : 약어, DB 또는 실무 프로젝트에서 많이 사용
-- C(CREATE문, 생성), R(READ, SELECT문, 조회), U(UPDATE문, 수정), D(DELETE문, 삭제)
-- 테이블 의미 : DB(데이터베이스)에서 자료를 저장하는 곳(논리적 공간)
-- 프로젝트 : 개발자 계정으로 접속해서 테이블 등을 생성함 (SCOTT 계정)
-- 1) 테이블 생성 : DDL ( DATA DEFINITION LANGUAGE : 데이터 정의어)
-- NUMBER(크기) : 숫자 자료형 (실수, 정수 등등)
-- 예) NUMBER(2) : 두 자리수 정수, NUMBER(2, 3) : 두 자리수 정수 + 세 자리수 소수점
-- NUMBER : 실수, 정수 무한 크기로 지정가능
-- 단, 크기가 지정되면 그 크기 이하로만 값을 넣을 수 있음
-- VARCHAR2(크기) : 문자형 자료형 , 가변 자료형 (VS CHAR(크기): 고정 자료형)
-- 예) VARCHAR2(4000) : 최대 크기, VARCHAR2 : 잘 안씀(1글자만 들어감)
-- 사용법) CREATE TABLE 테이블명(
-- 컬럼명 NUMBER(2), // 2자리수 숫자
-- 컬럼명2 VARCHAR2(14), // 14자리 문자
-- ...
-- );
CREATE TABLE DEPT(
DNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);
-- 예제 1) 사원테이블 : EMP
-- 컬럼명 : ENO(사원번호, 숫자(4,0)
-- ENAME (사원명, 문자형(10)
-- JOB(직위, 문자형(9)
-- MANAGER(관리자) 숫자(4,0)
-- HIREDATE 입사일, 날짜형 (DATE)
-- SALARY 월급, 숫자형(7,2)
-- COMMISSION 상여금, 숫자형(7,2)
-- DNO 부서번호, 숫자형(2,0)
CREATE TABLE EMP (
ENO NUMBER(4, 0),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MANAGER NUMBER(4, 0),
HIREDATE DATE,
SALARY NUMBER(7, 2),
COMMISSION NUMBER(7, 2),
DNO NUMBER(2, 0)
);
-- 실무 예 : 테이블 만들기 : 테이블 복사(카피)
-- 예제 2) DEPARTMENT 테이블 복사하기 : DEPT_COPY 테이블을 만드세요
-- 1) 데이터까지 포함해서 복사
-- 사용법 ) CREATE TABLE 복사할 테이블명
-- AS
-- SELECT * FROM 원본테이블;
CREATE TABLE DEPT_COPY
AS
SELECT * FROM DEPARTMENT;
-- 2) 데이터빼고 테이블 설계(디자인)만 복사
-- CREATE TABLE 복사할 테이블명
-- AS
-- SELECT * FROM 원본테이블
-- WHERE 거짓조건;
CREATE TABLE DEPT_COPY2
AS
SELECT * FROM DEPARTMENT
WHERE 1=2; -- 거짓 조건 아무거나 붙이면 데이터 빼고 복사됨
-- 컬럼/테이블 주석 : 테이블이나 컬럼에 상세 설명을 붙일 수 있음
-- 예제 3) DEPT 테이블에 컬럼 주석 달기
-- 1) 테이블 주석달기
-- 사용법 ) COMMENT ON TABLE 테이블명 IS '테이블주석';
COMMENT ON TABLE DEPT IS '부서정보';
-- 2) 컬럼 주석달기
-- 사용법 ) COMMENT ON COULUMN 테이블명.컬럼명 IS '컬럼주석';
COMMENT ON COLUMN DEPT.DNO IS '부서번호';
COMMENT ON COLUMN DEPT.DNAME IS '부서명';
COMMENT ON COLUMN DEPT.LOC IS '부서위치';
-- 예제 3) 사원테이블의 EMP 의 테이블 주석/컬럼주석을 작성해서
-- 만들어 주세요
-- 보기 : EMP ( 테이블주석 : 사원정보 )
-- 컬럼주석 : ENO(사원번호),
-- ENAME(사원명),
-- JOB(직위),
-- MANAGER(관리자),
-- HIREDATE(입사일),
-- SALARY(월급),
-- COMMISSION(상여금),
-- DNO(부서번호)
COMMENT ON TABLE EMP IS '사원정보';
COMMENT ON COLUMN EMP.ENO IS '사원번호';
COMMENT ON COLUMN EMP.ENAME IS '사원명';
COMMENT ON COLUMN EMP.JOB IS '직위';
COMMENT ON COLUMN EMP.MANAGER IS '관리자';
COMMENT ON COLUMN EMP.HIREDATE IS '입사일';
COMMENT ON COLUMN EMP.SALARY IS '월급';
COMMENT ON COLUMN EMP.COMMISSION IS '상여금';
COMMENT ON COLUMN EMP.DNO IS '부서번호';
-- 2) 테이블 삭제
-- 사용법 ) DROP TABLE 삭제할테이블명
DROP TABLE DEPT_COPY;
-- 예제 5) DEPT_COPY2 를 삭제
DROP TABLE DEPT_COPY2;
-- 3) 데이터 추가(INSERT(CREATE)/삭제(DELECT)/수정(UPDATE) 명령어 : CUD
-- DML문(DATA MANIPULATION LANGUAGE): 데이터 조작어
-- 특징 : 명령문 실행 후 취소(ROLLBACK)
-- 1) 테이블 복사 : DEPT_COPY
CREATE TABLE DEPT_COPY
AS
SELECT * FROM DEPARTMENT
WHERE 1=2;
-- 예제 6) DEPT_COPY 테이블에 데이터 INSERT
-- 컬럼 : DNO(NUMBER(2,0)), DNAME(VARCHAR2(14)), LOC(VARCHAR2(13))
-- 사용법 : INSERT INTO 테이블명(컬럼명, 컬럼명2, ...)
-- VALUES(값, 값2, ...);
INSERT INTO DEPT_COPY(DNO, DNAME, LOC)
VALUES(10, 'ACCOUNTING', 'NEW YORK'); -- 데이터 추가
SELECT * FROM DEPT_COPY; -- 데이터 확인
-- 취소
ROLLBACK;
-- 영구반영 : 취소불가상태
-- 의미 : 영구반영하면 다른 유저가 현재 생성/수정/삭제한 데이터를 볼 수 있음
COMMIT;
-- 예제 7) 임시적으로 NULL 값을 입력해서 INSERT 하기ㅣ
-- 1) 암묵적으로(눈에 안보이지만) NULL 값 INSERT 하기
INSERT INTO DEPT_COPY(DNO, DNAME)
VALUES(30, 'SALES');
SELECT * FROM DEPT_COPY; -- 데이터 확인
-- 영구반영
COMMIT;
-- 2) 명시적으로 NULL 값 넣기
INSERT INTO DEPT_COPY(DNO, DNAME, LOC)
VALUES(40, 'OPERATIONS', NULL);
SELECT * FROM DEPT_COPY;
COMMIT;
-- 연습 2) DEPT_COPY 테이블에 50부서 'COMPUTING' 만들고 LOC는 ' ' 공백으로 INSERT 하세요
INSERT INTO DEPT_COPY(DNO, DNAME, LOC)
VALUES(50, 'COMPUTING', ' ');
SELECT * FROM DEPT_COPY;
COMMIT;
-- 연습용 테이블 복사
CREATE TABLE EMP_COPY
AS
SELECT * FROM EMPLOYEE
WHERE 1=2;
-- 연습 2)
INSERT INTO EMP_COPY(ENO, ENAME, JOB, HIREDATE, DNO)
VALUES (7000, 'CANDY', 'MANAGER', '2012/05/01', 10);
SELECT * FROM EMP_COPY;
COMMIT;
-- 예제 8) 명시적으로 날짜형으로 변환해서 INSERT하기
-- 날짜함수: TO_DATE(문자열, '날짜포맷')
-- 날짜포맷 : 'YYYY-MM-DD HH24:MI:SS'
INSERT INTO EMP_COPY (ENO, ENAME, JOB, HIREDATE, DNO)
VALUES(7010, 'CANDY2', 'MANAGER', TO_DATE('2012/05/01', 'YYYY-MM-DD HH24:MI:SS'), 10);
SELECT * FROM EMP_COPY;
COMMIT;
-- 예제 9) INSERT 할때 현재날짜(시간) 데이터 넣기 : SYSDATE(현재날짜)
INSERT INTO EMP_COPY (ENO, ENAME, JOB, HIREDATE, DNO)
VALUES(7020, 'CANDY3', 'MANAGER', SYSDATE, 10);
SELECT * FROM EMP_COPY;
COMMIT;
-- 예제 10) 다른 테이블의 데이터만 복사하기
SELECT * FROM DEPT_COPY;
-- 빠른 삭제 : DELETE 문 보다 속도 빠름 전체 삭제만 됨, 취소불가(ROLLBACK)
-- 사용법) TRUNCATE TABLE 테이블 명
TRUNCATE TABLE DEPT_COPY;
-- 다른 테이블의 데이터 복사(원본데이터 : DEPARTMENT(부서), 구조가 같아야함)
-- 사용법 ) INSERT INTO 복사될 테이블명
-- SELECT * FROM 원본 테이블명;
INSERT INTO DEPT_COPY
SELECT * FROM DEPARTMENT;
-- 결과 확인
SELECT * FROM DEPT_COPY;
-- 영구반영
COMMIT;
반응형
'SQL > SQL_이론' 카테고리의 다른 글
TABLE_CONSTRAINT (0) | 2023.09.14 |
---|---|
TABLE_ALTER (0) | 2023.09.14 |
SUBQUERY (0) | 2023.09.14 |
그룹함수 (0) | 2023.09.14 |
오라클 내장함수 (0) | 2023.09.08 |