【查询】where & INNER JOIN

在多表查询中,一些SQL开发人员更喜欢使用WHERE代替join,比如:
  SELECT a.ID, b.Name, b.Date FROM Customers a, Sales b WHERE a.ID = b.ID;
  缺点:在上面语句中,实际上是创建了两张表的笛卡尔积,所有可能的组合都会被创建出来。在笛卡尔连接中,在上面的例子中,如果有1000顾客和1000条销售记录,这个查询会先产生1000000个结果,然后通过正确的 ID过滤出1000条记录。 这是一种低效利用数据库资源,数据库多做100倍的工作。 在大型数据库中,笛卡尔连接是一个大问题,对两个大表的笛卡尔积会创建数10亿或万亿的记录。
 
其中:
 
  WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接
       INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)
       WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。
  
为了避免创建笛卡尔积,应该使用INNER JOIN :
  SELECT a.ID, b.Name, b.Date FROM Customers a INNER JOIN Sales b ON a.ID = b.ID;
优点:如上面语句,使用inner join 这样数据库就只产生等于ID 的1000条目标结果。增加了查询效率。

posted @ 2019-12-12 14:07  黑涩小豆  阅读(224)  评论(0)    收藏  举报