Mệnh đề INNER JOIN

Một phần của tài liệu Giới thiệu về PHP (Ngôn ngữ lập trình) (Trang 113 - 116)

I- With Grant Option

5. PHẮT BIỂU SQL

6.3. Mệnh đề INNER JOIN

P h á t biểu SQ L dạng SE L E C T có sử dụng m ệnh đề IN N E R J O IN thường dùng dể k ết hợp hai hay nhiều báng dữ liệu lại với nhau, cú pháp của SE L E C T có sử dụng m ệnh đề IN N E R JOIN:

SELECT [SELECT LIST] FROM <FIRST_TABLENAME>

INNER JOIN <SECOND_TABLENAME> ON < JOIN CONDITION>

WHERE <CRITERIANS> ORDER BY <COLUMN LIST>

[ASC / DESC]

Nếu bạn cần lấy ra m ột sô' cột trong các bảng có k ết nối lại với nhau bằng m ệnh dề IN N E R J O IN th ì cú pháp này viết lại như sau:

SELECT [FIELD1,FIELD2, ...] FROM <FIRST_TABLENAME>

ON <JOIN CONDITIONS WHERE <CRITERIANS> ORDER BY cCOLUMN LIST>

[ASC / DESC]

VÍ d u 8-23: INNER JO IN v ớ i m ộ t s ố c ộ t ch ỉ đ inh

I* in ra danh sách khách hàng mua hàng trong tháng 10 *I

Select CustName,OrderlD, OrderDate,Amount,

TotalAmount from tblCustomers inner join tblOrders

on tblCustomers.CustID = tblOrders.CustID where month (OrderDate) = 10

order by CustName

K ết quả trả về như sau:

CustName OrderlD OrđerDate . . TotalAmount

CENTURY Hotel 13 2001-10-17 388800000 CENTURY Hotel 14 2001-10-18 518400000 CENTURY Hotel 16 2001-10-17 388800000 CENTURY Hotel 17 2001-10-18 14400000 CENTURY Hotel 18 2001-10-18 12960000 CENTURY Hotel 110 2001-10-18 216000000 Plaza Hotel 12 2001-10-17 403200000 Plaza Hotel 19 2001-10-17 86400000 Plaza Hotel 11 2001-10-17 576000000 Plaza Hotel 15 2001-10-17 288000000

Nếu bạn cần lấy ra t ấ t cả các cột trong các bảng có k ế t nôi lại với nhau bằng m ệnh dề IN N E R JO IN , cú pháp trê n có th ể viết lại như sau:

SELECT f irst_tablename . * , second_tablename.*

[, next table name] FROM <f irst_tablename>

INNER JOIN <second_tablename> ON < j oin conditions>

[INNER JOIN <next_tablename> ON <join conditions:»]

WHERE <conditions> ORDER BY <column list>

[ASC / DESC]

V i d u 8-24: INNER JO IN v ớ i tấ t c á c trư ờng liê n q uan

I* in ra danh sách khách hàng mua hàng trong tháng 10 * I

Select CustlD,CustName,OrderlD, OrđerDate,TotalAmount

from tblCustomers inner join tblOrders

On TblCustomers.CustID=tblOrders.CustID where month (OrderDate) = 10

order by CustName DESC

CustID CustName .OrderlD .TotalAmount 13 Plaza Hotel .11 576000000 13 Plaza Hotel .15 288000000 12 Plaza Hotel .12 403200000 12 Plaza Hotel .19 86400000 16 CENTURY Hotel .13 388800000 16 CENTURY Hotel .14 518400000 16 CENTURY Hotel .16 388800000 16 CENTURY Hotel .17 14400000 16 CENTURY Hotel .18 12960000 16 CENTURY Hotel .110 .. 216000000

Nếu trong những bảng cần k ế t nối có tê n trường (cột) giống nhau th ì khi thực th i p h á t biểu

SQ L dạng S E L E C T phải chỉ rõ cột thuộc bảng nào. Trong trường hợp cả hai cùng lấy dữ liệu ra th ì bạn cần chuyển á n h xạ tê n khác cho cột thông qua m ệnh đề A S , ví dụ như:

SELECT first_tablename.CustID as CUSTID, second_tablename.CustID as CUSTID FROM <f irst_tablename>

INNER JOIN <second_tablename> ON <join condition>

WHERE <criterians> ORDER BY <column list>

[ASC / DESC]

Nếu trong những bảng cần k ế t nối đó có tê n trường (cột) giống nhau và không được chỉ rõ như trường hợp trê n khi khai báo trong cơ sở dữ liệu SQ L Server, khi thực th i phát biểu SQ L dạng

S E L E C T bạn sẽ bị lỗi, chẳng h ạ n như:

SELECT f irst_tablename. * , second_tablename. * FROM <first_tablename>

INNER JOIN <second_tablename> ON <j oin condition»

WHERE <criterians> ORDER BY ccolumn list>

[ASC / DESC]

Server: Msg 209, Lecel 16, S tate Line 1 Ambiguous column nam e 'CustID'

Tuy nhiên, với p h á t biểu trê n bạn có thể thực thi trong cơ sở dữ liệu M ySQL. Ngoài ra, p h át biểu SQL dạng S E L E C T sử dụng IN N E R JO IN bạn có th ể án h xạ (alias) tê n của bảng th à n h tên ngắn gọn để dễ th am chiếu về sau.

Thực ra p h á t biểu A L IA S có ý nghĩa giông như A S với tên cột trong bảng th à n h tê n cột khác trong phát biểu SELE C T.

Select p . * , s .* from tablenamel inner join tablename2

On tablenamel.fieldl = tablename2.field2

V í d ụ 8-25: INNER JO IN v ớ i á n h xạ t ê n b ản

Select c.CustName,

s .OrderlD,s.OrderDate, s .TotalAmount

from tblCustomer c inner join tblOrders s

On c .CustID=S.CustID

where month (s . OrderDate) =10 order by c . CustName DESC

K ết quả trả về như sau:

CustName OrderlD OrderDate . . TotalAmount

---CENTURY Hotel 13 2001- 10-17 .. 388800000 CENTURY Hotel 14 2001-10-18 .. 518400000 CENTURY Hotel 16 2001-10-17 .. 388800000 CENTURY Hotel 17 2001-10-18 .. 14400000 CENTURY Hotel 18 2001-10-18 .. 12960000 CENTURY Hotel 11 2001-10-18 .. 216000000 Plaza Hotel 12 2001-10-17 .. 403200000 Plaza Hotel 19 2001-10-17 .. 86400000 Plaza Hotel 11 2001-10-17 .. 576000000 Plaza Hotel 15 2001-10-17 .. 288000000

T ất nhiên, bạn cũng có th ể viết p h á t biểu trê n ứng với từng cột muốn lấy ra bằng cách khai báo tê n cột.

Một phần của tài liệu Giới thiệu về PHP (Ngôn ngữ lập trình) (Trang 113 - 116)

Tải bản đầy đủ (PDF)

(142 trang)