栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

左联接或使用逗号(,)从多个表中选择

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

左联接或使用逗号(,)从多个表中选择

首先,要完全等同,应该已经编写了第一个查询

   SELECt mw.*,nvs.*      FROM mst_words mw LEFT JOIN (SELECt *  FROM vocab_stats  WHERe owner = 1111) AS nvs ON mw.no = nvs.vocab_no     WHERe (nvs.correct > 0 )       AND mw.level = 1

这样mw。和nvs。一起产生与第二个查询的单数*相同的集合。您编写的查询可以使用INNER JOIN,因为它包括对nvs.correct的过滤器。

一般形式

TABLEA LEFT JOIN TABLEB ON <CONDITION>

attempts
查找基于条件的TableB记录。如果失败,将保留来自TABLEA的结果,并将来自TableB的所有列都设置为NULL。相比之下

TABLEA INNER JOIN TABLEB ON <CONDITION>

attempts
可以根据条件查找TableB记录。 但是 ,如果失败,则将TableA中的特定记录从输出结果集中删除。

CROSS
JOIN的ANSI标准在两个表之间产生笛卡尔乘积。

TABLEA CROSS JOIN TABLEB  -- # or in older syntax, simply using commasTABLEA, TABLEB

语法的意图是将TABLEA中的EACH行与TABLEB中的EACH行连接在一起。因此,A中的4行和B中的3行会产生12行输出。与WHERe子句中的条件配对时,有时会产生INNER
JOIN相同的行为,因为它们表达的是相同的东西(A和B之间的条件=>保持或不保持)。但是,在阅读有关使用INNER
JOIN而不是逗号的意图时,它要清晰得多。

在性能方面,大多数DBMS处理LEFT联接的速度要比INNER JOIN更快。逗号表示法可能导致数据库系统误解其意图并产生错误的查询计划-
SQL92表示法的另一优点。

为什么我们需要左加入? 如果上面对LEFT
JOIN的解释仍然不够(保留A中的记录而B中没有匹配项),则认为要达到相同的效果,您将需要使用旧的逗号将两组之间的UNIOn复杂化以达到相同的效果。
但是,如前所述 ,这不适用于您的示例,它实际上是一个隐藏在LEFT JOIN后面的INNER JOIN。

笔记:

  • RIGHT JOIN与LEFT相同,除了它以TABLEB(右侧)而不是A开头。
  • RIGHT和LEFT JOINS都是外部联接。单词OUTER是可选的,即可以写为
    LEFT OUTER JOIN
  • OUTER联接的第三种类型是FULL OUTER联接,但是这里不做讨论。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号