SQL指南-JOIN

Joins 和 Keys

某些情况下,我们不得不选择两个或者更多的表以返回结果。我们不得不执行一个连接。数据库中的表会涉及到相互间的keys。主键为列的每一行的唯一值。目的是将数据绑定到一起。横跨表,每个表中没有重复的数据。

 下面的"Employees"表中, "Employee_ID" 列是主键,意味着没有相同的两行Employee_ID。Employee_ID甚至可区别两个有相同的名字的人。

当我们看下面的示例表时,请留意:

  • "Employee_ID" 列是"Employees" 表的主键
  • "Prod_ID" 列是"Orders" 表的主键
  •  "Orders" 表中的 "Employee_ID" 列用于查阅 "Employees" 表中的persons,并没有使用它们的name
------------------------------------------

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

------------------------------------------

查阅两个表

我们能够从两个表中查阅数据,如示:

示例

谁下了定单,他们定购了什么?

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

------------------------------------------

使用Joins

或者我们可以使用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

INNER JOIN 返回两表相匹配的所有记录行。如果在Employees表中有不匹配Orders表的记录,这些记录行将不会被列示出来。

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

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

LEFT JOIN 从第一个表返回返回所有记录行,即使有不匹配第二个表(Orders)的记录。如果Employees表中有与Orders表不匹配的记录行,它们也会被列示出来。

结果

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

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

RIGHT JOIN 从二个表中返回所有记录行,即使有不匹配第一个表(Employees)的记录。如果Orders表中有与Employees表不匹配的记录行,它们也会被列示出来。

结果

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

示例

谁定购了打印机?

SELECT Employees.Name
            FROM Employees
            INNER JOIN Orders
            ON Employees.Employee_ID=Orders.Employee_ID
            WHERE Orders.Product = 'Printer'

结果

Name
Hansen, Ola

posted on 2006-04-10 10:25  replace  阅读(357)  评论(0编辑  收藏  举报

导航