关联查询方法介绍(MySQl两表之间的)
关联查询方法介绍
在SQL中,关联查询是实现两个或多个表之间数据相互关联的一种方法。相较于普通的查询,关联查询可以更多地展示数据之间的关系,因此在很多时候都是必不可少的。
一、内连接(Inner Join)
内连接是关联查询中最常用的一种方式。内连接可以将两个表中符合条件的数据行进行匹配,然后返回这些数据行的组合结果。内连接的语法如下:
SELECT [column1], [column2], ... FROM [table1] INNER JOIN [table2] ON [table1].[column] = [table2].[column];
其中,[column1], [column2] 代表需要返回的列的名称;[table1], [table2] 代表表名;[column] 代表需要匹配的列名。比如我们有两个表Student和Score,它们的结构如下:
Table: Student
| sid | name | age | gender |
| — | —- | — | —— |
| 1 | Tom | 18 | M |
| 2 | Lucy | 19 | F |
| 3 | Bob | 20 | M |
Table: Score
| sid | math | English | science |
| — | —- | ——- | ——- |
| 1 | 80 | 90 | 85 |
| 2 | 70 | 85 | 90 |
| 3 | 60 | 70 | 80 |
我们可以通过内连接来查询每个学生的姓名和相应的数学成绩:
SELECT Student.name, Score.math
FROM Student INNER JOIN Score ON Student.sid = Score.sid;
这样我们就可以得到如下结果:
| name | math |
| —- | —- |
| Tom | 80 |
| Lucy | 70 |
| Bob | 60 |
二、左连接(Left Join)
左连接可以将第一个表的所有数据行都返回,而第二个表只返回与第一个表匹配的数据行。如果第二个表中没有与第一个表匹配的数据行,则相应的列返回 NULL。左连接的语法如下:
SELECT [column1], [column2], ... FROM [table1] LEFT JOIN [table2] ON [table1].[column] = [table2].[column];
我们可以使用左连接查询学生的姓名和相应的数学成绩,如果有学生数学成绩为空,则相应的列返回 NULL。
SELECT Student.name, Score.math
FROM Student LEFT JOIN Score ON Student.sid = Score.sid;
结果如下:
| name | math |
| —- | —- |
| Tom | 80 |
| Lucy | 70 |
| Bob | 60 |
三、右连接(Right Join)
右连接与左连接类似,只不过是将第二个表的所有数据行都返回,而第一个表只返回与第二个表匹配的数据行。如果第一个表中没有与第二个表匹配的数据行,则相应的列返回 NULL。右连接的语法如下:
SELECT [column1], [column2], ... FROM [table1] RIGHT JOIN [table2] ON [table1].[column] = [table2].[column];
我们可以使用右连接查询学生的姓名和相应的英语成绩,如果有学生英语成绩为空,则相应的列返回 NULL。
SELECT Student.name, Score.English
FROM Student RIGHT JOIN Score ON Student.sid = Score.sid;
结果如下:
| name | English |
| —- | ——- |
| Tom | 90 |
| Lucy | 85 |
| Bob | 70 |
| NULL | 90 |
四、全连接(Full Outer Join)
全连接会返回两个表中所有的数据行,如果两个表中有符合条件的数据行,则将其进行匹配返回,否则返回 NULL。全连接的语法如下:
SELECT [column1], [column2], ... FROM [table1] FULL OUTER JOIN [table2] ON [table1].[column] = [table2].[column];
我们可以使用全连接查询学生的姓名和相应的科目成绩,如果学生某一科目全为空,则相应的列返回 NULL。
SELECT Student.name, Score.math, Score.English, Score.science
FROM Student FULL OUTER JOIN Score ON Student.sid = Score.sid;
结果如下:
| name | math | English | science |
| —- | —- | ——- | ——- |
| Tom | 80 | 90 | 85 |
| Lucy | 70 | 85 | 90 |
| Bob | 60 | 70 | 80 |
| NULL | NULL | NULL | NULL |
综上所述,关联查询方法在SQL查询中是非常重要的一种方式,可以帮助我们更有效地获取数据并展示数据之间的关系。无论是内连接、左连接、右连接、还是全连接,都可以根据我们需要的数据结果进行选择。