单表查询
查找空值
查询空值,我们要用 IS NULL 判断,即:
select * from dual where ename is null
其中,NULL不支持‘+’、‘-’、‘×’、‘÷’等运算,不支持大小比较,等值比较,否则输出空。
多条件查询
对于多条件的组合,要用括号,在更改维护语句的时候不必考虑优先级的问题,并且需要修改的时候,能方便的找到出错位置。
select * from dual where deptno is null and ename='CaiXukun'
别名
数据库的每列,也就是每个字段,一般会采取英文命名,可能是简写,可能是缩写,因为sql本身为英文脚本,所以编写起来比较方便,不过对于一些人比如老总来说,却不是有那么强的可读性,尤其以表格形式展现的时候。这时候就需要别名来帮助理解以及记忆。
可以用 as 或者直接空格别名的方式,加引别名:
select ename 姓名,deptno 部门编号 from dual
select ename as 姓名,deptno as 部门编号 from dual
需要注意的是,别名跟在select
才有效,所以使用where
引用别名时,需要使用select
嵌套查询来调用别名,即:
select * from (select ename 姓名 from dual) e where 姓名='CaiXukun'
否则会提示‘标识符无效’
拼接列
不喜欢结果为表格视图,可以用 ||''||
将显示结果为一列,例:
select ename ||'姓名的部门是'|| deptno as 这个编号 from dual
值得注意的是,这个符号前面的那个字段是不能直接写在那列后面,需要的话写在||''||
的引号中间,末尾的字段可以带上别名。
当然,使用连接符,仍可以使用where
语句,例:
select ename ||'姓名的部门是'|| deptno as 这个编号 from dual where ename='CaiXukun'
逻辑查询
select ename
case
when ename='CaiXukun' then 'NO'
when ename='QiaoBiluo' then 'NO'
else 'OK'
end as passor
限制返回行数
当然,并不是每次查询都要XUQU
所有数据,这时候便可以限制行号来进行数据比对。自带的rownum
即可实现,对输出的每一行默认进行一个数字排序,那么即可:
select * from dual where rownum<=5
不过,这里并不能直接另rownum
等于某个具体值,因为是默认做的需的排序,有一才有二,有二才有三,因此,想获得具体某行的值可以使用select
嵌套查询的方式进行。
随机查询n条记录
有时候可能还会用到随机抽查,而不是像上面那样每次按固定顺序输出,这就可以用dbs_random来进行随机排序。例:
select ename
from (select ename from dual order by dbs_random.value())
where rownum<=3
注意顺序是先随机排序,在取值。如果反过来,即先取值,再排序,会发现每次的值都是一样的。因此随即排序的sql脚本的书写顺序很重要。
- select
- dbs_random
- rownum
模糊查询
先比葫芦画瓢建一个view视图:
create view v as
select 'ABCEDF as bname from dual
union all
select '_BCEFG' as bname from dual
union all
select '_BCEDF' as bname from dual
union all
select '_\BCEDF' as bname from dual
查出字符串中包含CED的,即
select * from view where bname like '%CED%'
查出的结果有:ABCEDF
_BCEDF
_\BCEDF
查一下包含字符_BCE的,即
select * from view where bname like '_BCE%'
可以查出的有,会发现除了_BCEDF、_BCEFG外,还有ABCEFG,因为'_'在这里也是一个通配符的作用。
如果查询带'_'的字符串,可以使用转义字符 ESCAPE,例
select * from view where bname like '\_BCE%' escape '\'
这样查出的即不包含ABCEFG这个字符。
Comments | 2 条评论
aoaomike 博主
Oracle判断是否为空有点坑,建议看一下这篇博文:https://www.cnblogs.com/contixue/p/9077253.html
@sjhup 博主
@aoaomike
受教受教