双重/两个 not exists 嵌套查询 简单分析_两个not exists-CSDN博客
最明白的 not exists 双层嵌套讲解 SQL 查询语句_not exist 嵌套-CSDN博客
1.
答案:
2.
答案:
3.
4.
5.
6.
7.
8.
这个SQL查询是从两个表(假设是
SPJ
和P
)中检索数据的,目的是找到与某个作业(假设是作业编号为'J1')相关的所有产品的名称和它们的总数量。现在,我将逐步解释这个查询。
子查询:
SELECT Pno, SUM(Qty) TotalQty FROM SPJ WHERE Jno='J1' GROUP BY Pno
这个子查询从
SPJ
表中选取与作业'J1'相关的所有产品编号(Pno
)和它们的数量(Qty
)。由于一个产品可能多次出现在SPJ
表中(与同一个作业或多个作业关联),所以使用SUM(Qty)
来计算每个产品的总数量,并使用GROUP BY Pno
来按产品编号分组。结果集将有两列:
Pno
(产品编号)和TotalQty
(总数量)。
- 主查询:
主查询将子查询的结果与P
表连接,以获取产品的名称。为此,我们给子查询一个别名X
,然后在主查询中通过P.Pno=X.Pno
条件将P
表和子查询的结果连接起来。SELECT P.Pname, X.TotalQty FROM ( SELECT Pno, SUM(Qty) TotalQty FROM SPJ WHERE Jno='J1' GROUP BY Pno ) X, P WHERE P.Pno=X.Pno;
注意:
我已经添加了
P.
前缀到Pname
,以确保我们明确知道Pname
是来自P
表的。在连接两个表时,我使用了隐式连接(逗号分隔的表名)。但在现代SQL实践中,更推荐使用显式的
JOIN
语法,因为它更清晰、更易于阅读和维护。以下是使用JOIN
的等效查询:SELECT P.Pname, X.TotalQty FROM ( SELECT Pno, SUM(Qty) TotalQty FROM SPJ WHERE Jno='J1' GROUP BY Pno ) X JOIN P ON P.Pno = X.Pno;
9.