본문 바로가기
Database

4/24 - DDL

by Jiwon_Loopy 2025. 4. 27.
반응형

목차


DDL - 데이터를 추가, 수정, 삭제하는 데이터 조작어


테이블 생성


  • 테이블 생성하기
    • 테이블 복사 후 생성
    CREATE TABLE DEPT_TEMP
    	AS SELECT * FROM DEPT;
    
    출력 결과
    
    Table DEPT_TEMP이(가) 생성되었습니다.
    
    • 테이블 버리기
    DROP TABLE 테이블 이름;
    

테이블에 데이터 추가 (INSERT)


  • INSERT
INSERT INTO 테이블 명 (컬럼 명...)
VALUES (값 ...)
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
							VALUES (50, 'DATABASE', 'SEOUL')

SELECT * FROM DEPT_TEMP;

출력 결과

Table DEPT_TEMP이(가) 생성되었습니다.

10	ACCOUNTING	NEW YORK
20	RESEARCH	DALLAS
30	SALES	CHICAGO
40	OPERATIONS	BOSTON
50	DATABASE	SEOUL
  • 열 지정 생략
    • 해당 테이블을 만들 때 생성된 열 순서로 삽입
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
							VALUES (60, 'NETWORK', 'BUSAN')

SELECT * FROM DEPT_TEMP;

출력 결과

10	ACCOUNTING	NEW YORK
20	RESEARCH	DALLAS
30	SALES	CHICAGO
40	OPERATIONS	BOSTON
50	DATABASE	SEOUL
60	NETWORK	BUSAN

테이블에 NULL 입력


INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
							VALUES (70,    ,'WEB', NULL);

SELECT * FROM DEPT_TEMP;

출력 결과

10	ACCOUNTING	NEW YORK
20	RESEARCH	DALLAS
30	SALES	CHICAGO
40	OPERATIONS	BOSTON
50	DATABASE	SEOUL
60	NETWORK	BUSAN
70	WEB	NULL

테이블에 날짜 데이터 입력


  • INSERT문으로 날짜 데이터 입력
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
            VALUES (9999, '홍길동', 'PRESIDENT', NULL, '2001/01/01', 5000, 1000, 10);

출력 결과

9999	홍길동	PRESIDENT		01/01/01	5000	1000	10
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
            VALUES (1111, '성춘향', 'MANAGER', 9999, '2001-01-05', 4000, NULL, 20);

출력 결과

9999	홍길동	PRESIDENT		01/01/01	5000	1000	10
1111	성춘향	MANAGER	9999	01/01/05	4000		20
NSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
            VALUES (2111, '이순신', 'MANAGER', 9999, TO_DATE('07/01/2001','DD/MM/YYYY'), 4000, NULL, 20);

출력 결과

9999	홍길동	PRESIDENT		01/01/01	5000	1000	10
1111	성춘향	MANAGER	9999	01/01/05	4000		20
2111	이순신	MANAGER	9999	01/10/07	4000		20
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
            VALUES (3111, '심청이','MANAGER',9999,SYSDATE,4000,NULL,30);

출력 결과

9999	홍길동	 PRESIDENT		  01/01/01	5000	1000	10
1111	성춘향	 MANAGER	9999	01/01/05	4000  null	20
2111	이순신	 MANAGER	9999	01/10/07	4000  null	20
3111	심청이	 MANAGER	9999	25/04/24	4000  null	30

서브쿼리를 이용하여 한 번에 여러 데이터 추가


  • VALUES 사용 시 에러
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
            SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO
            FROM EMP E, SALGRADE S
            WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
            AND S.GRADE = 1;

출력 결과

EMPNO	NUMBER(4,0)	Yes		1	
ENAME	VARCHAR2(10 BYTE)	Yes		2	
JOB	VARCHAR2(9 BYTE)	Yes		3	
MGR	NUMBER(4,0)	Yes		4	
HIREDATE	DATE	Yes		5	
SAL	NUMBER(7,2)	Yes		6	
COMM	NUMBER(7,2)	Yes		7	
DEPTNO	NUMBER(2,0)	Yes		8	

테이블 데이터 수정 (UPDATE)


  • UPDATE
UPDATE 변경할 테이블
SET 변경할 열1 = 데이터, 변경할 열2 = 데이터, ...
WHERE 변경할 대상 행을 선별하기 위한 조건
UPDATE DEPT_TEMP2
    SET LOC = 'SEOUL';

출력 결과

10	ACCOUNTING	SEOUL
20	RESEARCH	SEOUL
30	SALES	SEOUL
40	OPERATIONS	SEOUL

수정한 내용 되돌리기


ROLLBACK;

데이터 일부분만 수정


UPDATE DEPT_TEMP2
	SET DNAME = 'DATABASE',
			LOC   = 'SEOUL'
WHERE DEPTNO = 40;

출력 결과

10	ACCOUNTING	SEOUL
20	RESEARCH	SEOUL
30	SALES	SEOUL
40	DATABASE	SEOUL

테이블에 있는 데이터 삭제


DELETE FROM EMP_TEMP2
WHERE JOB = 'MANAGER';

출력 결과

7369	SMITH	CLERK	7902	80/12/17	800		20
7499	ALLEN	SALESMAN	7698	81/02/20	1600	300	30
7521	WARD	SALESMAN	7698	81/02/22	1250	500	30
7654	MARTIN	SALESMAN	7698	81/09/28	1250	1400	30
7788	SCOTT	ANALYST	7566	87/04/19	3000		20
7839	KING	PRESIDENT		81/11/17	5000		10
7844	TURNER	SALESMAN	7698	81/09/08	1500	0	30
7876	ADAMS	CLERK	7788	87/05/23	1100		20
7900	JAMES	CLERK	7698	81/12/03	950		30
7902	FORD	ANALYST	7566	81/12/03	3000		20
7934	MILLER	CLERK	7782	82/01/23	1300		10

메모


  • 페이징 처리
    • P - S AND E
    • S = P -1 * 페이지 당 열 수 (10) + 1
    • E = P * ROW
      • P: 현재 페이지 번호
      • ROW 또는 페이지 당 열 수: 한 페이지에 보여줄 데이터의 개수 (여기서는 10으로 가정)
      • S: 시작 번호 (Start)
      • E: 끝 번호 (End)
    // 페이징 처리
    // 서브쿼리 사용하지 않으면 연산 순서가 꼬임
    // H
    SELECT ROWNUM, A.EMPNO, A.ENAME
    FROM(
        SELECT
            ROWNUM, EMPNO, ENAME
        FROM EMP
        ORDER BY HIREDATE DESC) A
    WHERE ROWNUM BETWEEN 1 AND 10;
    
    출력 결과
    
    1	7876	ADAMS
    2	7788	SCOTT
    3	7934	MILLER
    4	7902	FORD
    5	7900	JAMES
    6	7839	KING
    7	7654	MARTIN
    8	7844	TURNER
    9	7782	CLARK
    10	7698	BLAKE
    
  • 하나의 트랜잭션이 끝나는 시점
    • COMMIT
    • ROLLBACK
    • DDL
728x90
반응형