数据库
首页 > 数据库> > Oracle基础(八):列别名、比较运算符、逻辑操作符、模糊查询、比较操作符、BETWEEN...AND...、判空、ANY(list)和 ALL(list)、去重

Oracle基础(八):列别名、比较运算符、逻辑操作符、模糊查询、比较操作符、BETWEEN...AND...、判空、ANY(list)和 ALL(list)、去重

作者:互联网

一、列别名

当一个SELECT子句中包含函数或者表达式时,查询的结果集对应的字段就是
使用这个函数或者表达式作为字段名,可读性差。为此可以为这样的字段添加别名。
那么结果集就会以这个别名作为该字段的名字,若希望区分大小写,并且包含空格。
则别名必须要使用双引号包含起来,也可以在列别名在列名后之间加或不加一个关键字AS

select ename,sal,sal*12 from emp;

select ename,sal,sal*12 as "员工 年薪" from emp;

select ename,sal,sal*12 as "annual SAL" from emp;--包含空格或需要区分大小写时使用双引号""

select ename,sal,sal*12 as annual_SAL from emp;

二、比较运算符

比较运算符:>,<,>=,<=,!=,<>,=

> 大于
< 小于
>= 大于或等于
<= 小于或等于
!= 不等于
<>
= 等于

在SELECT子句中查询的条件,在WHERE子句中可以使用比较操作符限制查询的结果

--查询10号部门的员工
select * from emp where deptno=10;

--查询职员表中职位是'SALESMAN'的职员
select ename,sal,job from emp where job='SALESMAN';

--查询职员表中薪水低于2000的职员
select * from emp where sal<2000;

--查询不属于10号部门的员工
select * from emp where deptno<>10;
select * from emp where deptno!=10;

--查询在1982-1-1以后入职的员工
select * from emp  where hiredate>to_date('1982-01-01','YYYY-MM-DD');

三、逻辑操作符AND(与)和OR(或)

在SQL操作中,如果希望返回的结果必须满足多个条件,应该使用AND逻辑操作符连接这些条件。
在SQL操作中,如果希望返回的结果满足多个条件之一即可,应该使用OR逻辑操作符连接这些条件。
注意:AND的优先级高于OR,可以通过加括号()来提升OR的优先级。

--查询薪水大于1000并且职位是’CLERK' 的职员信息
select ename,sal,job from emp where sal>1000 and job='CLERK';

--查询薪水大于1000或者职位是’CLERK' 的职员信息(满足其一即可)
select ename,sal,job from emp where sal>1000 or job='CLERK';


--查询工资>1000与(工作是SALESMAN或工作是CLERK)的员工
--job='CLERK'和job='SALESMAN'的顺序会影响查询结果,原因在于AND比OR的优先级高
SELECT ename,sal,job FROM emp WHERE sal>1000 AND job='CLERK' OR job='SALESMAN';

--可通过加括号()来提升OR的优先级
select ename,sal,job from emp where sal>1000 and (job='SALESMAN' or job='CLERK');

 四、模糊查询

LIKE关键字用于模糊匹配字符串,LIKE需要借助两个通配符比较:
下划线_:表示单一的一个字符
百分号%:表示任意个字符(0~多个)

--查看名字第二个字母是A最后一个字母是N的员工
select ename from emp where ename like '_A%N';--MARTIN

五、比较操作符,IN(list)与NOT IN(list)

IN(list)判断是否在列表中(包含在列表中)

NOT IN(list)是否不在列中(不包含在列表中)

(通常拿来判断子查询结果,判断查询结果在不在另一个查询结果当中,或配合子查询)

--查看职位是CLERK或SALESMAN的员工(相当于查询职位是 CLERK OR SALESMAN)
select ename,job from emp where job in('CLERK','SALESMAN');

--查看部门号不是10和20的员工(相当于查询部门号不是10和20 deptno<>10 AND deptno<>20)
select ename,deptno from emp where deptno not in(10,20);

六、BETWEEN...AND...

该操作符用来查询符合某个值域范围条件的数据,
常见在使用数字类型的数据范围上,但字符类型和日期类型也同样适用。

--查看工资在1500到3000之间的员工?   sal>=1500 AND sal<=3000
select ename,sal from emp where sal between 1500 and 3000;

七、判空:IS NULL和IS NOT NULL

空值NULL是一个特殊的值,比较的时候不能使用"="号,必须使用IS NULLIS NOT NULL ,否则不能得到正确的结果。

--判断奖金为NULL和不为NULL的员工信息
SELECT ename,comm FROM emp WHERE comm IS NULL;
SELECT ename,comm FROM emp WHERE comm IS NOT NULL;

八、ANY(list)和 ALL(list)

ANY与ALL是配合>,>=,<,<=使用的

>ANY(list):大于列表中最小的,即大于列表中其中之一
>ALL(list):大于列表中最大的,即大于列表中所有
<ANY(list):小于列表中最大的,即小于列表中其中之一
<ALL(list):小于列表中最小的,即小于列表中所有
ANY和ALL常用在子查询中。

select ename,sal from emp where sal >any(1500,2500,3000);
select ename,sal from emp where sal >all(1500,2500,3000);
select ename,sal from emp where sal <any(1500,2500,3000);
select ename,sal from emp where sal <all(1500,2500,3000);

--查询10号部门中工资大于20号部门中工资最高的员工
select * from emp where deptno=10 and sal>all(select sal from emp where deptno=20);

九、DISTINCT(去重)

DISTINCTSELECT子句当中使用。
数据表中有可能存储相同数据的行,当执行查询操作时默认情况会显示所有行,不管查询结果是否有重复数据。
当重复数据没有实际意义, 经常会需要去掉重复值,使用DISTINCT实现。 

--查看公司有哪些职位?
select distinct job from emp;

--DITINCT还可以对多列进行去重,但不可以在需要去重的字段前再添加其他查询的字段。
SELECT ename,DISTINCT job FROM emp;--报错:缺失表达式

--多个字段的去重原则是:查询的结果中,这几个字段值的组合是没有重复的,也就是对这些字段值的组合进行去重。
select distinct job,deptno from emp;

标签:ename,...,sal,--,list,job,操作符,emp,select
来源: https://www.cnblogs.com/codercat/p/16354131.html