mysql多表联合查询

转自:http://www.cnblogs.com/Toolo/p/3634563.html

多表连接,小分三种(笛卡尔积、内连接、外连接),多分五种

(笛卡尔积、内连接、左连接、右连接、全连接(mysql可能没有))

MySQL的多表查询(笛卡尔积原理)

 
  1. 先确定数据要用到哪些表。
  2. 将多个表先通过笛卡尔积变成一个表。
  3. 然后去除不符合逻辑的数据(根据两个表的关系去掉)。
  4. 最后当做是一个虚拟表一样来加上条件即可。

 

注意:列名最好使用表别名来区别。

 

 

笛卡尔积

 

 

 

 

Demo:

 

左,右连接,内,外连接

l             内连接:

要点:返回的是所有匹配的记录。

  1. select * from a,b where a.x = b.x                                                 ////内连接
  2. select * from a cross join b on a.x=b.x order by a.x  //不同写法的内连接
  3. select * from a inner join b on a.x=b.x order by a.x  //不同写法的内连接

l             外连接有左连接和右连接两种。

要点:返回的是所有匹配的记录 外加 每行主表外键值为null的一条记录。辅表所有列为null值。

  1. select * from a left join b on a.x=b.x order by a.x  //左外连接或称左连接
  2. select * from a right join b on a.x=b.x order by a.x  //右外连接或称右连接

select子句顺序

子句

说明

是否必须使用

select

要返回的列或表示式

form

从中检索数据的表

仅在从表选择数据时使用

where

行级过滤

group by

分组说明

仅在按组计算聚集时使用

having

组级过滤

order by

输出排序顺序

limit

要检索的行数

 

posted @ 2016-10-18 10:50  绿尘枫  阅读(30462)  评论(0编辑  收藏  举报