数据
<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 |
分享到:
相关推荐
MySQL数据库中Join操作的使用及优化是一项重要的技能,它涉及到数据库中表与表之间的关联查询。在执行Join操作时,数据库管理系统需要按照某种算法将多个表中的数据记录联合起来,并返回查询结果。Join操作的主要...
6. MySQL 没有提供 SQL 标准中的 FULL JOIN(全连接),可以使用 UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN,达到模拟 FULL JOIN 的目的。 7. CROSS JOIN 是一种特殊的 JOIN 类型,在不指定 ON 条件下,CROSS ...
MySQL中的Nested-Loop Join(NLJ)是一种基本的JOIN操作实现方式,主要用于处理两个或多个表之间的连接。NLJ的基本思想是逐行遍历一张表(称为外部表),然后对每一行与另一张表(称为内部表)进行匹配。这个过程...
MySQL JOIN是数据库操作中用于合并多个表的数据的关键技术,尤其在处理复杂的数据关系时显得尤为重要。在优化数据库性能,特别是涉及多表连接查询时,理解JOIN的完全用法至关重要。 首先,JOIN操作主要分为三类:...
本文将详细介绍MySQL中Join的使用方法,以实现不同表之间的数据关联查询。在数据库查询中,Join是非常重要的功能,它允许用户根据一定的条件将两个或多个表中的数据联合起来展示。在MySQL中,主要的Join方法包括...
"MySQL JOIN 工作原理浅析" MySQL JOIN 工作原理浅析是数据库管理系统中的一种关键技术,用于将多个表连接起来以获取所需数据。本文将对 MySQL 中的 JOIN 工作原理进行浅析,包括 Nested Loop Join 和 Hash Join ...
这里使用了3表关联,对于多表关联的 INNER JOIN 写法有一个技巧 1. 先写最简单的2表关联 INNER JOIN 2. 然后使用 () 从 FROM 之后到语句结尾全部扩起来 3. 在语句结尾开始连接与下一个表的 INNER JOIN 记住这个原则...
MySQL是世界上最流行的开源关系型数据库管理系统之一,以其高效、稳定和易于使用的特点赢得了广大开发者和企业的青睐。在本文中,我们将深入探讨MySQL的使用方法,通过具体的例子来帮助你理解和掌握其核心概念。 1....
Mysql 之 inner join、left join、right join 详解 Mysql 中的连接查询是指从多个表中检索数据,并将它们组合成一个结果集。inner join、left join 和 right join 是 Mysql 中三种最常用的连接查询方式。 inner ...
mysql join实例,包括建表语句,join查询
在SQL语法部分,手册会详细讲解如何使用SQL语言来操作MySQL,包括数据的增删改查(CRUD)操作,以及更复杂的查询语句如JOIN、子查询、聚合函数和排序。这部分内容对于日常的数据管理至关重要。 事务处理和并发控制...
在数据库管理领域,MySQL是一种广泛使用的开源关系型数据库管理系统,其功能强大且高效。当我们需要从两个或更多个表中联合检索数据时,MySQL的JOIN操作就显得尤为重要。本篇文章将深入探讨如何利用JOIN,嵌套查询,...
本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY...
关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行。 如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 ...
MySQL 5.0是世界上最流行的开源关系型数据库管理系统之一,其功能强大且易于使用,尤其在Web应用程序开发中被广泛采用。本使用手册将详细解析MySQL 5.0的各项核心功能,帮助用户从安装配置到实际操作,全面掌握MySQL...
本章节我们将向大家介绍如何使用MySQL 的 JOIN 在两个或多个表中查询数据。对mysql中的join感兴趣的朋友一起学习吧
在MySQL中,JOIN通常与ON关键字一起使用,其基本语法如下: ```sql FROM table1 [INNER | LEFT | RIGHT] JOIN table2 ON condition ``` 这里,`table1`和`table2`分别代表左表和右表,`condition`是定义匹配条件的...