ORACLE SQL常用五大注意点

来源:互联网 发布:淘宝信誉度等级表 编辑:程序博客网 时间:2024/05/20 15:37

1.-COUNT(expr) 返回用expr 标识的列所含非空行的数量。所以有时候为了节约性能不用count(*),但是用COUNT(expr) expr不用*时最好用主键,以防丢失记录。有的人经常在项目中发现总数和列表的记录对不上可能就是这个原因。

2. GROUP BY注意点

– GROUP BY子句后的列可以不在SELECT语句中出现。
– SELECT子句中出现的非分组函数列必须在GROUP BY子句
中出现

3.Oracle查询语句的执行顺序

FROM WHERE GROUP BY SELECT ORDER BY
总结SELECT语句执行过程:
– 通过FROM子句中找到需要查询的表;
– 通过WHERE子句进行非分组函数筛选判断;
– 通过GROUP BY子句完成分组操作;
– 通过HAVING子句完成组函数筛选判断;
– 通过SELECT子句选择显示的列或表达式及组函数;
– 通过ORDER BY子句进行排序操作

4.Oracle解析SQL的顺序

ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句
中写在最后的表(基础表driving table)将被最先处理. 在FROM子句中包含多个表的
情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运
用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并
对记录进行排序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第
二个表中检索出的记录与第一个表中合适记录进行合并.

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须
写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在
WHERE子句的末尾

   项目中经常有人以为ORACLE从上至下执行,因此写出的SQL容易对性能造成一定影响。

5.外部连接运算符  

 只能放在连接条件表达式的一侧,即:缺少相关连接信息的表一侧。

它能返回该表中那些在另一个表中没有得到匹配的记录。


所有部门信息,不管部门是否有员工。
SELECT e.last_name, e.job_id, e.department_id,
d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id;
所有员工信息,不管员工是否有部门。
SELECT e.last_name, e.job_id,
e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id= d.department_id(+);