SQL Cookbook 第一章:检索记录 20140314

1.连接列值:将多列值作为一列返回。

--DB2,Oracle:是用双竖线作为连接运算符。

--MySQL:支持concat函数。

select concat(ename,' works as a ',job) as msg from table where deptno=10

--SQL Server:使用+运算符进行连接操作。

select ename+' works as a '+job as msg from table where deptno=10

1.8、在select 语句中使用条件逻辑:要在select语句中对数值执行IF-ELSE 操作。

--使用CASE表达式直接在SELECT语句中执行条件逻辑。

例:如果一个小员工工资<=2000,返回‘UNDERPAID’; 如果>=4000,返回‘OVERPAID’;如果在两者之间,返回‘OK’

select ename, sal,

case when sal<=2000 then 'UNDERPAID'

WHEN sal>=4000 then 'OVERPAID'

else 'OK'

end as status

from emp 

1.9、限制返回的行数:限制查询中返回的行数,这里不关心顺序。

--DB2: select * from emp fetch first 5 rows only

--MySQL: select * from emp limit 5

--Oracle: select * from emp where rownum<=5

--SQL Server: select top 5 * from emp

1.10、从表中随机返回n条记录

--在ORDER BY 字句中使用该函数,对行进行随机排序。

--DB2:同时使用内置函数RAND 与ORDER BY 和FETCH

select ename, job from emp order by rand() fetch first 5 rows only

--MYSQL: 同时使用内置的RAND函数、LIMIT、和ORDER BY

select ename,job,from emp order by rand() limit 5

--Oracle: 同时使用DBMS_RANDOM 中内置函数VALUE、ORDER BY 和内置函数ROWNUM:

select * from 

(select ename,job from emp order by dbms_random.value()) 

where rownum<=5

--SQL Server:同时使用内置函数NEWID, TOP,和ORDER BY 返回随机结果集:

select top 5 ename,job from emp order by newid()

--总结:1)ORDER BY 字句可以接受函数的返回值,并使用它来改变结果集的次序。

2)ORDER BY 子句中指定数字常量时,是要求根据SELECT列表中相应位置的列来排序。

3)ORDER BY 子句中使用函数时,则按函数在每一行计算结果排序。

1.11、查找空值:要查找某列值为空的所有行。

--要确定值是否为空,必须使用IS NULL 或者IS NOT NULL.

select * from emp where comm is null

1.12、将空值转换为实际值

--使用COALESCE函数用实际值来替换空值, 多个参数时返回第一个非空值。

select coalesce(comm,0) from emp

--使用CASE:

select case 

when comm is null them 0 

else comm

end

from emp

1.13、按模式搜索

--需要返回匹配特定子串或模式的行。

--使用LIKE运算符合SQL 通配符“%”。

例:在部门10和部门20需要返回名字中有一个“I”或者职务(Job title)中带“ER”的员工。

select ename,job 

from emp

where deptno in (10,20) and

(ename like '%I%' or job like '%ER')

猜你喜欢

转载自captainjack1900.iteye.com/blog/2030715