数据库中的查询(Oracle)

分组查询(重点)

介绍分组查询

分组的目的主要就是为了进行数据统计和汇总操作,可以将多行数据汇总成一行。
分组一般都会和聚合函数一起使用,常用的聚合函数:
sum(列名):对指定列的数据进行求和操作。
avg(列名):对指定的列的数据进行求平均值。
max(列名):求最大值
min(列名):求最小值
count():计算个数

【注意】:如果没有分组的情况下,如果要使用聚合函数则select后面只能存在聚合函数,不能有其他列名。

分组查询语法:

   select [列名,列名,...],聚合函数,...from 表名
   [where 过滤条件]
   group by 分组列名,分组列名,...
   [having 分组过滤条件]

【注意】
1、在select后面出现的列名(聚合函数除外),则必须要出现在group by 后面,否则报错。

2、在group by后面的列名并不一定要出现在select后面,按需要设置。
3、如果进行过滤的那个值是分组之后计算出来的值,则不能使用where过滤,必须要使用having。
4、为了提高查询效率,在分组之前能使用where过滤掉的数据进行提前过滤,然后再分组,不要使用having来过滤。

最后就是能用分组实现去重操作

排序查询

①order by
语法:order by 排序列 [desc|asc],排序列 …

  • 如果在排序的时候使用了多个列,则先按照第一列进行排序,如果第一列有相同的数据,则再将相同的数据按照第二列排序,以此类推。

②行号:rownum
数据库中的表中默认没有行号的,
但是可以在查询的时候使用rownum来显示行号

使用方法:
SELECT *,ROWNUM 行号 FROM 表

多表关联查询

1、使用多表关联查询,会涉及众多表的操作,若表的名称过长,设置别名进行操作是一个好的选择。
from 表名 别名

关联查询:

普通关联:

语法:
select a.*,b.* from 表A a,表B b ……[where a.关联字段=b.关联字段,……]

【注意】:如果进行普通关联的时候没有设置关联条件则,最后的结果是一个笛卡尔积。
【执行结果】:符合关联条件的数据才会被查询出来,其他的被过滤掉。

内连接(inner join)

语法:
select * from 表A a [inner] join 表B b on a.关联字段=b.关联字段 join 表C c on c.关联字段=a|b.关联字段

如果内连接和普通连接都不加条件,出来的结果都将是笛卡尔积

外连接(outer join)

左外连接(left [outer] join):

语法:
select * from 左表 a left [outer] join 右表 b on a.关联字段=b.关联字段

【结果】:显示左表中所有的数据,右表只显示符合关联条件的数据

右外连接(right [outer] join)

语法:
select * from 左表 a right [outer] join 右表 b on a.关联字段=b.关联字段

【结果】:显示右表中所有的数据,左表只显示符合关联条件的数据

全外连接(full [outer] join)

语法:
select * from 左表 a full [outer] join 右表 b on a.关联字段=b.关联字段

【结果】:左右表都会显示全部的数据

自然连接(natural join)

语法:
select * from 表A natural join 表B

【注意】:自然连接不需要手动设置关联条件,系统会自动寻找两张表中名称相同的列进行关联,
如果没有相同列名的列,则最后结果是一个笛卡尔积

自连接(自己和自己连接)

如果表中有一列的值引用了自己的主键,则叫做自引式外键。

交叉连接(cross join)

语法:
select * from 表A cross join 表B
【注】:交叉连接的结果就是一个笛卡尔积

子查询

在一条sql语句中再嵌套一条或者是多条select语句,叫做子查询,简称:套娃

单行子查询:

当子查询返回的结果只有一行数据的时候叫做单行子查询。
一般单行子查询配合单行选择运算符一起使用

【注意】
1、单行子查询中只能返回一行数据,如果子查询的结果返回了多行,则提示:单行子查询返回多个行。
2、如果子查询返回的行中有多个列,则系统提示:值过多

多行子查询:

子查询的结果返回多行数据
一般配合多行选择运算符一起使用:any all in

关联子查询:

子查询执行离不开外查询,外查询的执行也必须要依赖子查询结果。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值