INSERT 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-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)

系唔系有d無里頭,多q余的感覺, 的確。特別是那個 "where department_id = 50"
?我系sybase一般都是寫成下面的樣子的:
INSERT INTO employees(?????他們之前有什么區別呢, 我測過 效果系一樣的, 插入的果一條記錄都系咁 如下圖:
employee_id, last_name,
??????????????? email, hire_date, job_id, salary,
??????????????? department_id)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)

真系一溝樣。。。。
但系 加入with check option 就大大不同了。
INSERT INTO這個一句能正常執行。
????? (SELECT employee_id, last_name,
??????????????? email, hire_date, job_id, salary,
??????????????? department_id
?????? FROM employees
?????? where department_id = 50
witch check option
?????? )
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)

但是,修改一下, 將要插入的department_id 改成60 就失敗了。
INSERT INTO
????? (SELECT employee_id, last_name,
??????????????? email, hire_date, job_id, salary,
??????????????? department_id
?????? FROM employees
?????? where department_id = 50
?????? with check option
?????? )
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,60)

因為加入with check option 不滿足subquery中的where條件的話,就不允許插入.
上面的的where 條件是 department_id = 50, 而插入的值是60 所以失敗了。
with check option還有另1個限制:。where條件指定的列如果不在insert的列中,也不允許插入
例如:
INSERT INTO
????? (SELECT employee_id, last_name,
??????????????? email, hire_date, job_id, salary
???????????????
?????? FROM employees
?????? where department_id = 50
?????? with check option
?????? )
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000)

也就是要保證插入的數據 要跟子查詢相對應。
如果不加入with check option, 上面的語句是能執行的
