6. PHÁT BIỂU SQLD ẠNG JOIN
6.2. Khái niệm về mệnh đề JOIN
Trong hầu hết phát biểu SELECT, phần lớn kết quả mà bạn mong muốn lấy về đều có
liên quan đến một hoặc nhiều bảng khác nhau. Trong trƣờng hợp nhƣ vậy, khi truy vấn dữ
liệu bạn cần sử dụng mệnh đề JOIN để kết hợp dữ liệu trên hai hay nhiều bảng lại với nhau. Khi sử dụng JOIN, bạn cần quan tâm đến trƣờng (cột) nào trong bảng thứ nhất có quan hệ với trƣờng (cột) nào trong bảng thứ hai. Nếu mô hình quan hệ của bạn không tối ƣu hay không đúng, quản trình sử dụng JOIN sẽ cho kết quả trả vềkhông nhƣ ý muốn.
Trở lại ứng dụng bán hàng qua mạng trong giáo trình này, khi xuất một hợp đồng bán hàng cho khách hàng, theo thiết kế trong cơ sở dữ liệu chúng ta có rất nhiều bảng liên quan
đến nhau. 1 - n 1 -n 1 -n Items Order Details Orders Customers
Trang 142 Chẳng hạn, nếu quan tâm bán hàng thì bán cho ai. Suy ra, liên quan đến thông tin khách hàng, bán sản phẩm gì cho họ thì liên quan đến mã sản phẩm, nếu khách hàng trả tiền thì liên
quan đến phiếu thu, nếu khách hàng có công nợthì liên quan đến nợ kỳtrƣớc...
Trong phân này, chúng tôi tiếp tục thiết kế một số bảng dữ liệu cùng với kiểu dữ liệu
tƣơng ứng và quan hệ giữa các bảng đƣợc mô tảnhƣ sau:
tblCustomers (danh sách khách hàng) [CustID] int auto_increment Primary key,
[CustName] [varchar] (50) NULL ,
[Address] [varchar] (100) NULL,
[Tel] [varchar] (20) NULL,
[FaxNo] [varchar] (20) NULL,
[Email] [varchar] (50) NULL,
[Contact] [varchar] (50) NULL
[Country] [varchar] (3) NULL, [Province] [varchar] (3) NULL tblOrders (Hợp đồng bán hàng)
[OrderID] [int] Not null auto_increment Primary Key, [OrderDate] [date] NULL ,
[CustID] int ,
[Description] [varchar] (200) NULL , [ShipCost] [float] NULL , [TranID] [tinyint] NULL ,
[PaymentID] [tinyint] NULL , [Amount] [float] NULL ,
[TotalAmount] [float] NULL , tblOrderDetails (Hợp đồng bán hàng chi tiết)
[SubID] [int] auto_increment NOT NULL , [OrderID] int ,
[ItemID] int, [No] int,
[Qtty] [int] NULL , [Price] int NULL ,
[Discount] [Float] NULL , [Amount] [Float] NULL tblItems (Danh sách sản phẩm)
[ItemID] int auto_increment Primary key, [ItemName] [varchar] (200) NULL ,
Trang 143 [Unit] [nvarchar] (20) NULL , [Cost] [Float] NULL ,
[Active] [tinyint] NOT NULL , [Category] int
Bạn có thể tìm thấy các bảng dữ liệu còn lại trong dữ liệu Test trong đĩa đính kèm theo
sách.