Oracle

阅读更多

今天总结一下最近用的数据库,经过一段时间的努力,发现其实数据库表和表之间的关联还是很简单的,没有什么难处,数据库中关联的写法有很多中,左关联,left  join 表1 on 表1.id=表2.id 内关联用in 右关联 right等,

下面是我在其他的博客中借鉴过来的,希望对象大家有用

t-sql操作符中,不等号(!=,<>),查询出来的结果集不包含有当前字段为null的数据;

1.查询中用到的关键词主要包含六个,并且他们的顺序依次为
select--from--where--group by--having--order by
2.from后面的表关联,是自右向左解析的
而where条件的解析顺序是自下而上的。
在写SQL文的时候,尽量把数据量大的表放在最右边来进行关联,
而把能筛选出大量数据的条件放在where语句的最下面。

SQL Select语句完整的执行顺序【从DBMS使用者角度】:
  1、from子句组装来自不同数据源的数据;
  2、where子句基于指定的条件对记录行进行筛选;
  3、group by子句将数据划分为多个分组;
  4、使用聚集函数进行计算;
  5、使用having子句筛选分组;
  6、计算所有的表达式;
  7、使用order by对结果集进行排序。
from 子句--执行顺序为从后往前、从右到左
表名(最后面的那个表名为驱动表,执行顺序为从后往前, 所以数据量较少的表尽量放后)
oracle 的解析器按照从右到左的顺序处理,FROM 子句中的表名,FROM 子句中写在最后的表(基础表 driving table)将被最先处理,即最后的表为驱动表,在FROM 子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3 个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指被其他表所引用的表
多表连接时,使用表的别名并把别名前缀于每个Column上。可以减少解析的时间并减少那些由Column 歧义引起的语法错误.
 ORACLE 采用自下而上从右到左的顺序解析Where 子句,根据这个原理,表之间的连接必须写在其他Where 条件之前, 可以过滤掉最大数量记录的条件必须写在Where 子句的末尾。
group by--执行顺序从左往右分组
提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。即在GROUP BY前使用WHERE来过虑,而尽量避免GROUP BY后再HAVING过滤
having 子句----很耗资源,尽量少用
避免使用HAVING 子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作.
如果能通过Where 子句在GROUP BY前限制记录的数目,那就能减少这方面的开销.
(非oracle 中)on、where、having 这三个都可以加条件的子句中,on 是最先执行,where 次之,having 最后,因为on 是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,
where 也应该比having 快点的,因为它过滤数据后才进行sum,在两个表联接时才用on 的,所以在一个表的时候,就剩下where 跟having比较了。
select子句--少用*号,尽量取字段名称。
ORACLE 在解析的过程中, 会将依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 使用列名意味着将减少消耗时间。
sql 语句用大写的;因为 oracle 总是先解析 sql 语句,把小写的字母转换成大写的再执行
order by子句--执行顺序为从左到右排序,很耗资源

 

你可能感兴趣的:(数据库)