본문 바로가기

DB

1011 DB - 서브 쿼리를 통한 행 입력

728x90
반응형

Contents

     

    서브쿼리를 통한 행 입력

    실습용 sales_reps 테이블 생성

     
    CREATE TABLE sales_reps AS
    (SELECT employee_id id, last_name name, salary, commission_pct
    FROM employees
    WHERE 1=2);
     
    SELECT * FROM sales_reps;
    ID|NAME|SALARY|COMMISSION_PCT|
    
    --+----+------+--------------+

     

    서브쿼리를 통하여 값을 입력하는 것은 다른 테이블의 데이터를 복사하여 입력하는 방법이다.

    서브쿼리를 통해서 출력되는 행의 수가 여러 개더라도 문제없이 입력이 가능하다.

    INSERT INTO절의 컬럼의 순서와 서브쿼리가 출력하는 컬럼의 순서 데이터타입, 크기는 다 맞춰져야 한다.

     
    INSERT INTO sales_reps(id, name, salary, commission_pct)
    SELECT employee_id, last_name, salary, commission_pct
    FROM employees
    WHERE job_id LIKE '%REP%';

     

     
    SELECT * FROM sales_reps;
    ID |NAME      |SALARY|COMMISSION_PCT|
    
    ---+----------+------+--------------+
    
    150|Tucker    | 10000|           0.3|
    
    151|Bernstein |  9500|          0.25|
    
    152|Hall      |  9000|          0.25|
    
    153|Olsen     |  8000|           0.2|
    
    154|Cambrault |  7500|           0.2|
    
    155|Tuvault   |  7000|          0.15|
    
    …
    
    174|Abel      | 11000|           0.3|
    
    175|Hutton    |  8800|          0.25|
    
    176|Taylor    |  8600|           0.2|
    
    177|Livingston|  8400|           0.2|
    
    178|Grant     |  7000|          0.15|
    
    179|Johnson   |  6200|           0.1|
    
    202|Fay       |  6000|              |
    
    203|Mavris    |  6500|              |
    
    204|Baer      | 10000|              |

     

     

    UPDATE 구문

    테이블의 기존 행의 값을 갱신하는 DML 구문

     

    키워드

    UPDATE : 갱신할 값이 있는 테이블을 명시

    SET : 실제 수행할 연산식을 작성하는 위치

    WHERE : 갱신 대상이 될 행에 대한 조건절. 옵션절로 WHERE절을 생략하는 경우 테이블의 모든 행에 대한 갱신작업을 진행하게 된다..



    UPDATE 구문 실습용 테이블 생성

     
    CREATE TABLE emp2
    AS SELECT * FROM employees;
     
    SELECT employee_id, department_id
    FROM emp2
    WHERE employee_id = 113;
    EMPLOYEE_ID|DEPARTMENT_ID|
    
    -----------+-------------+
    
            113|          100|

     

    emp2테이블의 employee_id의 값이 113인 사원에 대해서 department_id = 50의 갱신작업을 실행하는 구문을 작성

     
    UPDATE emp2
    SET department_id = 50
    WHERE employee_id = 113;
    SELECT employee_id, department_id
    FROM emp2
    WHERE employee_id = 113;
     
    EMPLOYEE_ID|DEPARTMENT_ID|
    
    -----------+-------------+
    
            113|           50|

     

     

    WHERE 절 없이 UPDATE 구문 실행

     
    UPDATE emp2
    SET department_id =100;
    SELECT employee_id, department_id FROM emp2;
    
    
    
    EMPLOYEE_ID|DEPARTMENT_ID|
    
    -----------+-------------+
    
            100|          100|
    
            101|          100|
    
            102|          100|
    
            103|          100|
    
            104|          100|
    
            105|          100|
    
            106|          100|

     

     

    113번 사원의 job_id, salary 컬럼의 값으로 205번 사원의 job_id, salary컬럼의 값으로 갱신하는 구문

    UPDATE employees
    SET job_id = (
        SELECT job_id
        FROM employees
        WHERE employee_id = 205
    ), salary = (SELECT salary
            FROM employees
            WHERE employee_id = 205
        )
    WHERE employee_id = 113;
     
    SELECT employee_id, job_id, salary
    FROM employees
    WHERE employee_id IN (113, 205);
    EMPLOYEE_ID|JOB_ID|SALARY|
    
    -----------+------+------+
    
            113|AC_MGR| 12008|
    
            205|AC_MGR| 12008|

     

     

    DELETE 구문

    테이블의 기존 행의 값을 삭제하는 구문

     

    키워드 

    DELETE 절 : 삭제할 데이터가 있는 테이블 명시

    WHERE : 삭제할 행을 선택할 수 있는 조건절



     
    SELECT * FROM departments;
    DEPARTMENT_ID|DEPARTMENT_NAME     |MANAGER_ID|LOCATION_ID|
    
    -------------+--------------------+----------+-----------+
    
    …
    
              260|Recruiting          |          |       1700|
    
              270|Payroll             |          |       1700|
    
              280|Go Home             |       100|       1700|
    
              290|Nap                 |          |           |
    
              300|Prog                |          |           |



     
    DELETE FROM departments
    WHERE department_name = 'Go Home';

     

     
    SELECT * FROM departments;
    DEPARTMENT_ID|DEPARTMENT_NAME     |MANAGER_ID|LOCATION_ID|
    
    -------------+--------------------+----------+-----------+
    
             240|Government Sales    |          |       1700|
    
             250|Retail Sales        |          |       1700|
    
             260|Recruiting          |          |       1700|
    
             270|Payroll             |          |       1700|
    
             290|Nap                 |          |           |
    
             300|Prog                |          |           |



    WHERE절 없이 DELETE 구문 사용

    DELETE 절에서 WHERE절이 없는 경우 해당 테이블의 모든 행이 삭제된다.

     
    DELETE FROM emp2;
     
    SELECT COUNT(*)
    FROM emp2;
    COUNT(*)|
    
    --------+
    
           0|

     

    728x90
    반응형

    'DB' 카테고리의 다른 글

    1018 DB - 트랜잭션 제어어  (0) 2022.10.18
    1011 DB - 트랜잭션 Transaction  (1) 2022.10.11
    1004 DB - SubQuery 서브 쿼리  (0) 2022.10.04
    1004 JSP - (MVC) 커넥션 풀 (DBCP), boardList  (1) 2022.10.04
    0928 DB - JOIN  (1) 2022.09.28