sql中分组查询和子查询
要在SQL中使用子查询(SQ),有两种方法:
- 将SQ视为记录源(如表)。
- 将SQ视为单个值。
在情况1中,SQ应该位于FROM子句中,或者有时可能放在In()命令中。
在情况2中,可以使用SQ代替其他任何返回值的项目(SELECT; WHERE; HAVING; GROUP BY;等等)。
假定以下结构:
Table Name=tblOKData
ID; Autonumber; PK
Name; String
有记录:
1 Bat
2 Ball
3 Racquet
Table Name=tblALLData
ID; Autonumber; PK
Name; String
有记录:
1 Glass
2 Cup
3 Plate
21 Bat
22 Ball
23 Racquet
在In()中使用SQ。
假设我们要显示名称与tblOKData表中找到的名称匹配的所有项目的tblAllData.ID。 在这种情况下,我们可以使用INNER JOIN,但是(可以在此处说明这一点)可以使用SQ进行。
该代码将是:
SELECT ID
FROM tblAllData
WHERE Name In(SELECT [Name]
FROM tblOKData)
在FROM子句中使用SQ作为记录集。
最简单的形式是用括号将基本的SELECT查询括起来并重命名(AS {Name})。
在这种情况下,我们希望获得与上述SQL相同的效果。
该代码将是:
SELECT subQ.ID
FROM (SELECT *
FROM tblAllData) AS subQ INNER JOIN tblOKData
ON subQ.Name = tblOKData.Name
使用SQ作为简单值。
我们要选择所有大于这些ID平均值的tblAllData.ID。
该代码将是:
SELECT [ID]
FROM tblAllData
WHERE [ID]>(SELECT Avg([ID])
FROM tblAllData)
翻译自: https://bytes.com/topic/access/insights/593611-subqueries-sql
sql中分组查询和子查询