Bài giảng Microsoft SQL server - Bài 5: Truy vấn dữ liệu trên hai hoặc nhiều bảng được biên soạn giúp các bạn sinh viên biết cách viết câu truy vấn có liên kết (liên kết trong) trên nhiều bảng; sử dụng câu lệnh union.
Trang 1Lecture 5
How to retrieve data from two or more tables
Trang 2
Objectives
Applied
e Use the explicit syntax to code an inner join that returns data from a single table or multiple tables
e Code a union statement
Knowledge
e Describe the differences between an inner join, a left outer join, a right outer join, a full outer join, and a cross join
e Explain why you don’t need to use right outer joins
e Describe the use of the implicit syntax for coding inner joins e Describe the use of unions including the use of the EXCEPT and INTERSECT operators Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 2 Muc tiéu bai giang: ° Ung dung: ‹©_ Biết cách viết câu truy vấn có liên kết (liên kết trong) trên nhiều bảng ¢ Biết cách sử dung cau Iénh union ¢ Kién thức:
¢ Phan biét su khdc nhau gitra lién kết trong (inner join), liên kết ngoài trai (left outer join), lién két ngaoif phai (right outer join), lién kêt ngoai day du (full outer join) va lién két chéo (cross join)
¢ Gidi thich tai sao khéng can ding right outer join
¢ M6 ta cú pháp câu lệnh liên kết trong không tường minh
Trang 3The Departments table The Employees table
DeptName DeptNo EmployeelD LastName FFirstName DeptNo
essai ' Em mở 2
2 Payroll 2 2 2 Jones Elmer 4
3 Operations 3 3 3 Simonian Ralph 2
4 Personnel 4 4 4 Hemandez Olivia 1
Trang 4The explicit syntax for an inner join SELECT select_list FROM table 1 [INNER] JOIN table 2 ON join condition 1 [[INNER] JOIN table 3 _ ON join_condition_2] The implicit syntax for an inner join SELECT select_list
FROM table 1, table 2 [, table 3]
WHERE table 1.column_name operator table _2.column_name [AND table 2.column_name operator table 3.column_name]
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 4
Trang 5
An inner join of the Employee and Department tables
SELECT Employee.*, Department *
FROM Employee JOIN Department
ON Employee.DeptNo = Department DeptNo;
EmployeelID LastName FFirstName DeptNo DeptName DeptNo
2 a torn Cer ri 2 "Pal — 2
3 3 Simonian Ralph 2 3 Operations 3
4 4 Hemandez Olivia 1 4 Personnel 4
5 5 Aaronsen Robert 2 5 Maintenance 5 6 6 Watson Denise 6 7 7 Hardy Thomas 5 8 8 O'Leary Rhea 4 ay 9 9 Locario Paulo 6 Mưrach's SQL Server 2012, C4 Le Thi Tu Kien — FIT -
Ví dụ liên két trong gitta hai bang Employee va Department
Trong liên kết trong, những cặp bản ghi nào của hai bảng làm cho biểu thức
điêu kiện sau ÔN đúng thì sẽ được liên kêt với nhau đê tạo thành bản ghi mới
Trang 6The explicit syntax for an outer join SELECT select_list FROM table 1 {LEFT|RIGHT|FULL} [OUTER] JOIN table 2 ON join condition 1 [{LEFT|RIGHT|FULL} [OUTER] JOIN table 3 ON join_condition_2] What outer joins do
Joins of this type Keep unmatched rows from Left outer join The first (left) table
Right outer join The second (right) table Full outer join Both tables
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 6
Cấu trúc lệnh tường minh của liên kết ngoài
Trang 7
A left outer join DeptNo
SELECT DeptName, Departments.DeptNo, LastName 1 i
FROM Departments LEFT JOIN Employees 2 ”¿
ON Departments.DebtNo = Employees DeptNo ; 3 Operations 3
4 Personnel 4
The result set 5 Maintenance 5
DeptName DeptNo LastName
1 | Accounting 1 Hemandez ——x.-.h ¬ ae."
2 am 2 Sith 1 fo ảnh Ondy 2
3 Payroll 2 Simonian 2 2 Jones Eimer a
- 2 aster 4 | onder | Chen 1
5 Operations 3 NULL 5 5 Aaronsen Robert 2
_—L XE Jones 6 6 Watson Denise 6
7 Personnel 4 O'Leary 7 - Hardy Thomas 5
8 Maintenance 5 Hardy 8 8 O'Leary Rhea 4
9 9 Locario Paulo 6
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 7
Kết quả phép liên kết ngoài trái giữa Department (trái) và Employee (phải) Trong liên kết ngoài trái, kết quả bao gồm những cặp bản ghi của hai bảng làm
cho biểu thức điều kiện sau ON đúng sẽ được liên kết với nhau để tạo thành
Trang 8A right outer join
SELECT DeptName, Employees.DeptNo, LastName FROM Departments RIGHT JOIN Employees He TÊN DeptNo ON Departments.DeptNo = Employees.DeptNo; sa 2 Payroll 2 3 erat 3 The result set 4 Personne! oe 4 5 Maintenance 5 Dept Name DeptNo LastName 1 | Payroll 2 Smith
2 Personnel 4 Jones r Employee!D oy LastName FirstName _ DeptNo
3 Payroll 2 Simonian bản | Smith ow :
4 Accounting 1 Hemandez — oe 3 3 Simonian Ralph 2 5 Payroll 2 Aaronsen
P NULL P Nưnn | 4 4 Hemandez Olivia 1 = rr 5 ach 5 5 Aaronsen Robert 2 : ae : = y 6 6 Watson Denise 6 8 ersonnel Olea 7 7 Hardy Thomas 5
[|9 NULL 6 Locario te Saad m Td
9 9 Locario Paulo 6
Mưrach's SQL Server 2012, C4 Le Thi Tu Ken — FIT - HNUE Side 8
Kết quả phép liên kết ngoài phải giữa Department (trái) và Employee (phải) Trong liên kết ngoài trái, kết quả bao gồm những cặp bản ghi của hai bảng làm
cho biểu thức điều kiện sau ON đúng sẽ được liên kết với nhau để tạo thành bản ghi mới trong bảng kết quả (giống như liên kết trong) và những bản ghi ở
bảng phải không liên kết được với bảng ghi nào ở bảng bên trái
Liên kết ngoài phải thường cho kết quả giống như liên kết trong vì điều kiện
ràng buộc tham chiếu luôn yêu cầu các giá trị của khóa ngoài đều phải là các giá trị đã tôn ở khóa chính mà nó tham chiêu đến Do đó, không có hàng (bản shï) nào bên bảng chứa khóa ngồi (phải) khơng liên kết được với bất kì hàng
Trang 9A full outer join
SELECT DeptName, Departments.DeptNo,
Employees.DeptNo, LastName DeptName _ DeptNo
FROM Departments FULL JOIN Employees 5 | Accounting _ |
ON Departments DeptNo = Employees DeptNo; é —
3 Operations 3
The result set m—-.- 5 Maintenance 5
DeptName DeptNo DeptNo LastName
1 [Accounting |1 1 Hemandez EmployeeiD DeptNe 2 Payroll 2 2 Smith 1 1 Ì 2 3 Payol 2 2 Simonian 2 2 1 4 + Payroll 2 2 Aaronsen 3 3 2 ||5 Operations 3 NULL NULL Ail 1 6 Personnel 4 + Jones 5 5 2 7 Personnel 4 * O'Leary 6 6 6 8 Maintenance 5 5 Hardy 5) 7 5
9 NULL NULL 6 Watson 8 8 O'Leary Rhea 4
10 NULL NULL 6 Locario 9 9 Locario Paulo 6
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Side 9
Kết quả phép liên kết ngoài trái và phải giữa Department (trái) và Employee (phai)
Trong liên kết ngoài trái, kết quả bao gồm hợp của liên kết ngoài trái và liên
Trang 10How to code a cross join using the explicit syntax
The explicit syntax for a cross join
SELECT select list
FROM table 1 CROSS JOIN table 2
A cross join that uses the explicit syntax
SELECT Departments DeptNo, DeptName, EmployeeID, LastName
Trang 11How to code a cross join using the implicit syntax
The implicit syntax for a cross join
SELECT select list FROM table 1, table 2
A cross join that uses the implicit syntax
SELECT Departments DeptNo, DeptName, EmployeeID, LastName
Trang 12More example slides
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 12
Một số slide ví dụ thêm về liên kết 3 bảng, tự liên kết và cách sử dụng các
phép toán tập hợp trén quan hé nhu Union (hgp), Intersect (giao) va Except
Trang 13
Join three tables using left outer joins SELECT DeptName, LastName, ProjectNo
FROM Departments LEFT JOIN Employees
ON Departments DeptNo = Employees DeptNo LEFT JOIN Projects
ON Employees.EmployeeID = Projects.EmployeeID ORDER BY DeptName, LastName, ProjectNo;
The result set DeptName LastName ProjeetNo = “ri
2— Mantenace Hany NULL
Trang 14Join three tables using full outer joins SELECT DeptName, LastName, ProjectNo
FROM Departments FULL JOIN Employees
ON Departments DeptNo = Employees DeptNo FULL JOIN Projects ON Employees.EmployeeID = Projects.EmployeeID ORDER BY DeptName ; The result set Name LasName No nit I Watson P1013 2 NUL 7 Locaio — P1013 3 NULL NULL P1014 4 Accounting Hemandez P1011
5 Maintenance Hardy NULL
6 Operations NULL NULL | 7 — Payol Smith P1012
8 Payroll Simonian P1012
Trang 15
Combine an outer and an inner join SELECT DeptName, LastName, ProjectNo FROM Departments
JOIN Employees
ON Departments DeptNo = Employees DeptNo LEFT JOIN Projects
Trang 17COMPANY Database EMPLOYEE | FNAME | MINIT | LNAME BDATE ADDRESS Slide 8- 17
Slide hiển thị dữ liệu của các bảng trong CSDL COMPANY
Trang 18z LName Seth Wong English Narayan Borg Wallace Jabbar Zelaya F11111 SSN 123456789 333445555 453453453 ې@84444 999665555 987654321 987987987 999887777 Murach's SQL Server 2012, C4 BDate 1965-01-10 1978-08-12 197207431 1970-09-12 1954-04-10 1941-06-20 1981-03-29 1967-12-22 The result set Address Sex 731 Fondren, Houston, TX M 638 Voss, Houston, TX M 5631 Rice, Houston, TX M 975 Fie Oak, Humble, TX F 450 Stone, Houston, TX M 231 Bemy, Bellaire, TX F 980 Dallas, Houston, TX M 321 Castle Spring, Houston, TX Ff SuperSSN 333445555 333445555 333445555 888665555 987654321 888665555
Le Thi Tu Kien - FIT - HNUE
The implicit syntax for an inner join SELECT select list
FROM table 1, table 2 [, table 3]
WHERE table _1.column_name operator table 2.column_name
[AND table 2.column_name operator table _ 3.column_name] Department * WHERE Employee.DNo = Department Dnumber; DNumber ManagerSSN a ee Ơn Ơn Ơn Ơn 333445555 333445555 333445555 333445555 888665555 123456789 999887777 999887777 A join of the Employee and Department tables SELECT Employee.*, FROM Employee, Department ManagerStatDate — DLocation 2008-05-12 Houston 2008-05-12 Houston 2009-05-12 Houston 2009-05-12 Houston 2001-01-10 Houston 2007-06-23 Houston 2005-02-16 Stafford 2005-02-16 Stafford Side 18
Cú pháp câu lệnh liên kết trong dạng không tường minh
Biểu hức liên kết được đặt trong mệnh đề WHERE
Trang 19The syntax for an inner join
that uses correlation names SELECT select_list
FROM table 1 [AS] nl
[INNER] JOIN table 2 [AS] n2
ON n1.column name operator n2.column name [[TNNER] JOIN table 3 [AS] n3
ON n2.column name operator n3.column name]
Mưrach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 19
Cú pháp câu lệnh liên kết trong có sử dụng tên bí danh (biễn bộ) cho các bảng
Trang 20An inner join of the Employee and Department tables
SELECT E.*, D.3 FROM Employee AS E
J Department D
ON E.DNo = D.Dnumber;
The result set
FName Mint LName SSN BDate Address Sex Salary SuperSSN DNo DName DNumber ManagerSSN Manage3atDde DLocation 1 | Jonh ÌB Smth 123456789 1965-01-10 731 Fondren, Houston, TX M 30000 333445555 5 Research 5 333445555 22090512 Houston 2 Faliin T Wong 33345553 1978-08-12 638 Voss, Houston, TX M 40000 888665555 5 Research 5 333445555 2090612 Houston 3 Joyce A — English 4553433 19720731 5631 Rice, Houston, TX M 2500 333445555 5 Research 5 333445555 20090512 Houston 4 Ramesh K Narayan 666884444 1970-09-12 975 Fre Oak, Humble, TX F 38000 333445555 5 Research 5 333445555 20090512 Houston 5 James E Bog 889665555 19540410 450 Stone, Houston, TX M 55000 0 1 Headquarter † 888665555 2001-01-10 Houston 6 Jennifer S Wallace 987654321 1941-06-20 291 Beny Bellaire TX F 43000 888665555 6 — Production 6 123456789 2007023 Houston 7 Armed V_ Jabba 987987987 19910323 980 Dallas Houston, TX M 25000 987654321 4 © Administration 4 999887777 200951216 Stafford 8 Aica J Zelaya 93993697777 1967-12-22 321 Castle Spring Houston TX F 25000 888665555 4 Administration 4 999887777 2051216 Staford (8 rows) Mưrach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 20 Vi du truy van cé str dung tén bi danh E cho bang Employee va D cho bảng Department
Chú ý: Khi đã đặt tên bí danh cho bảng thì chỉ được dùng các bí danh đó trong
Trang 21A self-join that returns supervisors’ name of employees SELECT E1.SSN, El.FName, El.SuperSSN, E2.FName AS SupervisorName FROM Employee AS El JOIN Employee AS E2 ON E1l.SuperSSN = E2.SSN; The result set SSN FName SupeSSN SupervisorName 1 |123456789 |jonh 333445555 Frenklin 2 333445555 Frankin 898665555 James 3 453453453 Joyce 333445555 Franklin 4 666894444 Ramesh 333445555 Franklin 5 987654321 Jennifer 888665555 James 6 987987987 Ahmad 987654321 Jennifer 7 999887777 Alca 999665555 James (7 rows) Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 21 Vi du vé tu lién két (self-join):
Truy vân: Đưa ra tên người quản lí của các nhân viên
Trong ví dụ này bảng employee tự liên kết trong với chính nó dựa trên giá trị của hai cột SuperSsn và Ssn do đó câu lệnh này bắt buộc phải dùng tên bí danh cho bảng Employee
(Note: Why does the result including only 7 rows?)
Trang 22A SELECT statement that joins three tables
SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS
FROM PROJECT
N DEPARTMENT ON DNUM=DNUMBER
JOIN EMPLOYEE ON ManagerSSN=SSN
WHERE PLOCATION='New York'
The result set
PNUMBER DNUM LNAME BDATE ADDRESS
1 | 10 ¡4 Zelaya 1967-1222 321 Casle Spring Houston, TX
Mưrach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 22
Ví dụ truy vấn liên kết đữ liệu của 3 bảng:
For every project located in “New York’, list the project number, the controlling department number, and the department manager's last name,
address, and birthdate (V6i moi du 4n 6 New York, dua ra mã dự án, mã phòng
quản lý dự án và họ, địa chỉ, ngày sinh của trưởng phòng quản lý dự án đó)
Trang 23The syntax for a union operation SELECT statement_1 UNION [ALL] SELECT statement 2 [UNION [ALL] SELECT statement 3]
[ORDER BY order by list] Rules for unions
e Each result set must return the same number of columns
e The corresponding columns in each result set must have compatible data types
e The column names in the final result set are taken from the first SELECT clause Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 23 Cú pháp truy vẫn dùng phép toán hợp (Union) Một số quy định: - Kết quả của các câu truy vấn Select trong truy vân Union có số cột như nhau -_ Các cặp cột trương ứng trong mỗi kết quả phải có kiểu dữ liệu đối sánh được
-_ Tên các cột trong bảng kết quả cuối cùng được lây từ tên các cột trong kết quả của câu lệnh Select đâu tiên
Trang 24Union example
Query: Make a list of all project names for projects that involve an employee whose last name is 'Wong' as a worker or as a manager of the department that controls the project
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 24
Truy vấn: Đưa ra tên của các dự án mà nhân viên có họ là Wong tham gia hoặc là trưởng phòng quản lí dự án đó
Trang 25
Union example (SELECT PNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND ManagerSSN=SSN AND
LNAME='Wong' )
UNION
(SELECT PNAME
FROM PROJECT, WORKSON, EMPLOYEE WHERE PNUMBER=PNO ANL
ESSN=SSN AND LNAME='Wong')
Murach's SQL Server 2012, C4 Le Thi Tu Kien - FIT - HNUE Side 25
Trang 26
The syntax for the EXCEPT and INTERSECT operators SELECT statement _1 {EXCEPT | INTERSECT} SELECT statement 2
[ORDER BY order by list]
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 26
Cú pháp câu truy vẫn có sử dụng phép toán tập hợp EXCEPT (hiệu) và
INTERSEC (giao)
Trang 27Union example
(SELECT PNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND ManagerSSN=SSN LNAME='Wong' INTERSECT (SELECT PNAME FROM PROJECT, WORKSON, EMPLOYEE WHERE PNUMBER=PNO
ESSN=SSN AND LNAME='Wong')
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE Slide 27
Intersect example
Query: Make a list of all project names for projects that involve an employee whose last name is 'Wong' as a worker and as a manager of the department that controls the project
Truy vân: Đưa ra tên của các dự án mà nhân viên có họ là Wong tham gia va là trưởng phòng quản lí dự án đó
Trang 28Union example (SELECT PNAME FROM PROJECT, DEPARTMENT, EMPLOYEE LNAME='Wong'" ) EXCEPT (SELECT PNAME FROM PROJECT, WORKSON, EMPLOYEE WHERE PNUMBER=PNO
ESSN=SSN AND LNAME='Wong")
Murach's SQL Server 2012, C4 Le Thi Tu Kien — FIT - HNUE WHERE DNUM=DNUMBER AND ManagerSSN=SSN ANI EXCEPT example
Query: Make a list of all project names for projects that involve an employee whose last name is 'Wong' as a manager of the department that controls the project but is not as a worker
Truy vân: Đưa ra tên của các dự án mà nhân viên có họ là Wong là trưởng phòng quản lí dự án đó nhưng không tham gia
Trang 29
Practice
1 Đưa ra mã nhân viên, họ tên và tên phòng của các nhân viên 2 Đưa ra ngày sinh và địa chỉ của nhân viên làm việc cho phòng
“Nghiên cứu'
3 Đưa ra mã nhân viên, tên phòng của nhân viên có họ tên là "Tran Van Tra’
4 Với mọi dự án ở Ba Đình, đưa ra tên dự án, mã phòng quản lí dự án đó và họ, địa chỉ, tên của trưởng phòng quản lí dự án đó
A + A A A A r A
5 Đưa ra tên của nhân viên chưa kêt hôn (chưa có phụ thuộc) 6 Đưa ra tên của các nhân viên thuộc phòng Š tham gia dự án Sản
phâm A hon 10 tiêng
7 Đưa ra tên của các nhân viên có cùng tên với người phụ thuộc của chính nhân viên đó
§ Đưa ra mã nhân viên, họ tên của các nhân viên trực tiêp bị quản lí
bởi nhân viên Lê Mã Lương
Slide §- 29
Trang 30
Practice(cont) 9, 10 is i 12 13 14 15
Đưa ra mã dự án, tên dự án chưa có nhân viên tham gia Đưa ra tên các nhân viên chưa tham gia dự án nào Đưa ra tên các phòng chưa quản lý dự án nào
Đưa ra tên các dự án mà nhân viên Lê Mã Lương đã tha gia
Đưa ra tên các nhân viên tham gia dự an ‘Tin hoc hóa'
Đưa ra tên các các dự án do phòng nghiên cứu quản lý Đưa ra mã nhân viên, họ tên của các nhân viên phòng Nghiên
cứu đã tham gia vào dự án sản phâm A
Slide §- 30