Access SQL Select语句和子查询结果之间的连接讲解

最近项目需要用到sql语句,让刚入手的我着实头疼,现在想把自己的一些理解分享一下,权当记录。

第一部分:对于select查询语句理解

最基本的查询语句:

select 列名 (最终查询结果,你希望出现的列名)

from 表名 (你想要从哪里找寻数据)

where 查询条件 (筛选数据的条件)

举个栗子1:

你想要从表device中找到deviceno为257的设备的status。

device表

sql可以这样写:

select status (最终查询结果,我们只想知道设备的状态信息,所以想要显示状态信息的一列)

from device (我们想要从device表格中找寻数据)

where deviceno=257 (要找的数据是deviceno为257的)

看看,执行的结果

例子1结果

我们可以看到,子查询的表格就是一个只有status列的,行结果是deviceno为257的设备状态。

第二部分:对于groupby的理解

有时候我们希望把数据按一定条件分组,这是通常会用到groupby。

据我所知,groupby只能用于聚合函数(如有错误,还望批评指正),聚合函数如count(), max(). min()这类。

还是以上面的device表格为例,现在我们希望得到设备状态为idle的相同bzj_deviceno出现的次数,并从大到小排序。

这里要得到列中同一个元素出现的次数,就需要用到count函数了。查找的条件是bzj_deviceno对应行的设备状态为idle。

按bzj_deviceno进行分组。

select bzj_deviceno, count(bzj_deviceno) as count

from device

where status = ‘idle’

group by bzj_deviceno

order by count(bzj_deviceno) desc

执行之后的结果如下图

例子2结果

第三部分:同一表格子查询结果的连接(join)

当我们希望连接从同一张表格查询出来的两个子表时,就需要用到join了。

select [a.xxx 或 b.xxx](最终连接表出现的列名,针对哪个子查询的列)

from

( select [xxx] (子查询1开始)

from [device] (表名)

where [xxx] (查询条件)

) as a, (此时a是上述子查询1的结果)

( select [xxx](子查询2开始)

from [device] (表名)

where [xxx] (查询条件)

) as b (此时b是上述子查询2的结果)

where [a.xxx(列名) = b.xxx(列名)] (通过什么将子查询a和b连接,就是将a和b查询中xxx列中相同的行连接起来)

注意:()中写入的是解释,[]中写入的是sql语句。最后的a.xxx与b.xxx的列名需要相等。

同样举个例子:

假设子查询a是第二部分获得的表格,可以看到最大的count有两个,但我们希望从中选出一个。

希望选出的bzj_deviceno与设备为run状态的lastinputtime最大值对应的bzj_deviceno不相同。

所以b查询的条件是,设备状态为run且其lastinputtime最大。

为获得b查询sql可以这样写,

select top 1 bzj_deviceno, lastinputtime

from device

where status = ‘run’

order by lastinputtime desc

top 1: 取排序后的第一行

结果如下所示

例子3 子查询b结果

至此,我们获得了a和b两个子查询,目的是获取一个bzj_deviceno,条件是a查询中count值最大且bzj_deviceno与b查询中bzj_deviceno不相等。

select top 1 a.bzj_deviceno

from

(

select bzj_deviceno, count(bzj_deviceno) as count

from device

where status = ‘idle’

group by bzj_deviceno

order by count(bzj_deviceno) desc

) a,

(

select top 1 bzj_deviceno, lastinputtime

from device

where status = ‘run’

order by lastinputtime desc

) b

where a.bzj_deviceno <> b.bzj_deviceno

order by count desc

结果如下所示

标题

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐