INSERT语句语法:INSERT INTO table_name [(column [, column...])]VALUES (value [, value...]);使用INSERT语句向表中插入数据;使用这种语法一次只能向表中插入一条数据。注意:字符和日期型数据应包含在单引号中。在INSERT语句中使用子查询,使插入基于另外表中的数据。
从其它表中拷贝数据,例子:INSERT INTO sales_reps(id, name, salary, commission_pct)SELECT employee_id, last_name, salary, commission_pctFROM employeesWHERE job_idLIKE '%REP%';
UPDATE语句语法:UPDATE table_nameSET column = value[, column = value, ...][WHERE condition];使用UPDATE语句更新数据;可以一次更新多条数据。在UPDATE语句中使用子查询,使更新基于另一个表中的数据。
DELETE语句语法:DELETE [FROM] table_name[WHERE condition];使用DELETE语句从表中删除数据。在DELETE 中的WHERE内使用子查询,使删除基于另一个表中的数据。
*******在DML语句中使用WITH CHECK OPTION关键字,可以避免修改子查询范围外的数据。主要是用在视图中,通过视图执行的INSERTS和UPDATES语句操作,其不能添加或修改超出该视图约束的数据,因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。*******
***使用DEFAULT关键字可以表示默认值,显式默认值可以在INSERT和UPDATE语句中使用。***
合并语句语法:MERGE INTO table_name table_aliasUSING (table | view | sub_query) aliasON (join condition)WHEN MATCHED THEN UPDATE SET col1 = col_val1, col2 = col2_valWHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values);使用merge语句,可以根据指定的条件对表进行数据的插入或更新操作。如果满足条件的行存在,执行更新操作;否则执行插入操作: – 避免多次重复执行插入和删除操作 – 提高效率而且使用方便 – 在数据仓库应用中经常使用
SET操作符:- UNION操作符:返回两个查询(SELECT语句组成)的结果集的并集。- UNION ALL 操作符:返回两个查询(SELECT语句组成)的结果集的并集以及两个结果集的重复部分。- INTERSECT 操作符:操作符返回两个查询(SELECT语句组成)结果集的交集。- MINUS 操作符:操作符返回两个查询(SELECT语句组成)结果集的补集。
使用SET操作符注意事项- 在SELECT列表中的列名和表达式在数量和数据类型上要相对应- 括号可以改变执行的顺序- ORDER BY子句: – 只能在语句的最后出现 – 可以使用第一个查询中的列名,别名或相对位置 多表INSERT语句: - INSERT . . . SELECT是使用一个DML语句向多个表中插入数据的一部分
- 多表INSERT语句可作为数据仓库应用中向目标数据库传送数据的一种方法
- 它具有更高的效率:
–避免使用多个DML 语句
–使用一个DML 完成IF . . . THEN的逻辑处理Oracle9i提供以下四种多表INSERT语句类型:
- 无条件的INSERT ALL
- 有条件的INSERT ALL
- 有条件的INSERT FIRST
- 旋转INSERT 无条件的INSERT ALL 应用举例INSERT ALL INTO sal_history VALUES (EMPID, HIREDATE, SAL) INTO mgr_history VALUES (EMPID, MGR, SAL)SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGRFROM employeesWHERE employee_id > 200; 有条件的INSERT ALL 应用举例INSERT ALLWHEN SAL > 10000 THEN INTO sal_history VALUES (EMPID, HIREDATE, SAL)WHEN MGR > 200 THEN INTO mgr_history VALUES (EMPID, MGR, SAL)SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGRFROM employeesWHERE employee_id > 200; 有条件的INSERT FIRST应用举例INSERT FIRSTWHEN SAL > 25000 THEN INTO special_sal VALUES(DEPTID, SAL)WHEN HIREDATE like ('%00%') THEN INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)WHEN HIREDATE like ('%99%') THEN INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)ELSE INTO hiredate_history VALUES(DEPTID, HIREDATE)SELECT department_id DEPTID, SUM(salary) SAL, MAX(hire_date) HIREDATEFROM employeesGROUP BY department_id; 旋转INSERT 应用举例(实现从sales_source_data表中不断读取数据条并插入到sales_info表中)INSERT ALL INTO sales_info VALUES (employee_id,week_id,sales_MON) INTO sales_info VALUES (employee_id,week_id,sales_TUE) INTO sales_info VALUES (employee_id,week_id,sales_WED) INTO sales_info VALUES (employee_id,week_id,sales_THUR) INTO sales_info VALUES (employee_id,week_id, sales_FRI)SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,sales_WED, sales_THUR,sales_FRIFROM sales_source_data;