Oracle 筛选和排序

筛选:
在我们平时的数据查询处理中 数据重复是不可避免的,应为一张表以上(或者是视图)要进行查询 就会产生笛卡尔积(假设有两个集合 a b 且 a b没有交集, 两个集合的乘积就是卡积, 且 ab ≠ba)这个时候 筛选语句就很有用了 过滤掉不需要的数据,留下有用的
Where 是小网直接从数据表里捞出符合大小的鱼(数据)
Having 就比较厉害了,他是从捞出来的鱼里面再捞一遍再次筛选我想要的鱼(也可以从第一次就用 having 渔网捞我想要的

来到这里可能就会有疑问了,既然都是渔网 那为什么不用一种鱼网呢?
因为having 是筛选分组后的数据的,是对where的补充,所以再用 having之前 就得先查寻出数据然后再对这些数据进行筛选,也就是说,如果用having 同一条数据就要至少查两次或者更多,

而where 就不同了,我只要美人鱼,where 在捞鱼的时候就会判断这是不是我想要的鱼这样的话 同样要走的路我走一遍就行了,这样的话,就能把节省下来的体力去做别的事情了,计算机和人是一样的

下面是例子:
未加筛选的笛卡尔集 查出来有80条数据
在这里插入图片描述

因为没加有筛选,所以图中的 1 和 11 数据重复了
那么问题来了,是不是查询多张表的时候都得先进行笛卡尔呢?
如果是,有什么办法能避免的呢?
如果不是,为什么?
(这个问题留给你去思考)

Where 例子 查询出8 条
在这里插入图片描述

可能注意到了,图中数据 name 还是重复的,是因为他选了多门课程
如果说我只让他保留一行,又能显示所有数据 又该怎么做呢?

Having 例子,在where 的基础上再次进行筛选 查出4条数据
在这里插入图片描述

排序:
排序分两种一种是默认的升序 也就是从低到高排, 关键字是 asc (一般可以忽略不写) ,反之就是降序 关键字是 desc

下面是例子:
升序
在这里插入图片描述
降序
在这里插入图片描述 排序一般是对结果集的排序,所以排序的语句一般放在句子的末尾 。还有就是和数据库的执行顺序有关了