Oracle单表查询(一)

1.1获取表中所有的行与列

若领导要看所有员工的信息,大家应该都会用,直接select * 就可以了。

1.2从表中检索出部分行

  例如我们只想看job是‘salesman’的员工,则增加判断条件 where job='SALESMAN'(此处必须是大写,oracle的关键字、表名、用户名、密码是不区分大小写的,但是此处是具体的字段值,区分大小写~!),为了方便大小写的两种情况都附上

 1.3查找空值

 oracle中查找某一列为空的方法是用 ‘is null’,而非'= null',例如我们要查询没有提成的员工信息

 null不支持加减乘除以及大小比较、相等比较,否则只能返回空

1.4将空置转换为实际的值

比如我们要查询所有的员工姓名以及他们的提成,并把提成为空的置为0,在这里有两种写法,第一种是使用nvl

select ename,nvl(comm) from EMP;

第二种是使用coalesce

相对于nvl来说coalesce支持多个参数,可以直接返回第一个不为空的值,例如我们先创建一个视图(以后会介绍)

CREATE or REPLACE VIEW v as
(SELECT null as c1,null as c2, 1 as c3, null as c4,2 as c5, null as c6 FROM dual)
UNION ALL
(SELECT null as c1,null as c2,null as c3,3 as c4,null as c5,2 as c6 from dual);


select * from v;

这时我们去查询,每一行不为空的第一个元素,直接
SELECT coalesce(C1,C2,C3,C4,C5,C6)FROM v;

 

 如果要用nvl完成这个功能(嵌套好多层)

SELECT nvl(nvl( nvl( nvl(nvl(c1,c2),c3),c4),c5),c6) as 第一个不为空的 from v;

1.5查询满足多个条件的行

  查询部门10中所有没有提成的员工

SELECT * FROM EMP WHERE DEPTNO=10 AND comm  is null

查询部门20中工资不超过2000的员工

SELECT * from EMP WHERE DEPTNO=20 AND SAL<=2000

只需要用‘and’ 拼接where的条件就可以了

1.6从表中检索部分列

    之前查询的列都是直接  * 全出查出,这样会导致效率低下,一般我们需要什么字段就去查什么字段,例如我们想查看部门20的员工编号、姓名、上级编号

select EMPNO,ENAME,MGR FROM EMP WHERE DEPTNO=20;

1.7给列取别名

在1.6的查询中,我们想把EMPNO显示为‘编号’,ENAME显示为‘姓名’,‘MGR’显示为上级,则需要使用AS

select EMPNO as 编号,ENAME as 姓名,MGR as 上级 FROM EMP WHERE DEPTNO=20;

其实as是可以省略的

select EMPNO  编号,ENAME  姓名,MGR  上级 FROM EMP WHERE DEPTNO=20;

猜你喜欢

转载自www.cnblogs.com/HUCHEN/p/9949282.html