Sql查询的区别

时间:2013-02-25 08:52:50

标签: mysql sql tsql

我想知道这两个版本在结果上是否相同,哪个更好是出于性能原因以及为什么? 嵌套在选择版本中选择

select 
 t1.c1, 
 t1.c2, 
 (select Count(t2.c1) from t2 where t2.id = t1.id) as count_t 
from 
 t1 

VS

select t1.c1,t1.c2, Count(t2.c1)
from t1,t2
where t2.id= t1.id

3 个答案:

答案 0 :(得分:4)

第一个查询类似于此查询 -

SELECT
  t1.c1,
  t1.c2,
  COUNT(t2.c1)
FROM t1
  LEFT JOIN t2
    ON t2.id = t1.id;

它从第一个表中选择所有记录,从第二个表中选择所有匹配的记录( LEFT JOIN 条件)。

第二个是这个查询的类比 -

SELECT
  t1.c1,
  t1.c2,
  COUNT(t2.c1)
FROM t1
  JOIN t2
    ON t2.id = t1.id;

它仅选择两个表中的匹配记录( INNER JOIN 条件)。

答案 1 :(得分:2)

他们是不同的查询。如果表t2中没有匹配的id,则最上面的一行将选择t1中的所有行,为计数返回0。

第二个查询只返回行,其中t1和t2都有一个具有相同id的行。

答案 2 :(得分:0)

第一个查询可能会遇到大型数据集的性能问题。第二个查询可能会有笛卡尔问题。如果表2没有相关记录,那么我会根据你的意图来加入或离开连接,以获得表1中的记录,然后添加group by语句来控制笛卡尔。