2011-10-12 84 views
2

我有以下表格。如何使用多個表創建SQL子查詢ON JOIN

ORDER
ORDERNUMBER
CUSTOMERNUMBER
EmployeeNumber
訂購日期

客戶
CUSTOMERNUMBER
名稱
地址

EMPLOYEE
EmployeeNumber
名稱
地址

的OrderDetail
ORDERNUMBER
數量
說明
價格

咱們說的OrderDetail表有10條記錄

我想寫一個查詢,它將從ORDERDETAIL表中返回10條記錄,以包含員工姓名,員工地址,客戶姓名,客戶地址和訂單日期。

我知道我可以編寫查詢並使用INNER JOIN從ORDER表中獲取信息,但是如何創建其餘查詢以從CUSTOMER和EMPLOYEE表中獲取信息。

SELECT * 
    FROM OrderDetail D 
     INNER JOIN Order O 
      ON D.OrderNumber = O.OrderNumber; 

回答

2

只需添加一些更多的加入...

SELECT * 
FROM OrderDetail D 
JOIN Order USING (OrderNumber) 
JOIN Customer USING (CustomerNumber) 
JOIN Employee USING (EmployeeNumber) 

你可能要重新排序的JOIN纔能有最小的表第一,因爲這可能會爲你提供一些性能提升(取決於你的服務器版本,最近的版本會爲你優化連接,並可能以「最好」的方式實際執行連接)。

而且,在MySQL的話,至少JOIN隱式擴展到INNER JOIN,寫

A JOIN B USING (COL) 

相當於寫

A JOIN B ON (A.COL = B.COL) 
0

,如果你有

ORDER.EmployeeNumber and EMPLOYEE.EmployeeNumber 
ORDER.CustomerNumber and CUSTOMER.CustomerNumber 
之間的外鍵引用

然後試試這個

SELECT 
     E.name AS employeeName, 
     E.Address AS employeeAddress, 
     C.name AS customerName, 
     C.Address AS customerAddress. 
     O.OrderDate 
FROM OrderDetail D 
INNER JOIN Order O ON D.OrderNumber = O.OrderNumber 
INNER JOIN EMPLOYEE E ON E.EmployeeNumber = 0.EmployeeNumber 
INNER JOIN CUSTOMER C ON C.CustomerNumber= 0.CustomerNumber 
LIMIT 0,10 
1
SELECT * 
FROM OrderDetail D 
INNER JOIN Order O ON D.OrderNumber = O.OrderNumber 
INNER JOIN Eployee E on O.EployeeNumber = E.EployeeNumber 
INNER JOIN Customer C on O.CustomerNumber = C.CustomerNumber 
+0

呃有選擇具體...,而選擇*是罰款,這將是最好指定從特定表的特定列來選擇。 –

+0

完全同意 –

+0

我該如何去添加一個條件語句來查詢所有訂單的日期爲「10/10/2011」。OrderDate字段位於ORDER表中。謝謝 –