Hướng dẫn đọc dữ liệu từ nhiều bảng trong SQL Server
Hướng dẫn đọc dữ liệu từ nhiều bảng trong SQL Server sẽ nối tiếp bài Hướng dẫn đọc dữ liệu từ SQL Server mà chúng tôi đã trình bày trước đó.
Nếu như bài lab hướng dẫn đọc dữ liệu từ SQL Server trình bày câu lệnh đọc dữ liệu từ một bảng thì bài hướng dẫn đọc dữ liệu từ nhiều bảng sẽ trình bày cách liên kết (các phép kết) nhiều bảng để đọc dữ liệu.
Trong SQL Server hỗ trợ các phép kết giữa các bảng gồm Inner Join và Outer Join. Trong đó Outer Join bao gồm Left Join, Right Join và Full Join.
Mỗi phép Join có vai trò khác nhau và tùy theo yêu cầu mà chúng ta lựa chọn phép Join nào cho phù hợp.
Hướng dẫn đọc dữ liệu từ nhiều bảng trong SQL Server – Join trong SQL Server
Inner Join trong SQL Server
Giả sử chúng ta có 2 bảng là A và B. Phép inner join sẽ lấy phần chung giữa 2 bảng tức phần tô màu đỏ như trong hình. Phần còn lại của bảng A và bảng B sẽ không xuất hiện trong phép join này.
Left Join trong SQL Server
Theo hình, bảng bên trái là A. Bảng bên phải là B.
Left join sẽ bao gồm kết quả của Inner join và phần còn lại của bảng bên trái (Bảng A) tức phần tô màu đỏ.
Righ Join trong SQL Server
Right join thì cho kết quả ngược lại Left join. Nghĩa là bao gồm Inner join và phần còn lại của bảng B (B là bảng bên phải trong phép kết).
Full Join trong SQL Server
Theo như hình trên, Full join = Left join + Right join. Nghĩa là kết quả sẽ bao gồm phần giống nhau của A và B. Ngoài ra phần còn lại của cả A và B cũng được hiển thị.
Hướng dẫn đọc dữ liệu từ nhiều bảng trong SQL Server – Yêu cầu
Trong bài lab này, chúng tôi sẽ sử dụng cơ sở dữ liệu của bài lab hướng dẫn Hướng dẫn thêm dữ liệu vào bảng trong SQL Server.
Câu 1. Hiển thị mã sinh viên, tên sinh viên, mã lớp, tên lớp của những sinh viên lớp 25CCHT02.
Câu 2. Hiển thị mã lớp và tên lớp của những lớp chưa có sinh viên.
Câu 3. Hiển thị mã sinh viên, tên sinh viên, mã môn học, tên môn học và điểm thi của sinh viên có mã 91110010003, thi lần 1.
Câu 4. Hiển thị mã môn học, tên môn học của những môn có sinh viên thi lần 2. Hiển thị tăng dần theo mã môn học.
Câu 5. Hiển thị mã sinh viên, tên sinh viên có điểm trung bình cao nhất.
Hướng dẫn đọc dữ liệu từ nhiều bảng trong SQL Server – Hướng dẫn thực hiện
Câu 1. Hiển thị mã sinh viên, tên sinh viên, mã lớp, tên lớp của những sinh viên lớp 25CCHT02.
Thông tin cần hiển thị thuộc 2 bảng. Trong đó, mã sinh viên, tên sinh viên thuộc bảng SINHVIEN. Mã lớp, tên lớp thuộc bảng LOP. Do đó, chúng ta phải join 2 bảng này để lấy thông tin. Cụ thể trong trường hợp này, chúng ta sử dụng Inner join.
Câu 2. Hiển thị mã lớp và tên lớp của những lớp chưa có sinh viên.
Mục tiêu của chúng ta là hiển thị những lớp chưa có sinh viên. Nghĩa là trong bảng SINHVIEN, cột MaLop chưa có giá trị của cột MaLop thuộc bảng LOP. Trong câu lệnh trên, chúng tôi sử dụng LEFT JOIN. Do đó, những lớp chưa có sinh viên đồng nghĩa giá trị của cột SV.MaSv sẽ NULL (SV.MaSV IS NULL).
Tuy nhiên đây không phải là cách làm duy nhất. Các bạn vẫn có thể sử dụng Sub Query để giải quyết cho yêu cầu này.
Câu 3. Hiển thị mã sinh viên, tên sinh viên, mã môn học, tên môn học và điểm thi của sinh viên có mã 91110010003, thi lần 1.
Bảng SINHVIEN, MONHOC và DIEMTHI được sử dụng trong câu lệnh trên là vì mã sinh viên, tên sinh viên lấy từ bảng SINHVIEN. Mã môn học, tên môn học lấy từ bảng MONHOC. Điểm thi lấy từ bảng DIEMTHI. Trong trường hợp này, chúng ta chỉ cần sử dụng Inner join. Điều kiện lọc dữ liệu là mã sinh viên là 91110010003 và lần thi bằng 1
Câu 4. Hiển thị mã môn học, tên môn học của những môn có sinh viên thi lần 2. Hiển thị tăng dần theo mã môn học.
Mặc dù trong mệnh đề SELECT không có thông tin lấy từ bảng DIEMTHI nhưng chúng ta vẫn phải Inner join với bảng này bởi vì liên quan đến điều kiện lần thi bằng 2 (Mệnh đề WHERE).
Hướng dẫn đọc dữ liệu từ nhiều bảng trong SQL Server – Thêm dữ liệu
Thêm dữ liệu vào bảng DIEMTHI
Dữ liệu hiện tại của bảng DIEMTHI
Hiện tại có 2 sinh viên là 91110010003 và 91110010004 thi 3 môn là CSDL, MCB và THDC.
Câu 5. Hiển thị mã sinh viên, tên sinh viên có điểm trung bình cao nhất.
Để hiển thị điểm trung bình cao nhất, chúng ta phải làm 2 việc. Thứ nhất tính điểm trùng bình của từng sinh viên. Sau đó sắp xếp giảm dần theo điểm trung bình. Khi đó, điểm trung bình cao nhất sẽ nằm trên cùng. Do đó, chúng ta SELECT TOP 1 để hiển thị dòng đầu tiên. Đây chính là sinh viên có điểm trung bình cao nhất.