1、子查询
语法:SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table);
注意点: 单行比较必须对应单行子查询(返回单一结果值的查询); 比如= , > 多行比较必须对应多行子查询(返回一个数据集合的查询);比如 IN , > ANY, > ALL 等
使用Exists操作:
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT 'X' FROM employees WHERE manager_id = outer.employee_id);
SELECT employee_id,last_name,job_id,department_id FROM employees WHERE employee_id IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL);
有兴趣的可以仔细分析这2个SQL,判断执行性能是否一样?除此还有 使用 Not Exists操作和NOT IN
2、DML语句(简单)
3、事务控制
典型例子:银行转账问题,三个流程操作必须同时完成,否则回滚
隐式的事务提交或回滚动作:
Commit, rollback 是显式的提交和回滚语句,还有一些隐式的提交和回滚是大家需要知道并引起注意的:
当如下事件发生是,会隐式的执行Commit动作: (1)、数据定义语句被执行的时候,比如新建一张表:Create Table … (2)、数据控制语句被执行的时候,比如赋权 GRANT …( 或者 DENY) (3)、正常退出 iSQL*Plus 或者PLSQL DEVELOPER, 而没有显式的执行 COMMIT 或者 ROLLBACK 语句 。
当如下事件发生时,会隐式执行Rollback 动作:
(1)、非正常退出 iSQL*Plus , PLSQL DEVELOPER, 或者发生系统错误。
4、锁
Oracle中的锁的主要作用就是:防止 并发事务对相同的资源(所谓资源是指 表、行、共享的数据结构、 数据字典行等)进行更改的时候,相互破坏。
锁有既有隐式的,也有显式的; 但某用户对某一批数据进行更改,而未提交之前,Oracle会隐式的进行加锁;
当然用户也可以显式的加锁,比如: Select … from TableA Where … For UPDATE NoWait。
Oracle 的锁是一门学问,涉及到较多知识,只能在在今后的工作中不断积累。
至于后面的视图、触发器、索引、集合、一些进阶查询就不做说明了