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 |