Oracle PL/SQL入门小记(1)

发布于 2019-08-05  1.91k 次阅读


单表查询

查找空值

查询空值,我们要用 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脚本的书写顺序很重要。

  1. select
  2. dbs_random
  3. 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这个字符。


電光石火 正面突破。 日進月歩 百花繚乱。 順風満帆 天真爛漫。