SQL join
Posted 牧云的少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL join相关的知识,希望对你有一定的参考价值。
SQL中的 join用于两个或多个列表之间的关系,从这些表中查询数据
Join 和 Key
为了得到完整的结果,需要从两个或者更多的表中获取结果。就需要执行join
数据库中的表可以通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中每一行的值都是唯一的。在表中,每一个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
例:(Persons)表
Id_P | LastName | FirstName | Address | City |
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
其中Id_P是Persons表中的主键。这说明Id_P是不会重复的,即使表中两个人的姓名相同,主键Id_P也可以正常的去区分他们。
(Orders)表:
Id_O | OrderNo | Id_P |
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
在这里Id_O则是Orders表中的主键,同时,Orders表中的Id_P列用于引用Persons表中的人(注:相当于把他们关联了起来)而无需使用他们的确切姓名。
我们通过了引用两个表的方式,从而获取了两个表的数据:
是哪些人订购了产品?并且他们订购了那些产品?
输出语法:
//查询出Persons表中的LastName,FirstName和Orders表中的OrderNo
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
//并且Persons.Id_P 等于 Orders.Id_P(当同一个数据库中的不同的两张表,其中一张表出现了与另一张表主键的ID则可以使两张表关联起来①)
WHERE Persons.Id_P = Orders.Id_P
除了使用上面的语法,我们还可以使用关键词Join来从两个表中获取数据。
如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
而他们的结果集都是以下结果:
LastName | FirstName | OrderNo |
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
注释①:
两张表的查询输出结果分别为
Id_P | LastName | FirstName | Address | City |
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
和
OrderNo | Id_P | |
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
但因为Oeders表中的Id_P与Persons表中的Id_P相同,所以关联了起来,所以查询Oeders的数据实际为:
Id_O | OrderNo | Id_P | LastName | FirstName | Address | City |
1 | 77895 | 3 | Carter | Thomas | Changan Street | London |
2 | 44678 | 3 | Carter | Thomas | Changan Street | London |
3 | 22456 | 1 | Adams | John | Oxford Street | Beijing |
4 | 24562 | 1 | Adams | John | Oxford Street | Beijing |
以上是关于SQL join的主要内容,如果未能解决你的问题,请参考以下文章