ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-06-08 07:31:39  阅读:222  来源: 互联网

标签:ename ... sal -- list job 操作符 emp select


一、列别名

当一个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有