SQL自然连接剖析
今天sojson给大家带来SQL自然连接的剖析,此篇文章会讲解什么是SQL自然连接,以及它和内连接的区别,还有一些示例代码。希望能帮助到你们!
SQL 中的自然连接是什么?
我们已经了解到,EQUI JOIN 对关联表的相等或匹配列值执行 JOIN,并且等号 (=) 在 where 子句中用作比较运算符来引用相等。SQL NATURAL JOIN 是 EQUI JOIN 的一种,其结构方式是关联表的同名列只会出现一次。
上述SQL Natural Join的图解展示:
自然连接:指南
- 关联的表具有一对或多对同名的列。
- 列必须具有相同的数据类型。
- 不要在自然连接中使用 ON 子句。
句法:
SELECT *
FROM table1
NATURAL JOIN table2;
例子:
下面是两个表之间 SQL 自然连接的示例:
示例表:食品
+---------+--------------+-----------+------------+
| ITEM_ID | ITEM_NAME | ITEM_UNIT | COMPANY_ID |
+---------+--------------+-----------+------------+
| 1 | Chex Mix | Pcs | 16 |
| 6 | Cheez-It | Pcs | 15 |
| 2 | BN Biscuit | Pcs | 15 |
| 3 | Mighty Munch | Pcs | 17 |
| 4 | Pot Rice | Pcs | 15 |
| 5 | Jaffa Cakes | Pcs | 18 |
| 7 | Salt n Shake | Pcs | |
+---------+--------------+-----------+------------+
+------------+---------------+--------------+
| COMPANY_ID | COMPANY_NAME | COMPANY_CITY |
+------------+---------------+--------------+
| 18 | Order All | Boston |
| 15 | Jack Hill Ltd | London |
| 16 | Akas Foods | Delhi |
| 17 | Foodies. | London |
| 19 | sip-n-Bite. | New York |
+------------+---------------+--------------+
要从 food 和 company 表中获取所有唯一列,可以使用以下 SQL 语句:
SQL代码:
SELECT *
FROM foods
NATURAL JOIN company;
输出:
COMPANY_ID ITEM_ID ITEM_NAME ITEM_UNIT COMPANY_NAME COMPANY_CITY
---------- ---------- ------------------------- ---------- ------------------------- --------------
16 1 Chex Mix Pcs Akas Foods Delhi
15 6 Cheez-It Pcs Jack Hill Ltd London
15 2 BN Biscuit Pcs Jack Hill Ltd London
17 3 Mighty Munch Pcs Foodies. London
15 4 Pot Rice Pcs Jack Hill Ltd London
18 5 Jaffa Cakes Pcs Order All Boston
自然连接和内连接的区别
INNER JOIN 和 NATURAL JOIN 之间的一个显着区别是返回的列数。请参阅公司表和食品表上的以下示例:
SQL代码:
SELECT *
FROM company;
输出:
COMPANY_ID COMPANY_NAME COMPANY_CITY
---------- ------------------------- ---------------
18 Order All Boston
15 Jack Hill Ltd London
16 Akas Foods Delhi
17 Foodies. London
19 sip-n-Bite. New York
SQL代码:
SELECT *
FROM foods;
输出:
ITEM_ID ITEM_NAME ITEM_UNIT COMPANY_ID
---------- ------------------------- ---------- - ---------
1 Chex Mix Pcs 16
6 Cheez-It Pcs 15
2 BN Biscuit Pcs 15
3 Mighty Munch Pcs 17
4 Pot Rice Pcs 15
5 Jaffa Cake Pcs 18
7 Salt n Shake Pcs
company_id 上的公司和食品的 INNER JOIN 将返回:
SQL代码:
SELECT *
FROM company
INNER JOIN foods
ON company.company_id = foods.company_id;
输出:
COMPANY_ID COMPANY_NAME COMPANY_CITY ITEM_ID ITEM_NAME ITEM_UNIT COMPANY_ID
---------- --------------- --------------- ---------- --------------- ---------- ----------
16 Akas Foods Delhi 1 Chex Mix Pcs 16
15 Jack Hill Ltd London 6 Cheez-It Pcs 15
15 Jack Hill Ltd London 2 BN Biscuit Pcs 15
17 Foodies. London 3 Mighty Munch Pcs 17
15 Jack Hill Ltd London 4 Pot Rice Pcs 15
18 Order All Boston 5 Jaffa Cakes Pcs 18
SQL代码:
SELECT *
FROM company
NATURAL JOIN foods;
输出:
COMPANY_ID COMPANY_NAME COMPANY_CITY ITEM_ID ITEM_NAME ITEM_UNIT
---------- --------------- --------------- ---------- --------------- ----------
16 Akas Foods Delhi 1 Chex Mix Pcs
15 Jack Hill Ltd London 6 Cheez-It Pcs
15 Jack Hill Ltd London 2 BN Biscuit Pcs
17 Foodies. London 3 Mighty Munch Pcs
15 Jack Hill Ltd London 4 Pot Rice Pcs
18 Order All Boston 5 Jaffa Cakes Pcs
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/506.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。