SQLCookBook第一章学习日记1
来源:互联网 发布:木马盗号软件 编辑:程序博客网 时间:2024/05/20 22:30
第一章——检索记录
1.1从表中检索所有行和列
问题: 查看表中所有数据
解决方案:对表使用select语句和特殊字符“*”:
select * from table_name
讨论:
在SQL中,字符“*”具有特殊的含义。使用它,将从指定的表中返回每一列。治理由于没有使用where子句,所以会返回每一行。还有一种方法,就是分别列出每一列:
select empno,ename,job,sal,mgr,hiredate,comm,deptno from emp
在交互执行的特定查询中,使用select *
更容易些,然而,在写代码的时候,最好是分别指定每一列。她们的性能相同,但是,显式地指定列后就可以很清楚产需中究竟返回了哪些列。同样,其他人,而不是编者自己,也更容易理解这样的查询(他们可能不知道查询中表的所有列)
1.2从表中检索部分行
问题:从表中查看满足特定条件的行。
select * from emp where deptno = 10
讨论:
利用where子句,可以只检索用户感兴趣的行。如果where子句中的表达式对某行为真,则返回该行。
多数厂商都支持通用的运算符,例如 =、<、>、<=、>=、!、<>。另外,如果要检索满足多种条件的行,可以使用and or 和圆括号。
1.3查找满足多个条件的行
问题:要返回满足多个条件的行。
select * from emp where depthno = 10 or comn is not null or sal<=2000 and deptno = 20
讨论:
可以使用and or以及圆括号的组合,来查找满足多个条件的数据,在解决方案的示例中,where中子句查找满足下列条件的数据行:
deptno为10,但是comm不为null 或者工资最多为2000美金,且deptno为20
圆括号中的条件作为一个整体进行判断
select * from emp where (deptno = 10 or comm is not null or sal<=2000)and deptno =20
1.4 从表中检索部分列
问题:要查看一个表中特定列的值,而不是所有列的值。
select ename,deptno,sal from emp
讨论:
通过在select子句中指定列,可以保证不会返回多余的数据。在跨越网络检索数据时这非常重要,因为这样可以避免不需要的数据所带来的时间的浪费。
1.5为列取有意义的名称
问题:改变查询所返回的列名,使他们更具可读性,更容易理解。例如求每个员工的工资和提成的查询;
select sal,com from emp
什么是sal,什么是comm?结果的标签应该更明确些。
select sal as salary,comm as commision from emp
讨论:
使用as关键字可以为查询返回的列取个新名,即为这些列取别名,所取得新名就是别名,使用比较好的别名。使用比较好的别名。可以使其他人更容易理解查询结果。
1.6在where子句中引用取别名的列
问题:前面已经使用别名功能,为查询结果提供了更有意义的列名。而且也是用where子句将一些数据排除在外了,然而,我们还想在where子句中引用别名:
select sal as salary,comm as commision from emp where salary < 5000
将查询作为内联视图就可以引用其中取别名的列了:
select * from ( select sal as salary ,comm as commission from emp) xwhere salary <5000
讨论:对这个简单的例子而言,可以不内联视图,也不在where子句中直接引用comm或sal而得到相同的结果,本方案介绍的方法在下列情形的where子句里都可以使用:
聚集函数标量子查询视窗函数别名
将取别名的查询作为内联视图,便可以在外部查询中引用其中的别名列。为什么要这么做呢?where子句是在select之前进行处理的,这样,在处理求解问题查询的where子句之前,salary和commision并不存在,要到where子句处理完成之后,别名才生效。
然而,from子句是在where之前的处理。将原查询放在from子句中,那么,在最外层的where子句之前,以及最外层的where子句看到别名之前,就已经生成了查询结果。如果表列没有特别命名的话,这个技巧特别有用。
注意:这个解决方案中的内联视图别名为X,并非所有数据库都需要内敛视图显式给内联视图取别名,但一些数据库是这样的。所有的数据库都接受这种方式。
1.7连接列值
问题;将多列值作为一列返回。
select ename,job from empwhere deptno = 10
MySQL
支持concat函数
select concat(ename, 'work as A' ,job) as msqfrom emp where deptno = 10
DB2,Oracle,PostgreSQL
使用双竖线作为连接运算符
select ename || 'work as A ' || job as ,msgfrom emp where deptno = 10
SQL Server
使用‘+’进行连接操作
select ename + 'work as A ' +job as msgfrom emp where deptno = 10
讨论:
使用concat函数连接来自多个列的数值。在db2,oracle和postgresql中,‘||’是concat函数的简写方式 ,”+”是SQL中的简写方式。
- SQLCookBook第一章学习日记1
- SQLCookBook第一章学习日记2
- SQLCookBook第二章学习日记3
- SQLCookBook第二章学习日记4
- SQLCookBook第三章学习日记5
- SQLCookBook第三章学习日记6
- SQLCookBook第三章学习日记7
- SQLCookBook第三章学习日记8
- SQLCookBook第三章学习日记9
- SQLCookBook第三章学习日记10
- SQLCookBook第四章学习日记13
- SQLCookBook第四章学习日记14
- SQLCookbook 学习笔记 1检索记录
- SQL学习:SQLCookBook源代码-mysql版本(1)
- SQLCookbook 学习笔记
- SQLCookbook 学习笔记 前言
- SQLCookbook 学习笔记 6 字符串
- 数据结构学习日记(第一章绪论)
- 远程凭据不可用怎么办
- 原创3
- maven教程(一):maven介绍
- 第2周项目0—宣告主权
- 51nod 最长公共子序列测试 【LCS+回溯】
- SQLCookBook第一章学习日记1
- 【OVS2.5.0源码分析】datapath之action分析(5)
- HTML5
- rebase
- 朴素贝叶斯法
- java中四种引用方式
- 友链——卡评测大师
- Android中实现实现虚线边框包裹文字的两种方式
- augularJs 指令