MySQL表连接的两种方式(mysql 两种表连接)
MySQL表连接的两种方式
MySQL是一种广泛使用的关系型数据库管理系统,表连接是一个经常使用的功能。在MySQL中,有两种主要的表连接方式,分别是内连接(INNER JOIN)和外连接(OUTER JOIN)。在本文中,我们将探讨这两种连接方式的不同之处。同时,我们也会提供相应的代码示例,以帮助读者更好的理解。
内连接(INNER JOIN)
内连接是最常用的连接方式之一。它通过将两个表中的匹配记录进行合并来生成一个新表。在内连接中,只有两个表共同有记录时才会输出结果。
内连接的语法格式如下:
SELECT column_name(s)
FROM table1INNER JOIN table2
ON table1.column_name=table2.column_name;
下面是一个简单的内连接实例:
让我们创建两个表,其中一个是orders表,其中包含有关订单的信息:
CREATE TABLE orders (
order_id INT PRIMARY KEY, customer_id INT,
order_date DATE);
另一个表是customers表,其中包含关于客户的信息:
CREATE TABLE customers (
customer_id INT PRIMARY KEY, first_name VARCHAR(50),
last_name VARCHAR(50), eml VARCHAR(100)
);
接下来,我们将在两个表中添加数据:
INSERT INTO orders (order_id, customer_id, order_date)
VALUES (1, 101, '2021-05-01'),
(2, 102, '2021-05-02'), (3, 103, '2021-05-03');
INSERT INTO customers (customer_id, first_name, last_name, eml)VALUES
(101, 'John', 'Doe', 'john.doe@example.com'), (102, 'Jane', 'Doe', 'jane.doe@example.com'),
(103, 'Peter', 'Parker', 'peter.parker@example.com');
现在让我们执行一个内连接,以查找订单的详细信息和客户的姓名:
SELECT *
FROM ordersINNER JOIN customers
ON orders.customer_id = customers.customer_id;
执行以上代码,我们将得到以下输出结果:
| order_id | customer_id | order_date | customer_id | first_name | last_name | eml |
|———-|————-|————-|————-|————|———–|————————|
| 1 | 101 | 2021-05-01 | 101 | John | Doe | john.doe@example.com |
| 2 | 102 | 2021-05-02 | 102 | Jane | Doe | jane.doe@example.com |
| 3 | 103 | 2021-05-03 | 103 | Peter | Parker | peter.parker@example.com |
从上面的输出结果可以看出,内连接只返回符合两个表关联条件的记录。
外连接(OUTER JOIN)
外连接是一种连接方式,它允许用户将一个表中的所有记录和另一个表中的匹配记录合并到一起。不包含匹配记录的行也将输出,使用NULL填充。
外连接有三种不同的类型:
– 左外连接(LEFT JOIN)
– 右外连接(RIGHT JOIN)
– 完全外连接(FULL OUTER JOIN)
在MySQL中,我们可以使用LEFT JOIN和RIGHT JOIN这两种外连接类型。使用完全外连接时,我们将使用UNION ALL运算符来将LEFT JOIN和RIGHT JOIN合并成一个结果集。
外连接的语法格式如下:
SELECT column_name(s)
FROM table1LEFT JOIN table2
ON table1.column_name=table2.column_name;
下面我们将继续使用上面创建的orders和customers表来演示LEFT JOIN和RIGHT JOIN的使用。
LEFT JOIN:
以下代码将返回orders表中所有记录和与之匹配的customers表中的记录。如果customer_id在orders表中没有匹配项,则输出的行将用null值填充。
SELECT *
FROM ordersLEFT JOIN customers
ON orders.customer_id = customers.customer_id;
输出结果如下:
| order_id | customer_id | order_date | customer_id | first_name | last_name | eml |
|———-|————-|————-|————-|————|———–|————————|
| 1 | 101 | 2021-05-01 | 101 | John | Doe | john.doe@example.com |
| 2 | 102 | 2021-05-02 | 102 | Jane | Doe | jane.doe@example.com |
| 3 | 103 | 2021-05-03 | 103 | Peter | Parker | peter.parker@example.com |
| NULL | NULL | NULL | 104 | NULL | NULL | NULL |
在这个示例中,由于我们没有在customers表中找到匹配项,所以最后一行已经被附加到结果集中,并且相应的orders记录使用null值进行填充。
RIGHT JOIN:
以下代码将返回customers表中所有记录以及orders表中与之匹配的记录。如果customer_id在customers表中没有匹配项,则输出的行将用null值填充。
SELECT *
FROM ordersRIGHT JOIN customers
ON orders.customer_id = customers.customer_id;
输出结果如下:
| order_id | customer_id | order_date | customer_id | first_name | last_name | eml |
|———-|————-|————-|————-|————|———–|————————|
| 1 | 101 | 2021-05-01 | 101 | John | Doe | john.doe@example.com |
| 2 | 102 | 2021-05-02 | 102 | Jane | Doe | jane.doe@example.com |
| 3 | 103 | 2021-05-03 | 103 | Peter | Parker | peter.parker@example.com |
| NULL | NULL | NULL | 104 | NULL | NULL | NULL |
平衡着LEFT JOIN示例同样,我们没有在orders表中找到匹配项,所以最后一行已经被附加到结果集中,并且相应的customers记录使用null值进行填充。
总结:
本文介绍了MySQL中的两种主要连接类型:内连接和外连接。内连接只返回符合条件的记录,而外连接则允许在连接两个表时,输出不匹配的结果。其中,LEFT JOIN返回第一个表中的所有记录以及与之匹配的第二个表中的记录,MISSING值在没有匹配 行的情况下填充。RIGHT JOIN与LEFT JOIN非常相似,只不过是交换的表。