Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)归海一刀
published in(发表于) 2014/2/3 6:40:20
SQL数据库高级教程:学习 SQL JOIN_[SQL Server教程]

SQL数据库高级教程:学习 SQL JOIN_[SQL Server教程]


Joins 和 Keys


有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行join。


数据库中的表可通过键将彼此联系起来。一个主键(Primary Key)可以是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。Employee_ID会区分开每一个人,即使他们中的人都着相同的名字。


当你看到下面的例子时,请注意以下几点:




表 Employees:


Employee_ID
Name
01
Hansen, Ola
02
Svendson, Tove
03
Svendson, Stephen
04
Pettersen, Kari

表 Orders:


Prod_ID
Product
Employee_ID
234
Printer
01
657
Table
03
865
Chair
03


Referring to Two Tables


我们可以通过引用两个表的方式,从两个表中获取数据:


实例


谁订购了产品,并且他们订购了什么产品?

SELECT Employees.Name, Orders.Product FROM Employees, Orders
WHERE Employees.Employee_ID=Orders.Employee_ID

结果:


Name
Product
Hansen, Ola
Printer
Svendson, Stephen
Table
Svendson, Stephen
Chair

实例


谁订购了打印机?

SELECT Employees.Name
FROM Employees, Orders
WHERE Employees.Employee_ID=Orders.Employee_ID
AND Orders.Product='Printer'

结果:


Name
Hansen, Ola


使用Join


我们也可以使用关键词JOIN来从两个表中获取数据:



内连接(INNER JOIN)


语法:

SELECT field1, field2, field3
FROM first_table
INNER JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

谁定购了产品,并且他们定购了什么?

SELECT Employees.Name, Orders.Product
FROM Employees
INNER JOIN Orders
ON Employees.Employee_ID=Orders.Employee_ID

内连接会返回两个表中所匹配的所有的行。假如某些Employees中的行与Orders中的行不匹配,那些行就不会被列出来。


结果:


Name
Product
Hansen, Ola
Printer
Svendson, Stephen
Table
Svendson, Stephen
Chair


Example 左连接(LEFT JOIN)


语法:

SELECT field1, field2, field3
FROM first_table
LEFT JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

列出所有的雇员,以及他们的定购产品 - 如果有的话。

SELECT Employees.Name, Orders.Product
FROM Employees
LEFT JOIN Orders
ON Employees.Employee_ID=Orders.Employee_ID

左连接会第一个表(Employees)那里返回所有的行,即使在第二个表(Orders)中没有匹配的行。假如某些Employees中的行没有在Orders中可匹配的行,这些行业会被列出来。


结果:


Name
Product
Hansen, Ola
Printer
Svendson, Tove
Svendson, Stephen
Table
Svendson, Stephen
Chair
Pettersen, Kari


Example 右连接(RIGHT JOIN)


语法:

SELECT field1, field2, field3
FROM first_table
RIGHT JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

列出所有的定单,以及定购者 - 如果有的话。

SELECT Employees.Name, Orders.Product
FROM Employees
RIGHT JOIN Orders
ON Employees.Employee_ID=Orders.Employee_ID

右连接会从第二个表格(Orders)那里返回所有的行,即使在第一个表格中没有可匹配的行。假如Orders中的某些行没有在Employees可匹配的行,那些行也会被列出。


结果:


Name
Product
Hansen, Ola
Printer
Svendson, Stephen
Table
Svendson, Stephen
Chair






If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759