(一)单表查询
1.简单查询
(1)查询一张表的字段
select 字段1,字段2,字段3..... from 表
注意:字段与字段之间用 英文格式的, 隔开
(2)查询一张表中的所有字段
select * from 表
2.带条件查询
(1)带基本比较符的条件查询
基本比较符号:<,>,≤,≥,<>,≠,=
select * from 表 where 条件语句 (字段 基本比较符 数据)
(2)and 运算符
用来判断两个或者两个以上条件需要同时满足时使用
select * from 表 where 条件语句1 and 条件语句2
(3)or 运算符
用来判断两个或者两个以上条件需要同时满足一个时使用
如果我们用 or 运算符编写,SQL 非常繁琐,所以我们用 in 来进行查询
select * from 表 where 条件语句1 or 条件语句2
(4)and 与 or 运算符混合使用
用来判断两个或者两个以上条件逻辑复杂判断时使用
select * from 表 where 条件语句1 and 条件语句2 or 条件语句3
注:因为 and 的优先级比 or 大,所以我们需要用 ( ) 来改变优先级
(5)范围查询
可以用≤,≥,或者between .. and .. 来实现
select * from 表 where 字段 ≥ 数据1 and 字段 ≤ 数据2
或者
select * from 表 where 字段 between 数据1 and 数据2
select * from 表 where 字段 between 数据1 and 数据2
注:在oracle使用between .. and ..时,小的数字需要在前,大的数字在后,否则查询为null 能取到数据1和数据2两个离散的点
(6)模糊查询
select * from 表 where 字段 like '_%'
select * from 表 where 字段 not like '_%'
_:表示有且只有一个字符
%:表示0-n个字符
(7)区间 查询
select * from 表 where 字段 in (区间)
select * from 表 where 字段 not in (区间)
(8)空值查询
select * from 表 where 字段 is null
select * from 表 where 字段 is not null
2.去除重复记录
select distinct 字段1 .. from 表
只能加在第一个字段前,若加在聚合函数中可用于计算不同记录
3.排序查询
(1)升序排序
select * from 表 order by 字段 (asc)
系统默认升序,asc默认省略不写
(2)降序排序
select * from 表 order by 字段 desc
(3)多字段排序
select * from 表 order by 字段1 desc,字段2
多字段排序时,越靠近order by 优先级越高,当前面字段相同时才会按照靠后字段排序
4.基于伪列的查询
在 Oracle 的表的使用过程中,实际表中还有一些附加的列,称为伪列。伪列就
像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。
接下来学习两个伪列:ROWID 和 ROWNUM。
(1)ROWID
表中的每一行在数据文件中都有一个物理地址,ROWID 伪列返回的就是该行的
物理地址。使用 ROWID 可以快速的定位表中的某一行。ROWID 值可以唯一的
标识表中的一行。由于 ROWID 返回的是该行的物理地址,因此使用 ROWID 可
以显示行是如何存储的。
select rowid,t1.* from t1
结果如下:
(2)ROWNUM
在查询的结果集中,ROWNUM 为结果集中每一行标识一个行号,第一行返回 1,
第二行返回 2,以此类推。通过 ROWNUM 伪列可以限制查询结果集中返回的行数。
select rowid,t1.* from t1
我们的分页查询需要用到此伪列,后续小节详细讲解
5.聚合统计
ORACLE 的聚合统计是通过分组函数来实现的,与 MYSQL 一致。
(1)聚合函数
(1.1)求和 sum
需求:查询所有学生的成绩总和
select sum(score) as sum from score
旧字段 as 新字段,可以给字段重命名,其中as可以省略用空格代替
(1.2)求平均 avg
需求:查询所有学生的平均成绩
select avg(score) avg from score
(1.3)求最大值 max
需求:查询所有学生的最高成绩
select max(score) max from score
(1.4)求最小值 min
需求:查询所有学生的最低成绩
select min(score) min from score
(1.5)统计记录个数 count
需求:查询所有学生的最高成绩
select count(score) count from score
(2)分组聚合 GROUP BY
(2.1)什么是分组?分组就是按照某个字段进行分组,系统会把把相同的记录自动归为一组
(2.2)分组的目的?分组是为了做计算,计算用到的函数就叫聚合函数
(2.3)聚合函数的特点?组内运算:所有的聚合函数只在本小组内进行运算;不计算null值:当使用分组函数时,除了函数 count(*) 之外,其他分组函数都会忽略 null 行,当然 count(字段名) 也会忽略 null 行。
(2.4)分组函数的特性?压缩行:group by语句具有去重功能,每个小组只会显示一条记录;压缩列:在系统执行group by后,未出现在group by 后面的字段都将呗压缩掉,即:出现在group by 后面的字段才能出现在select、having、order by 之后;,但是where不受影响,因为where语句运行在group by之前
(2.5) 分组后条件查询 having
where是执行分组前的筛选,having是执行分组后的筛选
having必须配合group by的使用
当一条语句中筛选时where与having通用的时候,优先使用where,因为使用where筛选效率更高
where后面不能跟组函数,having后面可以跟组函
最后编辑:郭佳豪 更新时间:2023-10-18 17:29