前言:
现在同学们对“sql的查找算法”大概比较关切,大家都需要剖析一些“sql的查找算法”的相关知识。那么小编在网络上搜集了一些有关“sql的查找算法””的相关资讯,希望同学们能喜欢,姐妹们快快来了解一下吧!一、视图
什么是视图?
数据库中储存的是我们所需要的数据,而视图中存放的是sql的查询语句。当我们使用视图的时候,客户端会运行视图中的查询语句并创建一张临时表。但是当数据库和客户端断开连接的时候,这些临时表将不会被保存,保存的是视图中的sql语句。
2、如何创建视图
在查询编辑器中编写sql语句(create view 视图名称(视图列1,视图列2) as select查询语句),然后点击视图,右击选择刷新,新的视图表格就会出现在视图中
3、视图的作用
可以节省数据库的存储空间。因为视图存放的是sql语句,临时表中数据不需要被存储。如果数据库中数据进行了更改,数据视图会自动更新。sql语句需要频繁使用而且查找数据规模很庞大的时候可以保存为视图
4、注意事项
避免在视图的基础上再创建视图,因为这会降低sql性能和效率。不能在视图里插入数据,不然会报错
二、子查询
1、子查询定义
子查询其实是一次性的视图,在from子句中直接写定义视图的sql查询语句,一个select语句中嵌套了另外一个select语句。当sql语句中有子查询的时候,将会运行括号里面的子查询然后再运行括号外的语句。
2、子查询关键字
示例:现在新建两张表,表1,表2如下
any/some:是任意一个 ,表示有任何一个满足就返回true
结果均为:
all:是所有,表示全部都满足才返回true
结果为:
"=ANY"与"IN"相同
结果均为
"<>ALL"与"NOT IN"相同
结果均为
3、子查询的作用
偶尔使用的select语句→子查询
频繁使用的select语句→视图
4、注意事项
通俗意义上讲a>3all(b)=a/3>all(b),但是在sql语句中,前者a>3*all(b)是错误的,因为all(b)所得的数据不是一个数值,而是一个集合,为n行数据。避免使用多层嵌套查询为子查询设定名称时需要使用as关键字,as关键字可以省略。但为了方便自己和别人看懂,尽量不要省略,为子查询设定恰当的名称。
三、标量子查询
1、定义
标量子查询,是返回单一值的子查询。因此,标量子查询的返回值可以用在=或者<>这样需要单一值的比较运算符之中。where子句后不能使用聚合函数,但可以使用标量子查询。
标量子查询不仅仅局限于where子句中,通常任何需要使用单一值的地方都可以使用标量子查询
示例1:
示例2:
2、作用
(1)偶尔使用的select语句
→①单行/多行(子查询);
→②单一值(标量子查询)in,any,all,between
(2)频繁使用的select语句→视图
3、注意事项
标量子查询绝对不能返回多行结果。也就是说,如果子查询返回了多行结果,那么它就不再是标量子查询,而仅仅是一个普通的子查询了,因此不能被用在=或者<>等需要单一输入值的运算符当中,也不能用在select等子句当中。
四、关联子查询
1、什么是关联子查询?
关联子查询比较的是组内数据,不是全部数据
注:关联条件一定要写在子查询里面,上面的s2仅在子查询里有效,s2能看到外面的s1,而s1看不到子查询的s2。
2、关联子查询的作用
在每个组里进行比较时,需要使用关联子查询,关联子查询是在子查询里有一个关联条件。
(1)偶尔使用的select语句
→①单行/多行(子查询);
→②单一值(标量子查询)in,any,all,between
→③在每个组里比较(关联子查询)关联条件
(2)频繁使用的select语句→视图
五、如何用SQL解决业务问题?
问题:哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
1.解析问题,翻译成大白话:
课程0002的全部成绩某个学生的成绩大于任意一个第1步里的成绩,就符合条件
2.分析思路:
select 查询结果(成绩))from 从哪张表中查找数据(score表)where 查询条件 (课程号=0002)group by 分组(无)having 对分组结果指定条件(无)order by 对查询结果排序(无)limit 从查询结果中取出指定行(无)
六、各种函数
标签: #sql的查找算法