欢迎您访问郑州兴邦电子股份有限公司官方网站!
阿里巴巴诚信通企业
全国咨询热线:40000-63966
兴邦电子,中国水控机第一品牌

联系兴邦电子

全国咨询热线:40000-63966

售后:0371-55132951/55132952

工厂:河南省 郑州市 高新区莲花街电子电器产业园

mysql多表连接查询

文章出处:http://www.singbon.com 作者:兴邦开发部 人气: 发表时间:2016年01月20日

[文章内容简介]:mysql多表连接查询 分类及详解

mysql多表查询

一、 多表连接类型

  1. 笛卡尔积(交叉连接) MySQL中可以为CROSS JOIN或者省略CROSSJOIN,或者使用','

如:    * FROM table1 CROSS JOIN table2    * FROM table1 JOIN table2    * FROM table1,table2

 

 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ONUSING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN

  2. 内连接INNER JOIN MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件在MySQLCROSSINNER JOIN被划分在一起。 join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]

  3. MySQL中的外连接,分为左外连接和右连接,即除了返回符合连接条件的结果之外,还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。

 

  工作原理:

从左表读出一条,选出所有与on匹配的右表纪录(n)进行连接,形成n条纪录(包括重复的行,如:结果1和结果3)

如果右边没有与on条件匹配的表,那连接的字段都是null.然后继续读下一条。

 

a. LEFT [OUTER] JOIN

    column_name FROM table1 LEFT [OUTER] JOIN table2 ON table1.column=table2.column

 

除了返回符合连接条件的结果之外,还需要显示左表中不符合连接条件的数据列,相对应使 用NULL对应

b. RIGHT [OUTER] JOIN

    column_name FROM table1 RIGHT [OUTER] JOIN table2 ON table1.column=table2.column

 

RIGHTLEFT JOIN相似不同的仅仅是除了显示符合连接条件的结果之外,还需要显示右表中不符合连接条件的数据列,相应使用NULL对应

Tips:

  1. on a.c1 = b.c1 等同于 using(c1)

  2. INNER JOIN , (逗号) 在语义上是等同的

  3. MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。

  如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。

通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。

可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。

二、表连接的约束条件

 添加显示条件WHERE, ON, USING

  1. WHERE子句

  2. ON

  3. USING子句,如果连接的两个表连接条件的两个列具有相同的名字的话可以使用USING

 

  例如    FROM LEFT JOIN USING ()

连接多余两个表的情况举例:

mysql>

   artists.Artist, cds.title, genres.genre

FROM cds

LEFT JOIN genres N cds.genreID = genres.genreID

LEFT JOIN artists ON cds.artistID = artists.artistID;

或者 mysql>

   artists.Artist, cds.title, genres.genre

FROM cds

LEFT JOIN genres ON cds.genreID = genres.genreID

 LEFT JOIN artists -> ON cds.artistID = artists.artistID

 WHERE (genres.genre = 'Pop');

--------------------------------------------

 另外需要注意的地方 在MySQL中涉及到多表查询的时候,需要根据查询的情况,想好使用哪种连接方式效率更高。

 1. 交叉连接(笛卡尔积)或者内连接 [INNER | CROSS] JOIN

 2. 左外连接LEFT [OUTER] JOIN或者右外连接RIGHT [OUTER] JOIN 注意指定连接条件WHERE, ONUSING.

 

本文关键词:mysql,连接
回到顶部