数据
<style>
<!--
table, tr, td
{border:dotted 1px #ccc}
-->
</style>
class表:
ID |
class_name |
1 |
class 1 |
2 |
class 2 |
3 |
class 3 |
4 |
class 4 |
5 |
class 5 |
students表:
ID |
student_name |
age |
class_id |
1 |
tom |
18 |
1 |
2 |
jack |
19 |
1 |
3 |
Lucy |
18 |
2 |
4 |
Ely |
19 |
3 |
5 |
Jon |
20 |
4 |
6 |
Messi |
19 |
3 |
7 |
Cl |
20 |
3 |
8 |
UK |
22 |
6 |
Join与Inner Join
Join是Inner Join的简写,只有当俩表中都存在的时候才会select
select s.id,s.student_name,s.age,c.class_name,c.id from students s
join class c on s.class_id=c.id order by s.id;
id |
student_name |
age |
class_name |
id |
1 |
tom |
18 |
class 1 |
1 |
2 |
jack |
19 |
class 1 |
1 |
3 |
Lucy |
18 |
class 2 |
2 |
4 |
Ely |
19 |
class 3 |
3 |
5 |
Jon |
20 |
class 4 |
4 |
6 |
Messi |
19 |
class 3 |
3 |
7 |
Cl |
20 |
class 3 |
3 |
由于没有student属于class 5和没有class 6,因此UK和class 5并不会被select
Left Join
select s.id,s.student_name,s.age,c.class_name,c.id from students s
left join class c on s.class_id=c.id order by s.id;
id |
student_name |
age |
class_name |
id |
1 |
tom |
18 |
class 1 |
1 |
2 |
jack |
19 |
class 1 |
1 |
3 |
Lucy |
18 |
class 2 |
2 |
4 |
Ely |
19 |
class 3 |
3 |
5 |
Jon |
20 |
class 4 |
4 |
6 |
Messi |
19 |
class 3 |
3 |
7 |
Cl |
20 |
class 3 |
3 |
8 |
UK |
22 |
NULL |
NULL |
以students表为基准,当class表没有匹配的就为NULL
select c.id,c.class_name,s.id,s.student_name,s.age from class c
left join students s on c.id=s.class_id order by c.id;
id |
class_name |
id |
student_name |
age |
1 |
class 1 |
2 |
jack |
19 |
1 |
class 1 |
1 |
tom |
18 |
2 |
class 2 |
3 |
Lucy |
18 |
3 |
class 3 |
4 |
Ely |
19 |
3 |
class 3 |
6 |
Messi |
19 |
3 |
class 3 |
7 |
Cl |
20 |
4 |
class 4 |
5 |
Jon |
20 |
5 |
class 5 |
NULL |
NULL |
NULL |
Right Join
select s.id,s.student_name,s.age,c.class_name,c.id from students s
right join class c on s.class_id=c.id order by c.id;
id |
student_name |
age |
class_name |
id |
2 |
jack |
19 |
class 1 |
1 |
1 |
tom |
18 |
class 1 |
1 |
3 |
Lucy |
18 |
class 2 |
2 |
4 |
Ely |
19 |
class 3 |
3 |
6 |
Messi |
19 |
class 3 |
3 |
7 |
Cl |
20 |
class 3 |
3 |
5 |
Jon |
20 |
class 4 |
4 |
NULL |
NULL |
NULL |
class 5 |
5 |
select c.id,c.class_name,s.id,s.student_name,s.age from class c
right join students s on c.id=s.class_id order by s.id;
id |
class_name |
id |
student_name |
age |
1 |
class 1 |
1 |
tom |
18 |
1 |
class 1 |
2 |
jack |
19 |
2 |
class 2 |
3 |
Lucy |
18 |
3 |
class 3 |
4 |
Ely |
19 |
4 |
class 4 |
5 |
Jon |
20 |
3 |
class 3 |
6 |
Messi |
19 |
3 |
class 3 |
7 |
Cl |
20 |
NULL |
NULL |
8 |
UK |
22 |
Full Join
Mysql中并不支持Full Join,但我们可以通过以下方法实现Full Join的功能
select s.id,s.student_name,s.age,c.class_name,c.id from students s
left join class c on s.class_id=c.id
union
select s.id,s.student_name,s.age,c.class_name,c.id from students s
right join class c on s.class_id=c.id;
id |
student_name |
age |
class_name |
id |
1 |
tom |
18 |
class 1 |
1 |
2 |
jack |
19 |
class 1 |
1 |
3 |
Lucy |
18 |
class 2 |
2 |
4 |
Ely |
19 |
class 3 |
3 |
5 |
Jon |
20 |
class 4 |
4 |
6 |
Messi |
19 |
class 3 |
3 |
7 |
Cl |
20 |
class 3 |
3 |
8 |
UK |
22 |
NULL |
NULL |
NULL |
NULL |
NULL |
class 5 |
5 |
分享到:
相关推荐
join使用以及优化
MySQL JOIN 语法说明与 INNER JOIN 语法用法实例.docx
mysql join方法大全notebook
MySQL JOIN 工作原理浅析1
Mycat与Mysql跨库JOIN与性能测试
mysql join实例,包括建表语句,join查询
join语句的基本使用 SQL(MySQL) JOIN 用于根据两个或多个表中的字段之间的关系,从这些表中得到数据。 JOIN 通常与 ON 关键字搭配使用,基本语法如下: … FROM table1 INNER|LEFT|RIGHT JOIN table2 ON ...
用途:帮助读者了解MySQL中的JOIN操作,掌握LEFT JOIN、ON条件过滤和笛卡尔积的使用方法,从而在实际开发中灵活运用JOIN操作实现表关联查询。本文还提供了扩展内容,如排名等应用场景,帮助读者进一步理解JOIN操作的...
Mysql之innerjoin,leftjoin,rightjoin详解.pdf
数据库中JOIN操作的实现主要有三种:嵌套循环连接(Nested Loop Join),归并连接(Merge Join)和散列连接或者哈稀连接(Hash Join)。其中嵌套循环连接又视情况又有两种变形:块嵌套循环连接和索引嵌套循环连接。
本章节我们将向大家介绍如何使用MySQL 的 JOIN 在两个或多个表中查询数据。 你可以在SELECT, UPDATE 和 DELETE 语句中使用Mysql 的 join 来联合多表查询。 以下我们将演示MySQL LEFT JOIN 和 JOIN 的使用的不同之处...
关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行。 如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 ...
1 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN(MySQL 不支持)、CROSS JOIN 这是在网上找到的非常好的一篇博文,图解 join 语句: CODING HORROR-A Visual Explanation of SQL Joins 下图可以很清楚的明白,join ...
在MySQL中联接(join)行为是指两个或多个表到一个表中可以使用连接在SELECT,UPDATE和DELETE语句中加入MySQL表。我们将看到一个例子LEFT JOIN简单的MySQL连接。 在命令提示符使用联接: 假设我们两个表的教程tcount_...
使用嵌套MySQL查询,JOIN操作,LIKE运算符和聚合函数(例如GROUP BY,GROUP_CONCAT等)从多个表中提取复杂数据
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定: LEFT JOIN 或 LEFT OUTER JOIN。 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅 是联接列所匹配的行。如果左表的某行在...
mysql优化join关联示例表