阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle 中的SELECT 关键字(查询、检索)

231次阅读
没有评论

共计 3082 个字符,预计需要花费 8 分钟才能阅读完成。

1. SELECT 关键字用法:

检索单个列:select 列名 from 表名;
例:select ename from emp;
检索多个列:select [列 1, 列 2, … , 列 N] from 表名;
例:select ename , sal from emp;
检索所有列:select * from 表名;
例:select * from emp;

2. 通配符(A):

*:代表 0 个或多个列
_ : 代表单个字符
% : 代表 0 个或多个字符

使用通配符的优点:书写方便、可以检索未知列
使用通配符的缺点:降低检索的性能

3. 别名:(B)

给表取别名(类似对象名):形如:select e.ename , e.sal from emp e;
给列取别名(用于显示):
方式一:列名后面加空格再加别名(系统会自动转成大写显示不能有空格等特殊符号)
如:select ename , sal*12 yearsal from emp;
方式二:列名后加空格再加“别名”(会直接以双引号里的格式显示,一般用于别名中包含空格等特殊符号的情况)
如:select ename , sal*12 “year sal” from emp;
方式三:列名加空格加 as 加空格加别名:
如:select ename , sal*12 as “year sal” from emp;

4.distinct 关键字(去重):(A)

列:select distinct job from emp;
• distinct 必须放在开头(select 之后)
•多字段(多个列)–每个字段不一样才去重

 

5.where 关键字(过滤)

5.1 作用:

一般放在 from 关键字之后,用于过滤不需要的数据,保留有用的数据

5.2 操作符:

1. =,!=,<>,<,>,<=,>=,any,some,all 条件判断

列:查询工资大于 2000 的员工信息

select * from emp where sal>=2000 ;

列:查询工资等于 800 或 3000 的员工信息

select * from emp where sal=any(800,3000) ;

any(或):满足其中一个条件即可

some:和 any 一样

all(与):需要满足所有条件

2. is null,is not null 值是否为 null
is null:为空
is not null:不为空
例:查询 comm 列不为空的员工
select * from emp where comm is not null;

3. between x and y x 与 y 之间
例:查询工资在 2000 到 3000 的员工信息
select * from emp where sal between 2000 and 3000;

4. in(list),not in(list)值是否包含在 list 中
in(list)在 list 列表内
not in(list)不在 list 列表内
注:list 可以是一个查询返回的查询结果
例:查询职务为 MANAGER 和 ANALYST 的员工信息
select * from emp where job in(‘MANAGER’, ‘ANALYST’);
注:list 里的成员为字符需要加单引号,数值不用加单引号

5. exists(sub-query)、not exists(sub-query)子查询
sub-query:子查询
exists(sub-query):满足该条记录的子查询时(有查找到)执行该条记录父查询
not exists(sub-query):不满足该条记录的子查询时执行父查询
如:select * from emp where exists(select *from dept where LOC = ‘DALLAS’);
子查询中 LOC 列存在 DALLAS 则执行父查询返回 emp 中所有列
注:exists 是逐条记录去比较, 子查询能查到才会去执行父查询,同样子查询只有能查到结果就会执行父查询,所有一般需要添加其他条件,例如:
使用 exists 查询部门名称为 SALES 和 RESEARCH 的雇员姓名、工资、部门编号。
select ename, sal, deptno
from emp e
where exists (select deptno from dept d where dname in(‘SALES’, ‘RESEARCH’) and e.deptno=d.deptno);
6. like _ ,%,escape‘\‘_\% escape‘\’模糊查找
通配符“_”和“%”参考第 2 点
escape:定义转义字符 escape 关键字 后面的字符将被定义为转义字符
escape 放于 like 语句后面
列:查询所有员工中姓名包含“M”的员工信息 注:数据区分大小写
select * from emp where ename like ‘%M%’;

 

6.order by 关键字(排序):(A)

6.1 用法:

例:对 emp 表按 sal 列进行排序(默认为升序)
select * from emp order by sal;

6.2 那如何指定是升序或降序?

select * from emp order by sal asc;
select * from emp order by sal desc;
asc 代表升序,desc 代表降序

6.3 按多个列进行排序

当一个列中出现相同的值时,可能需要按两个列或多个列进行排序,这时可以在 order by 后添加多个列(用逗号分隔),在各个列名后面可以加上 asc 或 desc 指定升序或降序。
例:select * from emp order by sal desc ,ename desc;

7. 创建计算字段(列)(A)

7.1 为什么需要计算字段?

我们经常需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序中重新进行计算或格式化。

7.2 创建计算字段的方式

方式一:对某个列的数值进行计算(+-*/)
Sql 允许 select 子句(select 后添加列名的位置)中出现由 +,-,*,/ 以及列名和数字组成的表达式,将指定列中的值按照表达式进行计算,并创建新的一个列(可以对这个类设置别名)。
例:select sal*12 yearsal from emp;
yearsal 为别名

方式二:对几个列中的数据进行拼接,可以在列之间加入格式,
例:select (ename ||’ 的年薪为:’|| sal*12) from emp;

注:创建出来计算字段是一个列但它并不实际存在于数据库表中

8. 并集,全集,交集,差集(A)

8.1 union(并集):

将查询的两个结果(集合)组合成一个结果并过滤掉重复部分
例:查询工资大于 2000 以及部门编号为 20 的员工信息
select * from emp where sal>2000 union select * from emp where deptno=20;

8.2 union all(全集):

作用与 union 一样但不过滤重复部分
例:查询工资大于 2000 以及部门编号为 20 的员工信息(不去除重复)
select * from emp where sal>2000 union all select * from emp where deptno=20;

8.3 intersect(交集):

返回查询结果中相同的部分。
例:查询工资大于 2000 并且部门编号为 20 的员工信息
select * from emp where sal>200 intersect select * from emp where deptno=20;

8.4 minus(差集):

返回在第一个查询结果中与第二个查询结果不相同的那部分记录。
例:查询工资大于 2000 并且部门编号不是 20 的员工信息
select * from emp where sal>2000 minus select * from emp where deptno=20;

更多 Oracle 相关信息见Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3082字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中