MySQL 什么是MySQL的连接操作?
我们知道,在MySQL中,SELECT语句仅能检索单个表的信息,但并非所有问题都能仅使用单个表来回答。因此,为了在多个表中检索数据,我们可以使用连接操作。
实际上,MySQL的连接操作是基于两个或多个表之间共同列的值将其数据连接成一个新的临时表。换句话说,MySQL的连接操作使我们能够在新的临时表中检索两个或多个相关联的表的记录。该临时表是基于两个表所共享的列创建的,它表示有意义的列比较。
通常,共有的列是与参与连接的两个表中出现的具有相同名称和数据类型的列名。这些列被称为连接键或公共键。
MySQL支持以下类型的连接操作:
阅读更多:MySQL 教程
交叉连接
实际上,交叉连接是连接操作的基本形式。如果我们有两个表,它会取出表1的每一行并将其附加到表2的每一行。因此,如果表1有3行,表2有2行,则在交叉连接这些表后,我们将得到6行。为了更好地理解它,我们以名为 tbl_1 和 tbl_2 的两个表为例,它们分别具有以下数据:
mysql> Select * from tbl_1;
+----+--------+
| Id | Name |
+----+--------+
| 1 | Gaurav |
| 2 | Rahul |
| 3 | Raman |
| 4 | Aarav |
+----+--------+
4 rows in set (0.00 sec)
mysql> Select * from tbl_2;
+----+---------+
| Id | Name |
+----+---------+
| A | Aarav |
| B | Mohan |
| C | Jai |
| D | Harshit |
+----+---------+
4 rows in set (0.00 sec)
现在,下面的查询将在上述表之间进行交叉连接。
mysql> Select tbl_1.id, tbl_2.id FROM tbl_1 CROSS JOIN tbl_2;
+----+----+
| id | id |
+----+----+
| 1 | A |
| 2 | A |
| 3 | A |
| 4 | A |
| 1 | B |
| 2 | B |
| 3 | B |
| 4 | B |
| 1 | C |
| 2 | C |
| 3 | C |
| 4 | C |
| 1 | D |
| 2 | D |
| 3 | D |
| 4 | D |
+----+----+
16 rows in set (0.00 sec)
内连接或等值连接
要形成内连接,我们需要指定特定的条件,称为加入谓词。实际上,内部或等值连接需要两个加入的表中的行具有相匹配的列值。为了理解它,以下查询将内部连接名为“tb1_1”和“tb1_2”的表。
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+----+----+
| id | id |
+----+----+
| 4 | A |
+----1 row in set (0.00 sec)
结果集显示,对于id=4的tbl_1和id=’A’的tbl_2,列名具有相同的值。
左连接
左连接也需要一个连接谓词(join-predicate),与内部连接一样。唯一的区别是,使用LEFT连接连接两个表时,引入了左表和右表的概念。它返回左表中的所有行,包括满足连接谓词的行和不满足连接谓词的行。对于不匹配加入谓词的行,在结果集中右表的列中显示NULL。为了更好的理解,下面的查询使用tbl_1和tbl_2表执行LEFT连接:
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+----+------+
| id | id |
+----+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | A |
+----+------+
4 rows in set (0.02 sec)
右连接
它类似于LEFT join,只是表格的处理方式相反。使用RIGHT join,右表中的每一行都会显示在结果集中。对于右表中没有匹配左表的行,左表的列将显示为NULL。为了理解它,以下查询使用表tbl_1和tbl_2执行RIGHT join:
mysql> SELECT tbl_1.id, tbl_2.id
-> FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+------+----+
| id | id |
+------+----+
| 4 | A |
| NULL | B |
| NULL | C |
| NULL | D |
+------+----+
共4行记录(0.00秒)
极客教程