MySQL 等值连接
连接操作是指当我们基于一些共同的列和连接条件将两个或更多的表合并时的过程。 等值连接是一种操作,它根据相关表中的相等或匹配的列值来组合多个表 。
我们可以使用 等号(=)比较运算符 来表示 WHERE 子句中的等值关系 。当我们使用 JOIN 关键字 与 ON 子句,并指定列名及其相关的表时,这个连接操作将返回相同的结果。
等值连接是一种分类的内连接类型,它通过根据两个表中存在的共同列执行连接操作来返回输出。该连接仅返回那些基于共同的主键字段名称在两个表中都可用的数据。它不显示空记录或无法匹配的数据。
需要记住的要点:
- 列名不需要相同。
- 结果可以有重复的列名。
- 我们也可以对两个以上的表执行等值连接操作。
语法:
以下是描述等值连接操作的基本语法:
SELECT column_name (s)
FROM table_name1, table_name2, ...., table_nameN
WHERE table_name1.column_name = table_name2.column_name;
或者
SELECT (column_list | *)
FROM table_name1
JOIN table_name2
ON table_name1.column_name = table_name2.column_name;
在这个语法中,我们需要在SELECT关键字后指定要包含在结果集中的 列名 。如果我们想要选择两个表中的所有列,可以使用*操作符。接下来,我们将在FROM关键字后指定 表名 ,最后,在WHERE和ON子句中编写 联接条件 。
等值连接示例
让我们通过示例来了解MySQL中的等值连接是如何工作的。假设我们已经有了两个表,名为 customer 和 balance ,其中包含以下数据:
执行以下等值连接语句以连接表:
mysql> SELECT cust. customer_name, bal.balance
FROM customer AS cust, balance AS bal
WHERE cust.account = bal.account_num;
我们将获得以下结果:
我们也可以通过使用以下语句来获得相同的结果:
mysql> SELECT cust. customer_name, bal.balance
FROM customer AS cust
JOIN balance AS bal
WHERE cust.account = bal.account_num;
查看下面的输出,与之前查询返回的结果相同:
三个表的等值连接
我们知道等值连接也可以在多个表上执行连接操作。为了理解这个问题,让我们使用下面的语句创建另一个名为 cust_info 的表:
CREATE TABLE cust_info (
account_no int,
mobile VARCHAR(15),
address VARCHAR(65)
);
然后,我们将把记录填入此表中:
INSERT INTO cust_info (account_no, mobile, address)
VALUES(1030, '598675498654', '777 Brockton Avenue, Abington MA 251'),
(2035, '698853747888', '337 Russell St, Hadley MA 103'),
(5564, '234456977555', '20 Soojian Dr, Leicester MA 154'),
(4534, '987656789666', '780 Lynnway, Lynn MA 19'),
(7648, '756489372222', '700 Oak Street, Brockton MA 23');
我们可以使用SELECT语句来验证数据。请见以下图像:
要使用等值连接(equijoin)来连接三个表,我们需要按照以下语句执行:
mysql> SELECT C.customer_name, C.account, B.balance, I.mobile
FROM customer AS C, balance AS B, cust_info AS I
WHERE C.account = B.account_num
AND B.account_num = I.account_no;
它将给出以下结果。
自然连接、等值连接和内连接的区别
让我们总结一下自然连接、等值连接和内连接操作之间的区别,如下表所示:
自然连接 | 等值连接 | 内连接 |
---|---|---|
根据相同的列名和数据类型连接表格。 | 根据相关表格中的相等或匹配的列值连接表格。 | 根据明确指定在ON子句中的列名连接表格。它仅返回存在于两个表格中的那些行。 |
总是返回结果集中唯一的列。 | 可以返回两个表格的所有属性以及匹配连接条件的重复列。 | 返回两个表格的所有属性以及匹配ON子句条件的重复列。 |
自然连接的语法:
SELECT [column_names | *]
FROM table_name1
NATURAL JOIN table_name2;
等值连接的语法:
SELECT column_name (s)
FROM table_name1, table_name2, ...., table_nameN
WHERE table_name1.column_name = table_name2.column_name;
内连接的语法:
SELECT [column_names | *]
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name = table_name2.column_name;