龙空技术网

SQL复杂查询

有柚哟 2708

前言:

现在同学们对“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的查找算法