SQL Cookbook 系列 - 检索记录

加粗部分均值得仔细研读,希望可以变得更好

1.从表中检索所有的行和列
select * from emp
select name,job from emp
下边的语句好于上面的,遵循我为人人,人人为我的原则

2.利用where子句做条件, 当某行在where子句判定为真时返回

3.查找满足多个条件的列会用到多个子句,有and、or等,
当用到()时,里面的内容作为一个整体进行判定

4.从表中检索部分列,要在sql中显式指定列名

skip


5.为列取有业务意义的名字,取别名的意思

skip


6.在where子句中引用别名的列,这个还是比较特殊的
例如 select * from (select sal as salary,na as name from emp) x where salary>2000
这么书写的原因是where 子句的执行要早于前面的select执行,加上括号可以保证前面的别名可以早于子句生效

7.连接列值,这个是将查询出的多个列进行拼接的过程
db2,oracle,postgreSQL可以采用如下方式进行拼接:
select ename||' work as a '||job as msg from emp;
mysql可以采用如下方式进行拼接:
select concat(ename,' work as a ',job) as msg from emp;
sqlserver可以采用如下方式进行连接:
select ename+' work as a '+job as msg from emp;

8.在select中使用条件逻辑,例子如下:
selelct ename,sal,
case when sal<2000 then 'a'
when sal>4000 then 'c'
else 'b'
end as status
from emp
这个是很久没有见过的形式,值得温习

9.限制返回的行数,均是采用数据库的内置函数来解决
db2: select * from emp fetch first 5 rows only
mysql postgreSQL : select * from emp limit 5
oracle: select * from emp where rownum<=5 rownum是获取每行之后才赋予的
sql server: select top 5 * from emp

10.从表中随机返回n条记录,使用数据库内置函数来解决
db2 : selelct ename,job from emp order by rand() fetch first 5 rows only;
mysql : select ename, job from emp order by rand() limit 5;
postgreSQL : select ename,job from emp order by random() limit 5;
oracle : select * from (select ename,job from emp order by dbms_random.value()) where rownum<=5
sql server: select top 5 ename,job from emp order by newid()
order by子句中使用函数时,是按照函数在每一行的计算结果排序

11.查找空值
select * from emp where comm is null;

12.将空值转换为实际值
selelct coalesce(sal,0) from emp;
或者采用条件逻辑也可以转换

13.按模式搜索,这里是说按照某种模糊的模式条件进行
select ename ,job from emp where deptno in (10,20) and (ename like '%I%' or job like ‘%ER’);

猜你喜欢

转载自blog.csdn.net/seacean2000/article/details/80575710