MySQL的left on 【zt】

(2008-11-03 17:27:30)

转载▼

标签:

it

分类: 学习笔记

MySQL多表连接查询Left Join,Right Join php开源嘛

在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内容有错误或有疑问,国内关于MySQL联结查询的资料十分少,相信大家在看了本文后会对MySQL联结语法有相当清晰的了解,也不会被Oracle的外联结的(“+”号)弄得糊涂了。

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

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

2. 外联结:分为外左联结和外右联结。 php开源嘛

左联结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语法,具体语法上的细节有:

table_references:

table_reference [, table_reference] …

table_reference:

table_factor

| join_table

table_factor:

tbl_name [[AS] alias]

[{USE|IGNORE|FORCE} INDEX (key_list)]

| ( table_references )

| { OJ table_reference LEFT OUTER JOIN table_reference

ON conditional_expr }

join_table:

table_reference [INNER | CROSS] JOIN table_factor [join_condition]

| table_reference STRAIGHT_JOIN table_factor

| table_reference STRAIGHT_JOIN table_factor ON condition

| table_reference LEFT [OUTER] JOIN table_reference join_condition

| table_reference NATURAL [LEFT [OUTER]] JOIN table_factor

| table_reference RIGHT [OUTER] JOIN table_reference join_condition

| table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor

join_condition:

ON conditional_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) php开源嘛

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

Select * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)

ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

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

既然说到了ON语句,那就解释一下吧,ON语句其实和Where语句功能大致相当,只是这里的ON语句是专门针对联结表的,ON语句后面的条件的要求和书写方式和Where语句的要求是一样的,大家基本上可以把ON当作Where用。

大家也许也看到了OJ table_reference LEFT OUTER JOIN table_reference这个句子,这不是MySQL的标准写法,只是为了和ODBC的SQL语法兼容而设定的,我很少用,Java的人更是不会用,所以也不多解释了。

注释:注意红色部分,如果把红色部分变为Select * FROM t1 LEFT JOIN t2, t3, t4 ON t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c 则会出错。不知道什么原因

转载于:https://www.cnblogs.com/daniell003/p/3860030.html

MySQL的left on 【zt】相关推荐

  1. (zt)MySQL的大小写敏感性 lower_case_table_names

    2008-09-23 15:32 在 MySQL 中,数据库和表对就于那些目录下的目录和文件.因而,操作系统的敏感性决定数据库和表命名的大小写敏感.这就意味着数据库和表名在 Windows 中是大小写 ...

  2. centos mysql lujin_MySQL中文转换成拼音的函数[zt]

    注:如果创建函数出错,试试这个 set global log_bin_trust_function_creators=TRUE; 代码如下 -- 创建汉字拼音对照临时表 CREATE TABLE IF ...

  3. 【mysql dump】 备份原理及脚本

    导出多张表的时候表之间用空格分开: # mysqldump -h192.168.254.102 -uroot test testaa testbb >zbb.sql 错误写法: # mysqld ...

  4. 快速了解 MySQL 的性能优化

    公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可 ...

  5. .net与mysql,ASP.NET与MySql的连接

    ASP.NET与MySql的连接 1.数据连接方式 ASP.NET本身的数据访问ADO.NET不支持对于MySql的连接和查询,但是MySQL官网上均提供了多种ASP.NET连接到MySQL的方式: ...

  6. 我的三年研究生(CS)学习与工作经历(ZT)

    我的三年研究生(CS)学习与工作经历(ZT) 2001年,我考入NJU计算机系,因为是要自己解决学费和生活费,一直在半工半读. 研一时,一边读书拿学分,一边在一家小公司做兼职.因为兼职的公司很不正规, ...

  7. gfdmp和mysql,《高性能MySQL》读书笔记--锁、事务、隔离级别

    1.锁为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进行 ...

  8. 从MySQL中读取股票数据——从零到实盘10

    前文介绍了把股票数据写入MySQL的过程,本文记录从MySQL中读取股票数据的过程. 到目前为止,我们在访问股票代码列表时,每次需要通过BaoStock重新下载.本文将把下载的股票代码保存到MySQL ...

  9. JSP房地产门户管理系统myeclipse开发mysql数据库BS模式java编程网页结构详细设计

    一.源码特点      JSP 房地产门户管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8 ...

最新文章

  1. java 线程通讯_java多线程(五)线程通讯
  2. linux红帽网页中文乱码解决,【linux学习笔记】安装redhat时中文显示乱码(小方框)解决方法...
  3. 谷歌chrome浏览器的源码分析(七)
  4. 一个有趣的python排序模块:bisect
  5. int max+1小于0_INT_MAX常数,C ++中的示例
  6. C++头文件保护符和变量的声明定义
  7. html层重叠,HTML/CSS相关问题 z-Index层重叠顺序
  8. OpenCV案例(二):选取圆对象
  9. HDU5763 another meaning -(KMP+DP)
  10. 程序员相亲的血泪史,千万别做这些事情!
  11. 杭电Oj刷题(2009)
  12. Android 混淆大全一篇就够了
  13. 2019年程序员薪资报告,网友:年薪20万只是起薪?
  14. 零基础快速做一个语音控制系统
  15. 详细讲解电脑怎么录屏 电脑录制视频的方法
  16. 台式电脑计算机怎么看是固态硬盘,怎么看电脑是机械硬盘还是固态硬盘
  17. ios 内购 服务器二次验证元宝处理
  18. 总结运用kali破解WIFI密码的多种方法
  19. HTTP状态码 - 维基百科,自由的百科全书
  20. Android传感器常见显示程序

热门文章

  1. php中对于json_decode()和json_encode()的使用方法笔记
  2. python【力扣LeetCode算法题库】67-二进制求和
  3. 7-22 堆栈模拟队列 (25 分)
  4. linux无法运行病毒,{转}为什么linux系统不容易中病毒?
  5. sql优化ppt_Spark优化 | Spark 3.0 中七个必须知道的 SQL 性能优化
  6. keil debug如何在watch直接修改变量值_printf系列教程03_SWO打印输出配置,基于Keil『Debug(printf)Viewer』...
  7. 高端人工智能服务器,产品技术-HPE Apollo6500 Gen10服务器:人工智能的高速引擎-新华三集团-H3C...
  8. 网络推广团队介绍网站页面优化时需要注意什么细节?
  9. 网站未收录的文章该如何解决?
  10. sata接口_接口不同有啥区别?M.2和SATA接口SSD该选哪种?