SQL.Cookbook笔记



1.where子句是在select之前进行处理的,在处理求解“问题”查询的where子句之前,salarycommission并不存在,要到where子句处理完成之后,别名才生效,然后from子句是在where之前处理的。将原查询放在from子句中,那么在最外层where子句之前,以及最外层的where子句“看到”别名之前,就已经生成查询结果。

select * from (select sal as aslary,comm ascommission from emp)x where salary <5000;

2.双竖线连接运算符

select ename ||’works as A’||job as msgfrom emp where deptno=10

3.case表达式直接在select语句中执行条件逻辑

Select ENAME,SAL,

         Casewhen sal <=2000 then ‘underpaid’

             When sal >=4000 then ‘overpaid’

                   Else‘OK’

         Endas STATUS

From emp;

3.多个字段排序,order by的次序是从左向右

对子串进行排序:select enamejob from emp order by substr(job,length(job)-2);

4.order by中使用case

Select ename,sal,job,comm from emp

order by

case when job=’salesman’

 then comm

else sal

       end;

动态改变对结果进行排序

Select ename,sal,job,comm,

case when job=’salesman’ then comm

else sal

         end as ordered

from emp order by 5;

5.union all把多个表的行组合在一起,注意对应列的数据类型要一致

Select enname as enname_and_dname,deptnofrom emp where deptno=10

Union all

Select ‘----------’,null from t1

Union all

Select dname,deptno from dept

//三个查询的结果叠加起来,不去重复,t1为有一个ID1的记录

Union 运算符可以筛选掉重复项,使用union大致等于使用unionall子句的查询结果使用distinct

Select distinct deptno from(select deptnofrom emo union all select deptno from dept);

通常查询中不要使用distinct,所以,一般除非确有必要,使用union all,而不适用union

6.等值联接(equi-join),也就是内联接,将多个表进行笛卡尔积,

Select e.ename,d.loc,e.deptno,d.deptno fromemp e,dept d where e.deptno=de.deptno

也可以将联接逻辑放在from子句中,而不是where子句中,inner关键字可选

Select e.ename,d.loc,from emp e inner join dept d on(e.deptno=d.deptno);

7 intersect集合操作

 

8.从一个表中查找另一个表没有的值

Select deptno from dept except(minus)select deptno from emp;

Select deptno from dept where deptno not in(select deptno from emp);

因为innot in 本质上是ornot or的操作,在sqltrue or null 结果为true false or null的结果是null,当结果中有一个null的时候,null就会延续下去。

要解决与not innull有关的问题,可以使用not exists和相关子查询

Select d.deptno from deptd where not exists (select null from emp e where d.deptno=e.deptno);

9.在处理聚集与联接混合操作时,需要注意是否会产生重复行,可以用两种方法避免聚集函数计算错误,方法一,在调用聚集函数时使用关键字distinct,这样每个值参与计算一次;方法二,在进行联合前进行聚集操作(在内联视图中),这样,聚集计算已经在联接前完成了,就避免了聚集函数计算问题

10.insert into dept (deptno,dname,loc)values (50,Programing’,‘Baltim)

插入别的表的数据:

Insert into dept_east (deptno,dname,loc)select deptno,dname,loc from dept where loc in(‘newyork’,’boston’);

复制表定义

Create table dept_2 like dept;

Create table dept_2 as select * from deptwhere 1=0

在使用create table as语句时,除非where后面的条件为false,此时就会生成一张空表

11.使用translatereplace将数字与字符分离

Select replace (

         Translate(data,’0123456789’,’0000000000’),’0’) ename,

         To_name(

          Replace(

          Translate(lower(data),

                   ‘abcdefghjklmnopqrstuvwxyz’,

                   Rpad(‘z’,26,’z’)),’z’))sal

From (

Select ename ||sal data from emp)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL 是计算机世界的语言,在用关系数据库开发报表时,将数据放入数据库以及从数据库中取出来,都需要SQL 的知识。很多人以一种马马虎虎的态度在使用SQL,根本没有意识到自己掌握着多么强大的武器。本书的目的是打开读者的视野,看看SQL 究竟能干什么,以改变这种状况。, 本书是一本指南,其中包含了一系列SQL 的常用问题以及它们的解决方案,希望能对读者的日常工作有所帮助。本书将相关主题的小节归成,如果读者遇到不能解决的SQL 新问题,可以先找到最可能适用的,浏览其中各小节的标题,希望读者能从中找到解决方案,至少可以找到点灵感。, 在这本书中有150 多个小节,这还仅仅是SQL 所能做的事情的一鳞半爪。解决日常编程问题的解决方案的数量仅取决于需要解决的问题的数量,本书没有覆盖所有问题,事实上也不可能覆盖;然而从中可以找到许多共同的问题及其解决方案,这些解决方案中用到许多技巧,读者学到这些技巧就可以将它们扩展并应用到本书不可能覆盖的其他新问题上。, 毫无疑问,本书的目标是让读者看到,SQL 能够做多少一般认为是SQL 问题范围之外的事情。在过去的10 年间,SQL 走过了很长的路,许多过去只能用C 和JAVA等过程化语言解决的典型问题现在都可以直接用SQL 解决了,但是很多开发人员并没有意识到这一事实。本书就是要帮助大家认识到这一点。, 现在,在对我刚才的话产生误解之前我先要申明:我是“如果没坏,就别去修它”这一教义的忠实信徒。例如,假如你有一个特定的业务问题要解决,目前只用SQL检索数据,而其他复杂的业务逻辑由其他语言完成,如果代码没有问题,而且性能也过得去,那么,谢天谢地。我绝对无意建议你扔掉以前的代码重新寻求完全SQL 的解决方案;我只是请你敞开思想,认识到1995 年编程用的SQL 跟2005 年用的不是一回事,今天的SQL 能做的事要多得多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值