`
zccst
  • 浏览: 3310163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 多表连接 left join 等

 
阅读更多
作者:zccst

一、  理论

(一)内连接(INNER JOIN)

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。


(二)外连接
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。


(三)交叉连接(CROSS JOIN)

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。



二、  实践

两个表的连接比较简单(左连接、右连接、内连接),此处略。三个和三个以上的表道理相同,所以以三个表为例分析多表连接。

假设三个表的分别为a, b, c

(一)以a为主表,b和c为辅表
select a.a as a, b.b as b, c.c as c from a left join b on a.id=b.id left join c on b.id=c.id where…

批注1:左连接按先后顺序,先是表a和表b连接,再与表c连接。

批注2:加条件的时候用where。

批注3:如果b是主表的话,把表b放前面即可。

批注4:也可以按如下写法
Select * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c) where…

//这个语句的执行结果和下面语句其实是一样的:
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) where…

批注5:不同表的引擎最好一样,不然会很慢。比如都是innodb或MyISAM


(二)表a和表b中前者是主表,表c又以表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其实就是表的引用的意思,因为在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不需要)。


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论
1 楼 wlzx0 2016-03-08  
楼主,(二)表a和表b中前者是主表,表c又以表b为主表  这个待补充,是否已经有了思路?

相关推荐

    mysql多个left join连接查询用法分析

    总的来说,MySQL中的LEFT JOIN连接查询是一种强大的工具,用于处理多个表之间的复杂关系。正确理解和应用LEFT JOIN,可以帮助我们编写出高效、准确的SQL查询,满足业务需求。但在实际使用中,要时刻关注性能,通过...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    Mysql 中的连接查询是指从多个表中检索数据,并将它们组合成一个结果集。inner join、left join 和 right join 是 Mysql 中三种最常用的连接查询方式。 inner join inner join 又称等值连接,是指从两个表中选择...

    MySQL 多表关联一对多查询实现取最新一条数据的方法示例

    本文实例讲述了MySQL 多表关联一对多查询实现取最新一条数据的方法。分享给大家供大家参考,具体如下: MySQL 多表关联一对多查询取最新的一条数据 遇到的问题 多表关联一对多查询取最新的一条数据,数据出现重复 ...

    mysql Join使用以及优化

    总之,合理使用和优化MySQL中的Join操作需要综合考虑表结构、索引设计、查询需求和硬件资源等多方面因素。通过实践和反复调优,DBA和开发人员能够显著提高数据库查询的性能,保证业务的高效稳定运行。

    MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    MySQL中的表连接是数据库操作中的核心概念,尤其在处理多表关联的数据时显得尤为重要。本文将深入探讨LEFT JOIN和RIGHT JOIN两种特殊的连接方式,帮助初学者理解这两种连接的语法、用法及其在实际操作中的应用。 ...

    MySQL的LEFT JOIN表连接的进阶学习教程

    MySQL的LEFT JOIN表连接是一种在数据库操作中合并多个表数据的关键技术。LEFT JOIN的主要特点是返回所有左表(即连接查询中的第一个表)的记录,即使在右表(第二个表)中没有匹配的记录。左表的每一行都会与右表的...

    数据库系统及原理及MYSQL应用教程多表连接和子查询实验报告

    实验报告主要涵盖了数据库系统的基本操作,特别是MySQL中的分组查询、多表连接和子查询的运用。以下是对这些知识点的详细解释: 1. **GROUP BY 语句与聚合函数**: GROUP BY 语句用于将数据分组,通常与聚合函数如...

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    如果B表比A表大,`LEFT JOIN` 将创建一个与B表相同大小的结果集,然后进行筛选,这会消耗更多的内存和CPU资源。相比之下,`NOT IN` 和 `NOT EXISTS` 在两个集合比较时就完成了筛选,减少了额外的开销。 关于日志...

    关于sql的left join,right join,inner join,outerjoin

    在SQL查询中,JOIN操作是连接不同表的关键技术,它允许我们从多个相关的表中获取数据。本篇文章将深入探讨四种基本的JOIN类型:LEFT JOIN(左连接)、RIGHT JOIN(右连接)、INNER JOIN(内连接)以及OUTER JOIN(外...

    0.8 MySQL表高级连接

    MySQL 高级表连接是指在 MySQL 中连接两个或多个表的数据,以便从多个表中检索数据。高级表连接包括内连接、外连接、带聚合函数连接和表连接+子查询等。 1. 内连接 内连接(Inner Join)是指从两个表中选择相互...

    MySQL Left JOIN时指定NULL列返回特定值详解

    在SQL查询中,LEFT JOIN操作用于连接两个或更多表,并保留左表(即第一个表)的所有记录,即使右表没有匹配的记录。当右表的某些字段在LEFT JOIN后为NULL时,我们可以利用函数来将这些NULL值替换为特定值,如0或其他...

    mysql delete 多表连接删除功能

    总的来说,`DELETE`语句在MySQL中提供了强大的数据清理功能,但使用时需谨慎,尤其是涉及到多表连接删除时,必须全面考虑其可能的影响。通过了解这些知识点,您可以更安全、高效地管理数据库中的数据。

    MySQL在右表数据不唯一的情况下使用left join的方法

    mysql left join 语句格式 A LEFT JOIN B ON 条件表达式 left join 是以A表为基础,A表即左表,B表即右表。 左表(A)的记录会全部显示,而右表(B)只会显示符合条件表达式的记录,如果在右表(B)中没有符合条件的记录,...

    MySQL JOIN 语法说明与 INNER JOIN 语法用法实例.docx

    本文档详细介绍了 MySQL 中的 JOIN 语法,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 等,并提供了实际的实例来说明 JOIN 的用法。 首先,MySQL 的 JOIN 语法用于根据两个或多个表中的字段之间的关系,从...

Global site tag (gtag.js) - Google Analytics