MySQL 查询连接:理解 JOIN 和 UNION 的使用

在 MySQL 数据库中,连接(Join)是一种强大的查询技术,可以将多个表中的数据关联起来,以便进行更复杂、更有针对性的数据查询。在本文中,我们将深入探讨 MySQL 中的连接操作,并通过代码示例来演示其用法。

什么是连接(Join)

连接是一种将两个或多个表中的数据关联起来的操作。通过连接,我们可以从多个表中选择特定的列或行,并将它们合并成一个结果集。连接操作基于两个或多个表之间的关联关系,这种关系通常通过共享的列或键来建立。

在 MySQL 中,连接操作可以分为三种类型:内连接(Inner Join)、外连接(Outer Join)和交叉连接(Cross Join)。

内连接(Inner Join)

内连接是连接操作中最常用和最基本的类型。它根据两个表之间的关联条件,只返回满足这些条件的行。内连接的语法如下:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

上述语句中,table1table2 是要连接的两个表,column_name 是要连接的列或键。通过 ON 关键字后的 table1.column_name = table2.column_name 来指定连接条件。

代码示例

假设我们有两个表:studentsgrades,分别存储了学生的基本信息和他们的成绩。students 表的结构如下:

id name age
1 John 20
2 Emma 22
3 William 21

grades 表的结构如下:

student_id subject grade
1 Math 90
2 Math 85
1 English 80
3 English 95

我们可以使用内连接来获取学生的成绩信息,代码如下:

SELECT students.name, grades.subject, grades.grade
FROM students
INNER JOIN grades
ON students.id = grades.student_id;

这将返回以下结果:

name subject grade
John Math 90
Emma Math 85
John English 80
William English 95

外连接(Outer Join)

外连接是一种包含未匹配行的连接操作。它可以返回满足连接条件的行,同时还包括无法匹配的行。外连接的语法如下:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

上述语句中的 LEFT JOIN 表示左外连接,它将返回左表(table1)中的所有行,以及满足连接条件的右表(table2)中的匹配行。如果右表中没有匹配行,则用 NULL 填充对应的列。

右外连接和全外连接的语法类似,只需要将 LEFT JOIN 改为 RIGHT JOINFULL JOIN 即可。

代码示例

假设我们有两个表:customersorders,分别存储了客户的信息和他们的订单。customers 表的结构如下:

id name age
1 John 30
2 Emma 25
3 William 35

orders 表的结构如下:

order_id customer_id product
1 1 Apple
2 2 Orange
3 2 Banana

我们可以使用左外连接来获取客户及其订单的信息,代码如下:

SELECT customers.name, orders.order_id, orders.product
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id;

这将返回以下结果:

| name