Oracle 数据库如何查询行

3

主题

6

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-3-29 22:02:27 | 显示全部楼层

查询行

· where查询语句
比较条件

= 、 >、 <、 >=、 <=、 !=、 <>、 between and
-- 查询EMP表显示工资超过2850的雇员姓名和工资。
select ename,sal from emp where sal > 2850;
-- 查询EMP表显示工资不在1500~2850之间的所有雇员及工资。
select * from emp where sal between 1500 and 2850左右拉动查看完整代码

● between 值1 and 值2 等价于 >=值1 and <=值2
且,或,非
and、 or、 not

-- 查询 岗位 为 CLERK 且部门编号为 20的员工名称 部门编号,工资
select * from emp where job='CLERK' and deptno=20
-- 查询 岗位 为 CLERK 或部门编号为 20的员工名称 部门编号,工资
select * from emp where job='CLERK' or deptno=20
-- 查询 岗位 不是 CLERK 员工名称 部门编号,工资
select * from emp where not job = 'CLERK'左右拉动查看完整代码

null
null不能使用条件判断,只能使用is
-- 存在佣金的员工名称
select * from emp where comm is null;
-- 不存在佣金的员工名称
select * from emp where comm is not null;
select * from emp where not comm is null;左右拉动查看完整代码

集合操作
Union、Union All、Intersect、Minus
● Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
● Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;
● Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排 序;
● Minus,差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序

-- 查询工资大于1500 或 含有佣金的人员姓名
-- union 去除重复行
select ename from emp where sal>1500
union
select ename from emp where comm is not null;
-- union all 不去除重复行
select ename from emp where sal>1500
union all
select ename from emp where comm is not null;
-- 查询显示不存在雇员的所有部门号。
select deptno from dept
minus
select distinct deptno from emp
-- 查询工资大于1500 且 含有佣金的人员姓名
select ename,sal,comm from emp where sal>1500 intersect
select ename,sal,comm from emp where comm is not null;左右拉动查看完整代码

模糊查询
通配符:
● %:零个及以上(任意个数的)的字符
● _:一个字符
● 遇到内容中包含 % _ 使用escape(‘单个字符’)指定转义符

-- 查询员工姓名中包含字符A的员工信息
select * from emp where ename like '%A%';
-- 查询员工姓名中包含第二个A的员工名称信息
select * from emp where ename like '_A%';
-- 查询员工姓名中包含字符%的员工名称 岗位 工资 部门编号
select ename,job,sal,deptno from emp where ename like '%a%%' escape('a');左右拉动查看完整代码

in与exists
in相当于使用or的多个等值,定值集合 ,如果存在 子查询,确保 类型相同、字段数为1,如果记录多,效 率不高,用于 一些 少量定值判断上

--10或30部门的雇员信息
select * from emp where deptno in(10,30);左右拉动查看完整代码

exists条件为true,存在记录则返回结果,后续不再继续 比较查询,与查询的字段无关,与记录有关
-- exists :条件为true,存在记录,则返回结果,后续不再继续 ,与字段无关,与记录有关
-- exists 难点: 外层结果集 内层结果集 关系列(没有关系列 true)
select *
from emp
where exists
(select deptno,dname from dept where dname in ('SALES', 'ACCOUNTING'));左右拉动查看完整代码

排序
使用 ORDER BY 排序,排序不是真实改变存储结构的顺序,而是获取的集合的顺序。


● 顺序 :asc升序(默认) desc降序
● 多字段: 在前面字段相等时,使用后面的字段排序
● 空排序: 降序为 desc,注意 null 为最后

-- 按工资降序
select * from emp order by sal desc;
-- 多字段排序,按雇员编号降序排序,如果与相同则按部门编号升序排序,部门编号相同则按姓名降序排序
select * from emp order by empno desc,deptno,ename desc;左右拉动查看完整代码

<hr/>
今天的内容就学习到这里了,每个工作日小编都会更新一个有关测试的小知识,希望大家多多关注我们,一起来学习喔!
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表