(一)单表查询

1.简单查询

(1)查询一张表的字段

select 字段1,字段2,字段3..... from

注意:字段与字段之间用 英文格式的, 隔开

(2)查询一张表中的所有字段

select * from

2.带条件查询

(1)带基本比较符的条件查询

基本比较符号:<,>,≤,≥,<>,≠,=

select * fromwhere  条件语句 (字段 基本比较符  数据)

(2)and 运算符

用来判断两个或者两个以上条件需要同时满足时使用

select * fromwhere 条件语句1 and  条件语句2

(3)or 运算符

用来判断两个或者两个以上条件需要同时满足一个时使用

如果我们用 or 运算符编写,SQL 非常繁琐,所以我们用 in 来进行查询

select * fromwhere 条件语句1 or  条件语句2

(4)and 与 or 运算符混合使用

用来判断两个或者两个以上条件逻辑复杂判断时使用

select * fromwhere 条件语句1 and  条件语句2 or 条件语句3

注:因为 and 的优先级比 or 大,所以我们需要用 ( ) 来改变优先级

(5)范围查询

可以用≤,≥,或者between .. and .. 来实现

select * fromwhere  字段 ≥ 数据1 and 字段 ≤ 数据2

或者

select * fromwhere  字段 between 数据1 and 数据2
select * fromwhere  字段 between 数据1 and 数据2

注:在oracle使用between .. and ..时,小的数字需要在前,大的数字在后,否则查询为null 能取到数据1和数据2两个离散的点

(6)模糊查询

select * fromwhere  字段 like '_%'
select * fromwhere  字段 not like '_%'

_:表示有且只有一个字符

%:表示0-n个字符

(7)区间 查询

select * fromwhere  字段 in (区间)
select * fromwhere  字段  not in (区间)

(8)空值查询

select * fromwhere  字段 is null 
select * fromwhere  字段 is not null 

2.去除重复记录

select distinct 字段1 .. from

只能加在第一个字段前,若加在聚合函数中可用于计算不同记录

3.排序查询

(1)升序排序

select * fromorder by 字段 (asc

系统默认升序,asc默认省略不写

(2)降序排序

select * fromorder by 字段 desc

(3)多字段排序

select * fromorder 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 09:52
最后编辑:郭佳豪  更新时间:2023-10-18 17:29