AccessSQLSelect语句、⼦查询结果之间的连接(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出现的次数,并从⼤到⼩排序。
select语句查询日期
这⾥要得到列中同⼀个元素出现的次数,就需要⽤到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
结果如下所⽰
标题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。