北京SEO

MySQL Left Join,Right Join语句详解

2019/10/10/17:33:09  阅读:1819  来源:谷歌SEO算法  标签: Google

文章收藏了关于MySQL Left Join,Right Join各种查询语句,下面有需要的同学可以参考一下下.

在SQL标准中规划的(Join)联结大致分为下面四种:

1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结.

2.外联结:分为外左联结和外右联结.

左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。

右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:

Select A.name B.name From A Left Join B On A.id=B.id

和:Select A.name B.name From B Right Join A on B.id=A.id

执行后的结果是一样的.

3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结,这个不需要记忆,只要是查询中提到了的表的字段都会取出,无论是否符合联结条件,因此意义不大.

4.无联结:不用解释了吧,就是没有使用联结功能呗,也有自联结的说法.

这里我有个比较简便的记忆方法,内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了。其实大家回忆高等教育出版社出版的《数据库系统概论》书中讲到关系代数那章(就是将笛卡儿积和投影那章)的内容,相信不难理解这些联结功能的内涵。

MySQL支持Select和某些Update和Delete情况下的Join语法,具体语法上的细节有,代码如下:

  1. table_references:
  2. table_reference[,table_reference]…
  3. table_reference:
  4. table_factor
  5. |join_table
  6. table_factor:
  7. tbl_name[[AS]alias]
  8. [{USE|IGNORE|FORCE}INDEX(key_list)]
  9. |(table_references)
  10. |{OJtable_referenceLEFTOUTERJOINtable_reference
  11. ONconditional_expr}
  12. join_table:
  13. table_reference[INNER|CROSS]JOINtable_factor[join_condition]
  14. |table_referenceSTRAIGHT_JOINtable_factor
  15. |table_referenceSTRAIGHT_JOINtable_factorONcondition
  16. |table_referenceLEFT[OUTER]JOINtable_referencejoin_condition
  17. |table_referenceNATURAL[LEFT[OUTER]]JOINtable_factor
  18. |table_referenceRIGHT[OUTER]JOINtable_referencejoin_condition
  19. |table_referenceNATURAL[RIGHT[OUTER]]JOINtable_factor
  20. --phpfensi.com
  21. join_condition:
  22. ONconditional_expr|USING(column_list)

上面的用法摘自权威资料,不过大家看了是否有点晕呢?呵呵,应该问题主要还在于table_reference是什么,table_factor又是什么?这里的table_reference其实就是表的引用的意思,因为在MySQL看来,联结就是一种对表的引用,因此把需要联结的表定义为table_reference,同时在SQL Standard中也是如此看待的,而table_factor则是MySQL对这个引用的功能上的增强和扩充,使得引用的表可以是括号内的一系列表,如下面例子中的JOIN后面括号.

SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

这个语句的执行结果和下面语句其实是一样的,代码如下:

  1. SELECT*FROMt1LEFTJOIN(t2CROSSJOINt3CROSSJOINt4)
  2. ON(t2.a=t1.aANDt3.b=t1.bANDt4.c=t1.c)

这两个例子不仅让我们了解了MySQL中table_factor和table_reference含义,同时能理解一点CROSS JOIN的用法,我要补充的是在MySQL现有版本中CROSS JOIN的作用和INNER JOIN是一样的(虽然在SQL Standard中是不一样的,然而在MySQL中他们的区别仅仅是INNER JOIN需要附加ON参数的语句,而CROSS JOIN不需要)。

广告内容

MySQL Left Join,Right Join语句详解 MySQL Left Join,Right Join语句详解 MySQL Left Join,Right Join语句详解

相关阅读

热门评论

sunshine技术博客 sunshine技术博客

sunshine技术博客

总篇数164

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法