SQL查询中子查询的语法和逻辑

时间:2014-08-06 05:32:11

标签: mysql subquery

我正在浏览下面给出的SQL查询。

 SELECT         
        a.`Cust_id`,    
        b.First_Name,
        b.Last_Name,
        b.Email
 FROM
        Customers AS a,
        (SELECT Cust_Fname,Cust_LName,Email
         FROM Cust_Info 
        )AS b
 WHERE
        a.`Product`='Pepsodent' #table b doesn't have Product column
 GROUP BY Cust_id     #Both tables 'a' and 'b' have Cust_id
 ;

我知道我可以在这里使用JOINS而不是子查询,但我从另一个角度来看这个代码。

就我的理解而言,代码是从两个表中检索信息 - a和b 即从表中获取' Cust_id' 表b中的a和 First_Name,Last_Name,Email 。它还过滤WHERE子句上的结果集,该子句在条件中仅使用 Table a 。但是,正如评论所说,两个表格都是' a'和' b'有Cust_id。

所以我的问题是 - 表b如何知道选择哪个cust_id(因为条件在表格上只有iea Product =' Pepsodent')?这里涉及的逻辑是什么?

P.S。我在SQLYog

上写这个查询

1 个答案:

答案 0 :(得分:0)

这里发生的是SQL为你加入表格,但由于你没有指定条件会发生什么,你将获得这些表的所有组合(笛卡尔积,在sql中称为CROSS JOIN ),例如,如果表a有3行而Cust_Info有2行,那么你将获得6行,当然因为行是来自a的部分数据,你可以过滤产品

另请注意,即使两个表都有Cust_id,您的子查询也没有选择它,这意味着b没有这样的列,如果不是这样的话,那么SQL就不能知道您在哪个列中引用,此时您必须指定a.Cust_idb.Cust_id