Access SQL Select语句、子查询结果之间的连接(JION)

最近项目需要用到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

结果如下所示

标题

 

 

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值