SQL 8-10. INSERT문에 서브 쿼리 사용 ーー MSSQL에서 지원되지 않는 기능
관련링크
본문
예제)
오라클 디비 예제 : INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM employees
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR', TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);
1 row created.
☞설명) INSERT문에 서브 쿼리 사용
INSERT문의 INTO절에 테이블 이름 대신 서브 쿼리를 사용할 수 있다.
이 서브 쿼리의 select목록에는 VALUES절의 열 목록과 동일한 수의 열 목록이 있어야 한다.
예를 들어, 중복되는 사원ID를 입력할 수도 없고 널이 아닌 필수 열에 대한 값을 생략할 수도 없습니다.
INSERT문에 사용된 서브 쿼리
job_id, salary, department_id
FROM employees
WHERE department_id = 50; 는 INSERT문이 수행될 테이블을 식별하는데 사용
된 서브 쿼리의 결과를 보여준다.
예제) DML문에 WITH CHECK OPTION 키워드 사용ーー MSSQL에서 지원되지 않는 기능
․ DML문의 테이블 및 열을 식별하는데 서브 쿼리를 사용한다.
․ WITH CHECK OPTION키워드를 사용하면 서브 쿼리에 없는 행이 변경되는 것을 막을 수 있다.
오라클 디비 예제 : INTO (SELECT employee_id, last_name,
email, hire_date, job_id, salary
FROM employees
WHERE department_id = 50 WITH CHECK OPTION)
VALUES (99999, 'Smith', 'JSMITH',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000);
INSERT INTO
*
ERROR at line 1 :
ORA-01402 : view WITH CHECK OPTION where-clause violation
☞설명) WITH CHECK OPTION키워드
WITH CHECK OPTION을 지정하면 INSERT, UPDATE 또는 DELETE문에서 테이블 대신 서브 쿼리가 사용된 경우 서브 쿼
리에 포함되지 않는 행이 해당 테이블에 생성되는 것을 막을 수 있습니다.
예제는 WITH CHECK OPTION키워드를 사용한다.
서브 쿼리가 부서50인 행을 식별하지만 부서ID가 SELECT목록에 없고 VALUES목록에서 이에 대한 값이 제공되어 있지 않
다.
이 행을 삽입하면 부서ID가 널인 행이 만들어지는데 이 행은 서브 쿼리의 결과에 포함되지 않는 행이다.