Join - Cau Lenh Sql

  • Uploaded by: Tran Duy Tung
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Join - Cau Lenh Sql as PDF for free.

More details

  • Words: 1,955
  • Pages: 6
Join (SQL) – Wikipedia tiếng Việt

1 of 6

http://vi.wikipedia.org/wiki/Join_(SQL)

Join (SQL) Bách khoa toàn thư mở Wikipedia

Một từ khóa join kết nối nhiều bản ghi từ 2 bảng dữ liệu trong 1 cơ sở dữ liệu quan hệ và kết quả ñược ñưa vào 1 bảng (tạm). Trong ngôn ngữ truy vấn theo cấu trúc (SQL) có 3 loại kết hợp sau: nội, ngoại và chéo. Kết ngoại ñược chia ra thêm thành kết ngoại bên trái (left outer join), kết ngoại bên phải (right outer join), và kết ngoại ñủ (full outer join). Về mặt toán học, phép kết hợp là 1 cấu tạo quan hệ, 1 thao tác cơ bản trong ñại số quan hệ và tổng quát hóa và là khái quát hóa của cấu tạo hàm.

Mục lục 1 Ví dụ trên bảng 2 Các hình thức kết hợp 2.1 Kết nội 2.2 Kết ngoại bên phải 2.3 Kết ngoại ñủ 2.4 Full outer join 2.5 Kết chéo 3 Xem thêm 3.1 Tổng quát

Ví dụ trên bảng Những ví dụ dưới ñây về phép kết hợp sử dụng 2 bảng sau: Bảng "employee"

Bảng "department"

LastName DepartmentID

DepartmentName DepartmentID

Smith

34

Sales

31

Jones

33

Engineering

33

Robinson

34

Clerical

34

Jasper

36

Marketing

35

Steinberg

33

Rafferty

31

8/19/2009 11:22 AM

Join (SQL) – Wikipedia tiếng Việt

2 of 6

http://vi.wikipedia.org/wiki/Join_(SQL)

ðể minh họa, ta cần chú ý rằng DepartmentID của nhân viên Jasper không có dòng tương ứng nào trong bảng department, và phòng Marketing thì không có dòng tương ứng trong bảng employee.

Các hình thức kết hợp Kết nội Một phép kết nội (inner join) thực chất là tìm giao của 2 bảng dữ liệu. ðây là loại kết hợp thường ñươc dùng nhất và ñược xem như là phép kết hợp mặc ñịnh. Ví dụ dưới ñây về phép kết hợp trích tất cả các bản ghi trong bảng dữ liệu A (employee) và tìm những bản ghi tương ứng trong bảng B (department). Nếu không tìm ñược, những bản ghi trong A sẽ không ñược ñưa vào kết quả. Nếu có nhiều kết quả tìm ñược trong B tương ứng với vị từ, thì 1 dòng sẽ ñược trả về ứng với mỗi vị từ (giá trị ở bảng A sẽ ñược lặp). Cần ñặc biệt chú ý khi kết hợp những bảng trên những cột mà có thể là NULL vì giá trị NULL sẽ không bao giờ có tương ứng. Xem giải pháp ở Phép Kết Ngoại Trái và Phép Kết Ngoại phải Ví dụ về phép kết nội (cú pháp chuẩn ANSI 92): SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID

Ví dụ về phép kết nội (cú pháp không chuẩn): SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID

Kết quả kết hợp: +-----------+--------------+----------------+--------------+ | LastName | DepartmentID | DepartmentName | DepartmentID | +-----------+--------------+----------------+--------------+ | Smith | 34 | Clerical | 34 | | Jones | 33 | Engineering | 33 | | Robinson | 34 | Clerical | 34 | | Steinberg | 33 | Engineering | 33 | | Rafferty | 31 | Sales | 31 | +-----------+--------------+----------------+--------------+

Chú ý rằng nhân viên Jasper và phòng Marketing không xuất hiện. Không một bản nào trong những bản này có dòng tương ứng trong bảng kết hợp của chúng, nên ñã bị loại ra khỏi kết quả của phép kết nội này. === Kết ngoại bên trái === Left outer join Một phép kết ngoại bên trái (left outer join) khác rất nhiều với 1 phép kết nội. Thay vì giới hạn những kết quả thu ñược trong cả 2 bảng, nó chỉ giới hạn ñối với những kết qua ở bảng bên trái (A). Nghĩa là nếu mệnh ñề ON không có bản ghi tương ứng bên bảng B, 1 dòng trong kết quả vẫn ñược trả về nhưng với giá trị NULL cho mỗi cột trong bảng B. Nó trả về tất cả những giá trị từ bản bên trái + (những giá trị tương ứng với bảng bên phải hoặc là (null khi những giá trị ở bảng bên phải không tương ứng)

8/19/2009 11:22 AM

Join (SQL) – Wikipedia tiếng Việt

3 of 6

http://vi.wikipedia.org/wiki/Join_(SQL)

Chẳng hạn, nó cho phép ta tìm phòng ban của nhân viên, nhưng vẫn trả về nhân viên ngay cả khi phòng ban của người ấy là NULL hoặc không tồn tại. Ví dụ ở trên sẽ bỏ qua những nhân viên trong phòng ban không tồn tại. Ví dụ về phép kết ngoại bên trái (cú pháp chuẩn ANSI 92): SELECT distinct * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID

Ví dụ về phép kết ngoại bên trái (cú pháp không chuẩn): SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID(+)

+-----------+--------------+----------------+--------------+ | LastName | DepartmentID | DepartmentName | DepartmentID | +-----------+--------------+----------------+--------------+ | Smith | 34 | Clerical | 34 | | Jones | 33 | Engineering | 33 | | Robinson | 34 | Clerical | 34 | | Jasper | 36 | NULL | NULL | | Steinberg | 33 | Engineering | 33 | | Rafferty | 31 | Sales | 31 | +-----------+--------------+----------------+--------------+

Trong cú pháp không chuẩn, dấu (+) ngụ ý rằng bảng department phải ñược mở rộng (bằng giá trị NULL) cho những dòng không tương ứng tồn tại trong bảng employee. Dấu (+) chỉ ñược dùng trong một số hệ quản trị CSDL, có hệ quản trị CSDL dùng dấu (+) nó sẽ không hiểu. Sau ñây là mã lỗi (Server: Msg 170, Level 15, State 1, Line 3 Line 3: Incorrect syntax near ')')

Kết ngoại bên phải Một phép kết ngoại bên phải (right outer join) hầu như tương tự với phép kết ngoại bên trái, trừ 1 ñiều là thứ tự các bảng ñổi lại. Mỗi bản ghi từ bảng bên phải, B hoặc department sẽ ñược trả về và giá trị NULL sẽ ñược trả về cho những dòng mà không có bản ghi tương ứng bên bảng A. Nó trả về tất cả những giá trị từ bảng bên phải + giá trị tương ứng từ bảng bên trái (hoặc null) Ví dụ về phép kết ngoại bên phải (cú pháp chuẩn ANSI 92): SELECT * FROM employee RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID

Ví dụ về phép kết ngoại bên phải (cú pháp không chuẩn): SELECT * FROM employee, department WHERE employee.DepartmentID(+) = department.DepartmentID

8/19/2009 11:22 AM

Join (SQL) – Wikipedia tiếng Việt

4 of 6

http://vi.wikipedia.org/wiki/Join_(SQL)

+-----------+--------------+----------------+--------------+ | LastName | DepartmentID | DepartmentName | DepartmentID | +-----------+--------------+----------------+--------------+ | Smith | 34 | Clerical | 34 | | Jones | 33 | Engineering | 33 | | Robinson | 34 | Clerical | 34 | | Steinberg | 33 | Engineering | 33 | | Rafferty | 31 | Sales | 31 | | NULL | NULL | Marketing | 35 | +-----------+--------------+----------------+--------------+

Kết ngoại ñủ Full outer join Một phép kết ngoại ñủ (full outer join) kết hợp cả kết quả của cả phép kết ngoại bên trái và phép kết ngoại bên phải. Những phép kết này ñưa ra bản ghi của cả 2 bảng dữ liệu, và lấp ñầy những dòng tương ứng bị thiếu của cả 2 phía bằng NULLs. Một vài hệ cơ sở dữ liệu không hỗ trợ chức năng này, nhưng nó có thể ñược thay thế bằng việc dùng phép kết ngoại bên trái và bên phải và phép hợp (union). (Xem dưới ñây) Ví dụ về phép kết ngoại ñủ (cú pháp chuẩn ANSI 92): SELECT * FROM employee FULL OUTER JOIN department ON employee.DepartmentID = department.DepartmentID

+-----------+--------------+----------------+--------------+ | LastName | DepartmentID | DepartmentName | DepartmentID | +-----------+--------------+----------------+--------------+ | Smith | 34 | Clerical | 34 | | Jones | 33 | Engineering | 33 | | Robinson | 34 | Clerical | 34 | | Jasper | 36 | NULL | NULL | | Steinberg | 33 | Engineering | 33 | | Rafferty | 31 | Sales | 31 | | NULL | NULL | Marketing | 35 | +-----------+--------------+----------------+--------------+

Cùng 1 ví dụ, cho những cơ sở dữ liệu không hỗ trợ phép kết ngoại ñủ:

8/19/2009 11:22 AM

Join (SQL) – Wikipedia tiếng Việt

5 of 6

http://vi.wikipedia.org/wiki/Join_(SQL)

SELECT employee.LastName, employee.DepartmentID, department.DepartmentName, department.DepartmentID FROM employee LEFT JOIN department ON employee.DepartmentID = department.DepartmentID UNION SELECT employee.LastName, employee.DepartmentID, department.DepartmentName, department.DepartmentID FROM employee RIGHT JOIN department ON employee.DepartmentID = department.DepartmentID WHERE employee.DepartmentID IS NULL

Kết chéo Mặc dù không ñược sử dụng thường xuyên, một phép kết chéo (cross join) là cơ sở mà dựa trên ñó phép kết nội ñược tạo nên. Một phép kết chéo trả về tích Descartes của những tập hợp các dòng từ những bảng ñược kết. Câu SQL dùng cho phép kết chéo liệt kê những bảng dữ liệu sẽ ñược kết (FROM), nhưng không bao gồm bất cứ vị từ lọc nào (WHERE). Ví dụ về phép kết chéo (cú pháp chuẩn ANSI 92): SELECT * FROM employee CROSS JOIN department;

Ví dụ về phép kết chéo (cú pháp thay thế): SELECT * FROM employee, department;

8/19/2009 11:22 AM

Join (SQL) – Wikipedia tiếng Việt

6 of 6

http://vi.wikipedia.org/wiki/Join_(SQL)

+-----------+---------------+----------------+--------------+ | LastName | DepartmentID | DepartmentName | DepartmentID | +-----------+---------------+----------------+--------------+ | Smith | 34 | Sales | 31 | | Smith | 34 | Engineering | 33 | | Smith | 34 | Clerical | 34 | | Smith | 34 | Marketing | 35 | | Jones | 33 | Sales | 31 | | Jones | 33 | Engineering | 33 | | Jones | 33 | Clerical | 34 | | Jones | 33 | Marketing | 35 | | Robinson | 34 | Sales | 31 | | Robinson | 34 | Engineering | 33 | | Robinson | 34 | Clerical | 34 | | Robinson | 34 | Marketing | 35 | | Jasper | 36 | Sales | 31 | | Jasper | 36 | Engineering | 33 | | Jasper | 36 | Clerical | 34 | | Jasper | 36 | Marketing | 35 | | Steinberg | 33 | Sales | 31 | | Steinberg | 33 | Engineering | 33 | | Steinberg | 33 | Clerical | 34 | | Steinberg | 33 | Marketing | 35 | | Rafferty | 31 | Sales | 31 | | Rafferty | 31 | Engineering | 33 | | Rafferty | 31 | Clerical | 34 | | Rafferty | 31 | Marketing | 35 | +-----------+---------------+----------------+--------------+

Ta có thể thấy phép kết chéo không tìm những bản ghi tương ứng. Phép kết này ít khi ñược dùng, ngoại trừ ñể phát sinh tất cả những kết hợp có khả năng của các bản ghi từ các bảng dữ liệu mà không chia sẻ phần tử chung. Nếu A và B là 2 tập hợp thì phép kết chéo tạo ra |A| x |B| bản ghi ở kết quả (với |X| là lực lượng (số phần tử) của tập hợp X)

Xem thêm Tổng quát Câu lệnh truy vấn - Select (SQL) Câu lệnh thêm - Insert (SQL) Câu lệnh cập nhật - Update (SQL) Lấy từ “http://vi.wikipedia.org/wiki/Join_(SQL)” Thể loại: SQL Trang này ñược sửa ñổi lần cuối lúc 07:16, ngày 24 tháng 5 năm 2009. Văn bản ñược phát hành theo Giấy phép Creative Commons Ghi công/Chia sẻ tương tự; có thể áp dụng ñiều khoản bổ sung. Xem ðiều khoản Sử dụng ñể biết thêm chi tiết. Wikipedia® là thương hiệu ñã ñăng ký của Wikimedia Foundation, Inc., một tổ chức phi lợi nhuận.

8/19/2009 11:22 AM

Related Documents

Join - Cau Lenh Sql
May 2020 13
Lenh Cau Hinh Ccna
April 2020 17
Sql Bag 3 Join Tabel
May 2020 21
Join
August 2019 44

More Documents from ""

Join - Cau Lenh Sql
May 2020 13
Tin Tuc.eng
October 2019 28
October 2019 22
Focusc307fap_wiring.pdf
April 2020 20
Tin Tuc.viet
October 2019 31
Cao Oc Van Phong Cbre
October 2019 21