MySQL JOIN 多表连接

除了常用的两个表连接之外,SQL(MySQL) JOIN 语法还支持多表连接。多表连接基本语法如下:

1 ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition INNER|LEFT|RIGHTJOIN table3 ON condition ...

JOIN 多表连接实现了从多个表中获取相关数据,下面是三个原始数据表:

article 文章表:
aid title content uid tid
1 文章1 文章1正文内容… 1 1
2 文章2 文章2正文内容… 1 2
3 文章3 文章3正文内容… 2 1
5 文章5 文章5正文内容… 4 1
user 用户表:
uid username email
1 admin [email protected]
2 小明 [email protected]
3 Jack [email protected]
type 文章类型表:
tid typename
1 普通文章
2 精华文章
3 草稿

MySQL INNER JOIN 多表

我们使用 INNER JOIN 列出三个表中都具有关联关系的数据:

1 SELECT article.aid,article.title,user.username,type.typename FROM articleINNER JOIN user
2 ON article.uid=user.uid INNER JOIN type ON article.tid=type.tid

返回查询结果如下:

aid title username typename
1 文章1 admin 普通文章
2 文章2 admin 精华文章
3 文章3 小明 普通文章

MySQL LEFT JOIN 多表

使用 LEFT JOIN 三个表查询:

1 SELECT article.aid,article.title,user.username,type.typename FROM articleLEFT JOIN user
2 ON article.uid=user.uid LEFT JOIN type ON article.tid=type.tid

返回查询结果如下:

aid title username typename
1 文章1 admin 普通文章
2 文章2 admin 精华文章
3 文章3 小明 普通文章
4 文章4 NULL 普通文章

MySQL RIGHT JOIN 多表

使用 RIGHT JOIN 三个表查询:

1 SELECT article.aid,article.title,user.username,type.typename FROM articleRIGHT JOIN user
2 ON article.uid=user.uid RIGHT JOIN type ON article.tid=type.tid

返回查询结果如下:

aid title username typename
1 文章1 admin 普通文章
2 文章2 admin 精华文章
3 文章3 小明 普通文章
NULL NULL NULL 草稿

可见,在 RIGHT JOIN 右连接中,只是列出最后一个右连接表的所有数据。

说明

对于 MySQL 多表 JOIN,还可以 INNER、LEFT 和 RIGHT 混用,其返回结果与各关键字顺序有关,感兴趣可自行测试。

时间: 2024-10-11 14:01:30

MySQL JOIN 多表连接的相关文章

MySql left join 多表连接查询优化语句

先过滤条件然后再根据表连接 同时在表中建立相关查询字段的索引这样在大数据多表联合查询的情况下速度相当快 SELECT M.*,SS.SensorCode,SS.SensorStatus,SS.ManufacturerId,SS.Electricity, SS.Voltage,SS.MinElectricity,SS.MinVoltage,SS.Temperature,SS.StatusUpdteDate,SS.UpdateStatus ,tp.PricingStrategyid,tps.Free

mysql续集4-多表连接

1.多表连接查询 1.1准备表 #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male', age int, dep_id int ); #插入数据 insert into departmen

mysql的多表连接

笛卡尔积 select * from A,B:不需要任何条件,两个表相乘. 连接类型:交叉连接,内连接,外连接. (1)交叉连接,基本就是和笛卡尔积一样的连接.select * from A cross join B where ..... (2)内连接:自然连接,等值连接,非等值连接. a.自然连接:在连接条件中使用=运算符比较连接列的列值,但是删除连接表中的重复列. b.等值连接:不删除重复的列,A inner join B on a.id=b.id(也可以隐式 A,Bwhere a.id=

Mysql Join大表小表到底谁驱动谁

1.准备 mysql> create table dept( id int unsigned auto_increment not null primary key, name varchar(20) default '' not null, key(name) )engine=innodb default charset=utf8mb4; CREATE TABLE `userinfo` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255

mysql 三个表连接查询

权限表(permission)10 字段名称 类型 约束 描述 authorityid integer Pk not null 权限流水号id    PK userNameId int not null 用户名id   FK functionid integer Not null 功能 id    FK lookPermission int not null 浏览 addPermission int not null 添加 editPermission int not null 编辑 delet

单表查询、多表查询、虚拟表连接查询

  单表查询,以下面这个表为例:+----+------------+--------+-----+------------+----------------------------+--------------+------------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+------------+-

表连接的优化(五)

---title: 不懂SQL优化?那你就OUT了(五) MySQL如何优化--表连接 date: 2018-11-24 categories: 数据库优化--- 上一遍我们讨论了where 子句的优化,这一遍我们来讨论一下表连接的优化 我们知道在数据库中表连接有两种方式: 1. 内连接(inner join) 2. 外连接(左外连接(left join), 右外连接(right join),全外连接(full join-->mysql 不支持全外连接) ### 什么是表连接 表连接就是指将多个

SQL Server三种表连接原理

http://msdn.microsoft.com/zh-cn/library/dn144699.aspx 简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join这三种物理连接中的一种.理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述. 嵌套循环连接(Nested Loop J

浅析表连接

表连接 表连接是一个很有意思的事情,报表中常用的就是JOIN和LEFT JOIN,可能大家也会看到INNER JOIN , LEFT OUTER JOIN等,它们的关系,请读者自己网上查阅,在这里我们要卖个关子. 对初学者来说,表连接是很容易迷糊的一点.容易混淆的原因是因为进行表连接时,经常会把关联字段和关联字段中存的数据混在一起说,容易给人误解. 还是第2节中的例子,我们知道,<人员主集>.'国籍'和<代码项>.'代码项内码'的数据是有关联的,一般在我们的系统中,'国籍'中的数据