SQL(MySQL) JOIN 用于根据两个或多个表中的字段之间的关系,从这些表中得到数据。
JOIN 通常与 ON 关键字搭配使用,基本语法如下:
... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
table1 通常称为左表,table2 称为右表。ON 关键字用于设定匹配条件,用于限定在结果集合中想要哪些行。如果需要指定其他条件,后面可以加上 WHERE 条件 或者 LIMIT 以限制记录返回数目等。
下面以最常见的两表连接来说明 MySQL JOIN 的用法,关于多表 JOIN 请参见《MySQL JOIN 多表》。
MySQL JOIN 分类
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接):取得两个表中存在连接匹配关系的记录。
LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。
关于 MySQL FULL JOIN 全连接
MySQL 没有提供 SQL 标准中的 FULL JOIN(全连接):两个表记录都取出,而不管彼此是否有对应记录。要解决此问题,可以使用 UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN,达到模拟 FULL JOIN 的目的。
MySQL INNER JOIN
INNER JOIN 用于取得两个表中存在连接匹配关系的记录。下面是两个原始数据表:
article 文章表:
aid title content uid
1 文章1 文章1正文内容... 1
2 文章2 文章2正文内容... 1
3 文章3 文章3正文内容... 2
4 文章4 文章4正文内容... 4
user 用户表:
uid username email
1 admin admin@5idev.com
2 小明 xiao@163.com
3 Jack jack@gmail.com
article 表中文章的所属用户是通过 uid 这个字段与 user 表关联起来的。通过观察数据不难发现,对于 uid=3 的用户,并没有发表任何文章;而文章中 aid=4 却无法在 uid 表中找到对应记录(可能是该用户被删除而其所属的文章却被保留了下来)。
我们列出所用文章与用户一一对应的数据。
SELECT ... INNER JOIN ... ON 语句如下:
SELECT article.aid,article.title,user.username FROM article INNER JOIN user ON article.uid = user.uid
返回查询结果如下:
aid title username
1 文章1 admin
2 文章2 admin
3 文章3 小明
对于 INNER JOIN,等同与下面的 SQL 语句:
SELECT article.aid,article.title,user.username FROM article,user WHERE article.uid = user.uid
CROSS JOIN
CROSS JOIN 即交叉连接,在不指定 ON 条件下:
SELECT article.aid,article.title,user.username FROM article CROSS JOIN user
得到的结果是被连接的两个数据表的乘积,即笛卡尔积。
实际上,在 MySQL 中(仅限于 MySQL) CROSS JOIN 与 INNER JOIN 的表现是一样的,在不指定 ON 条件得到的结果都是笛卡尔积,反之取得两个表完全匹配的结果。
INNER JOIN 与 CROSS JOIN 可以省略 INNER 或 CROSS 关键字,因此下面的 SQL 效果是一样的:
... FROM table1 INNER JOIN table2
... FROM table1 CROSS JOIN table2
... FROM table1 JOIN table2
分享到:
相关推荐
MySQL JOIN 语法说明与 INNER JOIN 语法用法实例 本文档详细介绍了 MySQL 中的 JOIN 语法,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 等,并提供了实际的实例来说明 JOIN 的用法。 首先,MySQL 的 JOIN ...
本资源“Mysql语法实例分享”提供了一系列实用的MySQL语法实例,旨在帮助用户更好地理解和运用MySQL进行数据管理。 1. **创建数据库**: - 使用`CREATE DATABASE`语句来创建新的数据库,例如:`CREATE DATABASE my...
根据给定的文件信息,我们可以从中提取出与MySQL中INNER JOIN ON子句的用法相关的知识点。以下是详细的知识点内容: ### MySQL INNER JOIN ON的基本概念 INNER JOIN用于根据两个或多个表中的相关列的匹配值来合并表...
MySQL是一种广泛使用的开源关系型数据库管理系统,其联合查询(JOIN)功能是数据库操作中的核心部分,用于合并多个数据表中的相关记录,以便进行更复杂的分析和检索。在本实例讲解中,我们将深入探讨MySQL联合查询的...
在本实例中,我们将深入探讨几种不同的连接类型,包括内连接、外连接以及复合条件的连接查询,并通过具体的示例来说明它们的用法。 首先,我们创建了一个名为`suppliers`的表,用来存储供应商的相关信息,包括供应...
本文将深入探讨MySQL中的数据查询语言(DQL),包括其基本语法、常见操作以及具体应用实例。 #### 1. 基本语法结构 一条典型的SQL查询语句由以下几个部分组成: - **SELECT**:指定要选择的数据列。 - **FROM**:...
2. JOIN操作:理解INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别,以及如何使用JOIN连接多个表。 3. 子查询:使用子查询来嵌套查询,实现更复杂的查询逻辑。 4. 分页查询:使用LIMIT和OFFSET关键字实现数据...
本书《MySQL数据库应用从入门到精通 第2版》旨在帮助初学者系统地掌握MySQL的使用,通过详细的实例和截图,使得学习过程更加直观易懂。 一、MySQL基础知识 MySQL是一个多用户、多线程的SQL数据库管理系统,它使用...
7. **查询操作进阶**:深入学习JOIN操作,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,以及子查询的使用。掌握聚合函数(COUNT、SUM、AVG、MAX、MIN)和GROUP BY语句进行数据分析。 8. **事务处理**...
1. 查询技巧:深入解析JOIN操作,包括INNER JOIN、LEFT JOIN、RIGHT JOIN等,以及子查询和联接查询的使用。 2. 分组与排序:学习GROUP BY和ORDER BY语句,进行数据分组和排序,以及聚合函数如COUNT、SUM、AVG、MIN和...
MySQL手册是一部详尽的参考资料,它...MySQL手册提供了上述所有主题的详细解释和实例,帮助开发者和管理员深入理解和高效使用MySQL系统。通过学习和实践,可以提升数据库管理技能,确保数据库系统的稳定和高效运行。
MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
自连接的语法与其他JOIN相同,只是需要为同一个表指定别名以区分不同的实例。 在实践中,选择合适的JOIN类型取决于你的业务需求和数据结构。理解JOIN的基础和优化JOIN查询可以显著提高数据库的性能。例如,使用索引...
2. 联接(JOIN):`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`和`FULL JOIN`用于合并多个表的数据。 3. 子查询:嵌套在其他查询中的查询,可以作为表达式或值来使用。 4. 分组(GROUP BY)与聚合函数(COUNT, SUM, AVG...
深入理解JOIN操作,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN,用于合并多个表中的数据。 3. **表设计**:掌握数据库规范化理论,包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以减少数据冗余...
在"资源说明.pdf"中,可能会详细介绍如何利用这些概念和语法,提供实例演示,以及解答常见问题。这将有助于读者更好地理解和应用MySQL查询语句。 学习MySQL查询语句对于数据库管理员、开发人员或任何需要处理数据的...
- JOIN操作:内连接(INNER JOIN)、外连接(FULL JOIN、LEFT JOIN、RIGHT JOIN)以及自连接。 - 子查询:嵌套查询以实现更复杂的查询逻辑。 - 视图:创建和使用虚拟表来简化查询或保护数据。 3. **数据类型与函数**...
1. INNER JOIN:返回两个表中匹配的行,如`SELECT * FROM table1 INNER JOIN table2 ON table1.key = table2.key;` 2. LEFT JOIN/RIGHT JOIN:返回左表或右表的所有行,即使在另一表中没有匹配,如`SELECT * FROM ...