sql语句写法注意项

来源:互联网 发布:王祖贤 倩女幽魂 知乎 编辑:程序博客网 时间:2024/05/21 11:06
 几年前Oracle用的比较多的时候,写的一个CheckList,希望对使用Oracle的朋友有帮助。因为当时主要基于Oracle 8i写的文档,对于目前9i,10G大部分都适用,但是可能个别地方会有所不同。

作为与SQL相关的程序员的要求,可以大大减少项目后期的“擦屁股”工作量。自己深有体会。

节选:
引用:
1.SQL编写的目标原则
a)使用尽量少的表联查
b)尽量缩小数据扫描范围
c)尽量避免子查询
d)尽量使用索引
e)尽量使用选择度高的索引
f)尽量降低排序的发生
g)尽量降低内存、硬盘的读取次数与排序次数

2.避免问题
a)过于复杂的SQL语句
如:多表联查、联合、子查询等
l彻底优化后可能无法提高性能
l执行计划解释起来有困难
l可能存在与操作系统有内在联系的隐患
l难以解决SQL中存在的问题
b)过于复杂的模型设计和编码
l过多的字段、表、视图等
l过多的索引、限制键、触发器等
l过于复杂的算法、业务逻辑
l过多的冗余字段、冗余数据
l蹩脚的SQL语句
c)太多的假设与不假思索
l相信DBA可以解决所有的问题
l相信ORACLE足够智能,以至超越人脑的水平
l相信性能可以通过硬件得以解决
l设计、开发阶段没把性能的考虑放在眼里
l相信时间紧迫,没工夫考虑太多问题

3.指导思想
a)写出简洁、明了、高效的SQL语句
......
 
 
Select语句的功能:
2009-11-05 19:22

a.             格式 select 。。。【from。。。where 。。。order by。。。having。。。group by。。。】。

b.              Select语句的执行顺序是:

     1.         from 将给定的表,关系,集合等等组合成一个大表。

    2.         where 从刚在的表中抽出符合条件的记录组成一个表。

    3.         group by 在刚生成的表中以字段的内容为标准分类汇总成一个表。(注意:它里面一定要带select中

用到的除了公式意外的所有字段。这里说的公式是指要分类汇总的主题。)

    4.         having 在刚生成的表中抽出符合条件的记录组成一个表。

    5.         order by 在刚生成的表中进行排序。

    6.         select 在抽取制定的字段组成一个集合。

c.              selectfrom语句的概念:

    1.         按照我们老师的思想from中用ABC来合并三个表,用in not in语句是非王道破坏了数据库关

这个概念(虽然本人那么认为,但是应该跟着老师的思路毕竟他比我见过世面)。我认为既然效率速度等方

面没有多大的区别的情况下能用为什么不用呢?我用这个反而比用join更清楚。等到不能用时再用join

    2.         最重要的概念(本人完全同意并一直真么做的)《只要是结果是二维表的就应该用SQL语句解决不

要把它分成小的SQL片段》。这样程序就一次性在SQL服务器上操作,不用频繁的访问数据库来降低系统的

效率。当然了你一个SQL解决不了的情况下应该用几个但是尽量少用,注意不要钻牛角尖说要一定用一个

SQL语句结果耽误工程就不行了。先不要管老师的说法先已解决问题为前提(虽然老师强调不要养成这样的

习惯,但是这个纯粹是个人看法仅供参考,我也希望人人想老师那样一句话来解决问题但是你行吗?)

d.              join连接几个表的时候,应该遵循将主要的表用于内连(直接用jion)附加的表用左连(left join)这

样不会出现混乱。

     1.         sql多表连接查询inner join, left join , right join ,full join ,cross join

     2.         inner join,full outer join,left join,right jion内部连接 inner join两表都满足的组合full outer 全连两表相同

的组合在一起,A表有,B表没有的数据(显示为null,同样B表有A表没有的显示为(null)

                     A left join B表左连,A表为基础,A表的全部数据,B表有的组合。没有的为null
A
right join B表右连,B表为基础,B表的全部数据,A表的有的组合。没有的为null

原创粉丝点击