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 NULL
或IS 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(去重)
DISTINCT
在SELECT
子句当中使用。
数据表中有可能存储相同数据的行,当执行查询操作时默认情况会显示所有行,不管查询结果是否有重复数据。
当重复数据没有实际意义, 经常会需要去掉重复值,使用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