2. 建立一个报表,显示当前的员工的岗位与刚进公司时的岗位一样的员工编号和岗位
编号。
8-4 MINUS(补集)
1、使用 MINUS运算符返回第一个查询行与第二个查询不相同的行。 2、规则
? 在查询中被SELECT语句选择的列数和数据类型必须与在查询中所使用的所
有的SELTCT语句中的一样,但列的名字不必一样。
? 对于MINUS运算,在WHERE子句中所有的列都必须在SELECT子句中。
演示 - 使用MINUS
1. 查询EMPLOYEES表中的员工工资属于(5000-6000)这个档,而不属于(5500-7000)
这个档的员工。
练习 - 使用MINUS
1. 查看表DEPARTMENTS和EMPLOYEES。
2. 要显示部门列表但不包括岗位为ST_CLERK。用集合操作去建立此查询。
练习 - 使用MINUS
1. 查看表COUNTRIES、LOCATIONS和DEPARTMENTS。 2. 显示没有部门地址的的所有国家。显示国家的ID和名称。使用集合操作建立此查询。
9-1数据操纵DML概念
1、数据操纵语言(DML)可以向数据库添加、更新和删除数据。 2、事务处理由DML语句的集合组成,这些语句构成一个逻辑工作单元。
如银行帐户转帐、银行取款等。
9-2 DML-INSERT单行
1、语法
INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
2、此语法一次只能向表新增一行数据。
演示 - 使用INSERT
1. 插入一个包含有每一列的值 的新行。(插入时要注意department_id的值要唯一)
2. 按照表中列的顺序列出值,也可在INSERT子句中列出列。 3. 将字符和日期值包含在单引号中。
演示 - 使用INSERT
1. 插入时带空值的行。
? ?
隐式:在列表中省略该行。
显式:在VALUES子句中指定NULL关键字。
演示 - 使用INSERT
1. 插入日期值。
练习 - INSERT
1. 将下列数据增加到EMPLOYEES表中。
2. EMPLOYEE_ID | FIRST_NAME | LAST_NAME | EMAIL | PHONE_NUMBER | HIRE_DATE
| SALARY 600 三 张 zs@qq.com 13976542313 2005-06-01 4000
610 四 李 ls@qq.com 13976541243 2005-06-01 3000
9-3 DML- INSERT多行
1、使用子查询的INSERT语句可以一次新增多行。 2、不能使用VALUES子句。
3、使INSERT子句中的列数与子查询中的列数匹配。
演示 - 一次新增多行
1. 创建一个新表hr.copy_employees。
2. 用子查询实现从hr.employees表里的数据一次新增到表copy_employees.
9-4 DML-UPDATE
1、使用UPDATE修改现有的行。 2、语法
UPDATE table
SET column= value[, column = value, ...] [WHERE condition];
3、一次更新多个行。
演示 - 使用UPDATE
1. 如果指定WHERE子句,可以修改特定的某一行或多行。 2. 如果省略WHERE子句,则会修改表中的所有行。
演示 - UPDATE里使用子查询
1. 更新员工114的职务和薪金,使之与员工205的职务和薪金相同。
练习 - 使用UPDATE
1. 查看表EMPLOYEES,将薪金低于2500的所有员工的薪金更改为2800。
9-5 DML-DELETE
1、使用DELETE语句从表中删除现有的行。 2、语法
DELETE [FROM] table [WHERE condition];
注:如果没有删除任何行,则会返回“0 rows deleteed.”
演示 - 使用DELETE
1. 如果指定WHERE子句,则可以删除特定的行。 2. 如果省略了WHERE子句,则会删除表中的所有行。
演示 - DELETE里使用子查询
1. 在DELETE语句中使用子查询,以便根据另一个表中的值来删除表中的行。
练习 - 使用DELETE
1. 将last_name为Bell的员工从表EMPLOYEES中删除。
9-6 DML-MERGE(合并)
1、使用MERGE语句可以有条件地在表中插入或更新行。 2、Oracle的语法
MERGE INTO table_name table_alias USING (table|view|sub_query) alias ON (join condition) WHEN MATCHED THEN UPDATE SET col1 = col_val1,
col2 = col2_val WHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values);
3、H2的语法
MERGE INTO tableName ( columnName ) , ... KEY ( columnName ) , ... VALUES ( DEFAULT expression , ... ) , ... select 演示 - 使用MERGE(不支持) 1. 将COPY_EMPLOYEES表中的EMPLOYEE_ID与EMPLOYEES表中的
EMPLOYEE_ID匹配。如果发现匹配项,就更新COPY_EMPLOYEES中的行,与
EMPLOYEES表中行匹配。如果没有找到该行,就将其插入到COPY_EMPLOYEES表中。
9-7 数据库事务处理
1、事务处理由以下组成:
? 对数据进行一次一致更改的DML语句 ? 一条DDL(数据定义语言)语句 ? 一条DCL(数据控制语言)语句
2、事务如何开始?
? 在执行第一个DML SQL语句时开始 ? 在发生下列事件之一时结束: - 发出COMMIT或ROLLBACK - 执行DDL或DCL语句(自动提交) - 系统崩溃
3、优点
? 确保数据的一致性
? 在使更改生效之前可预览更改的数据 ? 按逻辑关系对相关操作进行分组
9-8 控制事务处理
1、可以用COMMIT、SAVEPOINT和ROLLBACK语句控制事务处理逻辑。 COMMIT:将所有待定的数据更改永久化,从而结束当前的事务处理。
SAVEPOINT name:在当前事务处理中标记一个保存点。 ROLLBACK:将放弃所有的数据更改,从而结束当前的事务处理
ROLLBACK TO SAVEPOINT name:将当前的事务处理回退到指定的保存点,从而放
弃从该保存点之后所作的所有更改或创建的保存点。如果省略了TO SAVEPOINT子句,ROLLBACK语句将回退整个事务处理。
演示 - 控制事务处理-ROLLBACK
1. 当我们对表做修改后,可以对所做的修改进行撤消(也叫回滚)。
10-1创建表
1、语法
CREATE TABLE [schema.]table
(column datatype[DEFAULT expr][, ...]);