SQL中with的✿用法

SQL中with的用法

通用表达式在各个商业数据库中比如ORACLE,SQL SERVER等早就实现☻了,MySQL到了8.0 才支持这个特性。这里有两个方面来举例说明WITH的好处。

SQL中with的✿用法

第一,易用性。

第二,效率。SQL中with的✿用法

举例一 WITH表达式的易用性

我们第一个例子, 对比视图的检索和WITH的检索。我们知道视图在MySQL里面的效率一直较差,虽说MySQL5.7 对视图做了相关固化的优化♘,不过依然不尽人意。考虑下,如果多次在同一条SQL中访问视图,那么则会多次固化视图,势必增加相应的资源消耗。MySQL里之前对这种消耗的减少只有一种,就是动态处理,不过一直语法较为恶心,使用不是很广。MySQL8.0后,又有了一种减少消耗的,就是WITH表达式。我们假设以下表结构:

有1000行测试记录。这里我们建立一个普通的视图:

检索语句A:对视图里的最大和最小值字段rank1进行过滤检索出符合条件的记录行数。我们用WITH表达式来重写一遍这个查询。查询语句B:

功能性演示, 索引表面上看执行时间差不多, 我们来对比下两条实现语句的查询计划,

A的计划:

SQL中with的✿用法

B的计划:

SQL中with的✿用法

从以上图我们可以看出,B比A少了一次对视图的固化,也就是说,不管我访问WITH多少次,仅仅固化一次。有兴趣的可以加大数据量,加大并发测试下性能。

举例二 WITH表达式的功能性

我们第二个例子,简单说功能性。

比如之前MySQL一直存在的一个问题,就是临时表不能打开多次。我们以前只有一种解决办法就是把临时表固化到磁盘,像访问普通表那样访问临时表。现在我们可以用MySQL8.0自带的WITH表达式来做这样的业务。

比如以下临时表:我们还是用之前的查询,这里会提示错误。现在我们可以用WITH来改变这种思路当然WITH的用法还有很多,感兴趣的可以去看看手册上的更深入的内容。

在mysql中怎么同时查询多个表的数据

联合查询,字段名相同可以设置别名

select A.name as aname,B.name as bname from AINNER JOIN B ON A.id=B.id

SQL统计函数的使用方法

1、在使用SQL查询数据时,有时希望对查询的结果集进行统计分析。例如,统计所有课程的单价总和、求出结果集所有记录的最大值或最小值、结果集中的记录数量等统计数据。这就需要用到SQL统计函数。SQL统计函数是在查询结果集的基础上对列数据进行各种统计运算,运算的结果形成一条汇总记录。下表给出了MySQL提供的统计函数及其功能。

SQL中with的✿用法

2、上表中的ALL为统计函数的默认选项,指计算所有的值;使用DISTINCT关键字则去掉重复值;列表表达式是指含有列名的表达式。下面给出几个常用统计函数的例子。

例1:查询mooc数据库的course表,查询所有课程记录,并求出课程记录价格字段的总和。

求课程记录价格字段的总和可以使用SUM函数,SUM函数只能用于数值型字段,并且忽略列值为NULL的记录。在查询窗口输入下面的SQL语句。

SELECT name, SUM(price) as 总价 FROM course

在上面的SQL语句中,使用SUM函数计算price字段值的总和,并使用AS关键字将price字段别名为“总价”。SQL查询结果如下图所示。

SQL中with的✿用法

SQL中with的✿用法

3、例2:查询mooc数据库的course表,查询所有课程记录,并求出课程记录价格字段的最大值和最小值。

求课程记录价格字段的最大值和最小值,可以使用MAX和MIN函数,MAX函数求出给定列值的最大值,MIN函数求出给定列值的最小值,MAX和MIN函数可用于数值型字段、字符串型字♣段、日期类型字段。在查询窗口输入下面的SQL语句。

SELECT MAX(price) AS 最大值,MIN(price) AS 最小值 FROM course

在上面的SQL语句中,使用MAX函数求出所有课程记录price字段的最大值,并使用AS关键字将price字段别名为“最大值”;使用MIN函数求出所有课程记录price字段的最小值,并使用AS关键字将price字段别名为“最小值”。SQL查询结果如下图所示。

SQL中with的✿用法

4、例3:查询mooc数据库的course表,查询类别为“机器学习”的课程记录,并求出课程数量。

求课程的数量可以使用COUNT函数,COUNT函数用♂于卍统计查询结果集中记录的个数,在COUNT函数中,“”用于统计所有记录的个数,ALL关键字用于统计指定列的列值非空记录个数,DISTINCT关键字用于统计指定列的列值非空且不重复的记录个数,默认值为ALL。在查询窗口输入下面的SQL语句。

SELECT COUNT() AS 课程总数 FROM course WHERE category="机器学习"

在上面的SQL语句中,使用COUNT函数求出查询结果集的记录数,在COUNT函数中使用“”指明要统计所有记录个数。SQL查询结果如下图所示。

SQL中with的✿用法

5、例4:查询mooc数据库的course表,查询所有课程记录,并求出课程单价的平均值。

求课程单价的平均值,可以使用AVG函数,AVG函数用于计算给定列值的平均值,AVG函数只能用于数值型字段。在查询窗口输入下面的SQL语句。

SELECT AVG(price) AS 平均价格 FROM course

在上面的SQL语句中,使用AVG函数求出课程记录price字段的平均值,并使用AS关键字将price字段别名为“平均价格”。SQL查询结果如下图所示。

SQL中with的✿用法

怎么用SQL语句取出数据库中的特定一条数

2289 浏览 6 回答

SQL中with的✿用法

原创文章,作者:Ame,如若转载,请注明出处:https://www.lbseo.cn/13558.html