sql基础知识点

一条完整的 SELECT 语句内部的执行顺序是这样的:

  1. FROM 子句组装数据(包括通过 ON 进行连接);
  2. WHERE 子句进行条件筛选;
  3. GROUP BY 分组 ;
  4. 使用聚集函数进行计算;
  5. HAVING 筛选分组;
  6. 计算所有的表达式;
  7. SELECT 的字段;
  8. ORDER BY 排序;
  9. LIMIT 筛选。

哪种情况下应该使用 EXISTS,哪种情况应该用 IN,选择的标准是看能否使用表的索引吗?

索引是个前提,其实选择与否还是要看表的大小。你可以将选择的标准理解为小表驱动大表。在这种方式下效率是最高的。

SELECT * FROM A WHERE cc IN (SELECT cc FROM B);

SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc);

当 A 小于 B 时,用 EXISTS。因为 EXISTS 的实现,相当于外表循环,实现的逻辑类似于:

 for i in A
     for j in B
         if j.cc == i.cc then ...

当 B 小于 A 时用 IN,因为实现的逻辑类似于:

 for i in B
     for j in A
         if j.cc == i.cc then ...

 

sql基础知识点

上一篇:2.1.2如何获取MySQL


下一篇:flex 调用WebService2(基于.net)