SQL Cookbook(读书笔记)No.1
2012-01-12 11:34
309 查看
看了SQL CookBook ,收获颇多,本文作为读书笔记,只介绍MS Sql,偶尔有自己的想法夹在在里面 ,希望拍砖,共勉之!
测试环境:SQL Server 2005
文中用的数据库脚本
执行语句,结果"查询时显示该列无效……"。
A:将查询作为内联视图就可以引用其中的取别名的列:
PS:WHERE子句是在SELECT 之前进行处理的,这样在处理“问题”查询的WHERE子句前,SALARY和COMMISSION并不存在,要到WHERE子句处理完成之后,别名才生效。FROM子句是在WHERE之前处理的。这样最外层的WHERE子句看到别名之前,就已经生成了查询结果。
数据来自EMP表中的ENAME和JOB列:
A:使用"+"运算符进行连接操作。
A:使用CASE 表达式
Q:查询中返回N行。
A: 使用TOP 关键字,想、来限制返回的行数:
select top n * from [tablename]
A:使用内置函数NEWID、TOP和ORDER BY,返回随机结果集:
PS:ORDER BY子句接受函数返回值,并使用它改变结果集的次序。先执行ORDER BY子句,在查询返回的行数。参照Orcle的解决方案,原理就清楚多了:
A:使用COALESCE函数
ps:
函数 COALESCE ( expression [ ,...n ] )
参数:expression 任何类型的表达式。 n 表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。
作用:返回表达式中第一个非空表达式.
我们可以用case来实现,但明显不如函数灵活.
测试环境:SQL Server 2005
文中用的数据库脚本
一、检索记录
1.6 在WHERE子句中引用取别名的列
Q:前面已经使用别名,我们想在WHERE子句中引用别名,语句如下所示:select sal as salary , comm as commission from emp where salary < 5000
执行语句,结果"查询时显示该列无效……"。
A:将查询作为内联视图就可以引用其中的取别名的列:
select * from ( select sal as salary , comm as commission from emp ) x where salary < 5000
PS:WHERE子句是在SELECT 之前进行处理的,这样在处理“问题”查询的WHERE子句前,SALARY和COMMISSION并不存在,要到WHERE子句处理完成之后,别名才生效。FROM子句是在WHERE之前处理的。这样最外层的WHERE子句看到别名之前,就已经生成了查询结果。
1.7 连接列值
Q:将多值作为一列返回。查询表EMP,返回如下结果集:数据来自EMP表中的ENAME和JOB列:
select ename,job from emp where deptno=10
A:使用"+"运算符进行连接操作。
select ename+' WORKS AS A '+job as msg from emp where deptno=10
1.8 在SELECT语句中使用条件逻辑
Q:在SELECT语句中,对数值执行IF-ELSE操作。Ex.如果员工工资<=2000$,返回消息"UNDERPAID";>=4000$,返回消息"OVERPAID";两者之间,返回消息"OK",结果集如下:A:使用CASE 表达式
select ename,sal, case when sal <= 2000 then 'UNDERPAID' when sal >= 4000 then 'OVERPAID' else 'OK' end as status from emp
1.9 限制返回的行数
Q:查询中返回N行。A: 使用TOP 关键字,想、来限制返回的行数:
select top n * from [tablename]
1.10 表中随机返回n条记录
Q:从表中随机返回n条记录A:使用内置函数NEWID、TOP和ORDER BY,返回随机结果集:
select top 5 ename,job from emp order by newid()
PS:ORDER BY子句接受函数返回值,并使用它改变结果集的次序。先执行ORDER BY子句,在查询返回的行数。参照Orcle的解决方案,原理就清楚多了:
select * from ( select ename,job from emp order by dbms_random.value() ) where rownum=5
1.12 将空值转换为实际值
Q:将空值转换为实际值A:使用COALESCE函数
select coalesce(comm,0) from emp
ps:
函数 COALESCE ( expression [ ,...n ] )
参数:expression 任何类型的表达式。 n 表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。
作用:返回表达式中第一个非空表达式.
--返回结果为3 SELECT COALESCE(NULL,NULL,3,4,5)
我们可以用case来实现,但明显不如函数灵活.
select case when comm is null then 0 else comm end from emp
相关文章推荐
- SQL.Cookbook 读书笔记2 查询结果排序
- ORDER BY子句的妙用(SQL Cookbook 读书笔记)
- SQL.Cookbook 读书笔记4 插入更新和删除
- SQL Cookbook(读书笔记)No.3
- SQL Cookbook(读书笔记)No.2
- 《SQL CookBook》 简单查询汇总
- SQL Cookbook:一、检索记录(3)查找满足多种条件的行
- 跟我一起学习SQL Cookbook(学习日志)
- MySQL cookbook第9章读书笔记
- MySQL Cookbook第11章读书笔记
- SQL Cookbook
- SQL Cookbook:一、检索记录(4)从表中检索特定的列
- Python cookbook - 读书笔记
- Chapter 19:animations - iOS 8 Swift Programming cookBook 读书笔记
- SQL Cookbook:一、检索记录(5)为列提供有意义的名称
- SQL Cookbook:一、检索记录(11)查找空值
- python cook book第三版 读书笔记3(第三章)
- SQL Cookbook—数字、日期
- Python cookbook-读书笔记01
- Network(NSURLSession) - iOS 8 Swift Programming cookBook 读书笔记