Mysql 简明教程
MySQL - Self Join
MySQL Self Join
MySQL Self Join 用于将一个表连接到它自身,就像该表是两个表一样。为了执行此操作,至少在一个表在 MySQL 语句中临时重命名。
自连接是一种内部连接,当需要比较同一张表的两列时执行此操作;可能需要在它们之间建立关系。换句话说,当一张表同时包含 Foreign Key 和 Primary Key 时,它会与自身连接。
但是,与其他连接的查询不同,我们使用 WHERE 子句指定表与其自身合并的条件;而不是使用 ON 子句。
Syntax
以下是 MySQL 中自连接的基本语法−
SELECT column_name(s)
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;
这里,WHERE 子句可以是基于您要求的任何给定表达式。
Example
自连接只需要一张表连接到自身;因此,让我们创建一个 CUSTOMERS 表,其中包含客户详细信息,如姓名、年龄、地址和他们获得的薪水。
CREATE TABLE CUSTOMERS (
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
现在使用 INSERT 语句向该表中插入值,如下所示:
INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );
该表将被创建为:
现在,让我们使用以下 Self Join query 连接该表。我们的目标是根据客户的收入建立一个关系。我们使用 WHERE 子句执行此操作。
SELECT a.ID, b.NAME as EARNS_HIGHER, a.NAME as EARNS_LESS,
a.SALARY as LOWER_SALARY FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY < b.SALARY;
Self Join with ORDER BY Clause
此外,在使用自连接将表与其自身连接之后,还可以使用 ORDER BY 子句按升序对合并表中的记录进行排序。以下是语法−
SELECT column_name(s)
FROM table1 a, table1 b
WHERE a.common_field = b.common_field
ORDER BY column_name;