Cho đến lúc này bạn đã được nhìn thấy những phát biểu SELECT truy xuất những hàng từ chỉ một bảng cho một lần thực thi. Bạn sẽ luôn luôn cần truy xuất những hàng từ nhiều bảng sử dụng cùng mộtphát biểu SELECT.
Thí dụ: bạn có thể muốn thấy tất cả những đơn đặt của một khách hàng. Để thực kiện điều này ,bạn phải chỉ định cả hai bảng Customers và Orders sau từ khóa FROM trong phát biểu SELECT và sử dụng a table join trong mệnh đề WHERE.
Bạn cũng phải chỉ định tên của bảng khi tham chiếu đến những cột cùng tên trong cả hai bảng. phát biểu SELCET
Sau đây trinh bày và truy xuất những đơn đặt của khách hàng với CustomerID là ALFKI:
SELECT Customers.CustomerID, CompanyName, Address, OrderID, ShipAddress FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID AND Customers.CustomerID = 'ALFKI';
Chú ý rằng bảng Customers và Orders được chỉ định sau từ khóa FROM, bởi vì cả hai bảng đều chứa cột có tên là CustomerID, tên bảng được đặt trước mỗi tham chiếu đến cột tương ứng trong mỗi bảng. sự nối bảng được thự hiện trên cột CustomerID cho mỗi bảng (Customers.CustomerID = Orders.SustomerID ).
Hình 3.21 trình bày những kết quả của phát biểu SELECT này.
Phát biểu SELECT trước sử dụng định dạng tiêu chuẩn SQL cho việc liên kết những bảng. với SQL Server, bạn cũng có thể sử dụng từ khóa JOIN cho việc liên kế những bảng. lợi thế của từ khóa JOIN là bạn có thể sử dụng nó để thực hiện những kết nối ngòai. Bạn sẽ học đến ngay sau đây. Đây là một thí dụ nó viết lại những phát biểu SELECT trước sử dụng từ khóa JOIN :
SELECT Customers.CustomerID, CompanyName, Address, OrderID, ShipAddress
FROM Customers
JOIN Orders
ON Customers.CustomerID = Orders.CustomerID AND Customers.CustomerID = 'ALFKI';
Sự bất lợi của hai phát biểu SELECT trước là chúng trả về những hàng chỉ khi cả hai cột liên kết có một giá trị. Nghĩa là ,
Không một cột nào chứa giá trị NULL. Đều này có thể gây ra một lỗi nếu bạn có những hàng có một giá trị NULL trong
cả những cột sử dụng trong liên kết và bạn muốn thực sự truy xuất những hàng đó .những liên kết ngòai (Outer Jions)
giải quyết vấn đề này .sau đây là ba kiểu Outer Joins :
LEFT OUTER JOIN: (luôn được rút ngắn tới LIÊN KẾT TRÁI ) trả về tất cả những hàng từ bảng phía bên trái của liên kết, bao gồm cả những hàng có một cột chứa giá trị NULL.
RIGHT OUTER JOIN : (luôn được rút ngắn tới LIÊN KẾT PHẢI ) trả về tất cả những hàng từ một bảng phía bên phải liên kết, bao gồm cả những hàng có một cốt chứa giá trị NULL.
FULL OUTER JOIN : (luôn được rút ngắn tới LIÊN KẾT ĐẦY ) trả về tất cả những hàng từ những bảng phía phải và cả phía trái cua liên kết, bao gồm những hàng có một cột có giá trị NULL.
chúng ta hãy xem cặp thí dụ dưới đây. Đầu tiên thực hiện phát biểu INSERT để thêm một hàng vào bảng Products:
INSERT INTO Products (ProductName, SupplierID) VALUES ('DVD Player', NULL);
Chú thích : bạn sẽ học chi tiết về phát biểu INSERT sau cũng trong chương này.
Bạn không cần phải chỉ định cột ProducID bởi vì SQL Server sẽ tự động cung cấp một giá trị sử dụng một phương thức đặt mã khoá tự động. Sự nhận dạnh này được thành lập khi bảng Products được tạo ra, và phương thức đặt mã khoá tự động sẽ phát sinh một loạt những giá trị ,giá trị được phát sinh lần đầu tiên khi được gọi là 1 và được tăng lên một đơn vị với mội lần gọi tiếp theo. Thí dụ ,cột ProductID từ lúc đầu nhập liệu đến giờ đã chứa một loạt những giá trị từ 1 đến 77 ( 77 hàng) do đó phát biểu INSERT tiếp theo sẽ thêm một hàng vào bảng Products phương thức đặt mã khoá tự động sẽ đặt giá trị cho cột ProductID của dòng mới này là 78 . Bạn chú ý là cột SupplierID trong phát biểu INSERT này là NULL. Nếu bây giờ bạn thực hiện phát biểu SELECT tiếp sau, bạn sẽ không nhìn thấy hàng mới vừa INSERT boởi vì cột SupplierID của hàng mới này là NULL và do đó từ khoá JOIN trong phát biểu không thực hiện được :
SELECT ProductID FROM Products JOIN Suppliers
ON Products.SupplierID = Suppliers.SupplierID;
Để thấy được hàng mới này , bạn sử dụng LEFT JOIN trong phát biểu SELECT để truy xuất tất cả những hàng từ bảng bên trái từ khoá LEFT JOIN ( trong trường hợp này , là bảng Products):
SELECT ProductID FROM Products LEFT JOIN Suppliers
ON Products.SupplierID = Suppliers.SupplierID;
Bạn cũng có thể sử dụng LEFT JOIN với từ khoá IS NULL trong phát biểu SELECT để chỉ truy xuất hàng mới này:
SELECT ProductID FROM Products LEFT JOIN Suppliers
ON Products.SupplierID = Suppliers.SupplierID WHERE Products.SupplierID IS NULL;