BÀI 23 - THỰC HÀNH TRUY XUẤT DỮ LIỆU QUA LIÊN KẾT CÁC BẢNG (KNTT - ICT)



TIN HỌC 11 – KNTT

Bài 23: Thực Hành Truy Xuất Dữ Liệu Qua Liên Kết Các Bảng

Khai thác dữ liệu đầy đủ, rõ ràng bằng liên kết khóa ngoại và INNER JOIN

MỤC TIÊU BÀI HỌC

Biết cách truy vấn dữ liệu từ hai hoặc nhiều bảng có liên kết khóa ngoại bằng mệnh đề INNER JOIN trong SQL.

Close-up of a computer screen displaying programming code in a dark environment.

NHIỆM VỤ 1

Lập Danh Sách Bản Nhạc Và Tên Tác Giả

Làm thế nào để hiển thị tên nhạc sĩ khi bảng bannhac không có trường tenNhacsi?

Bảng bannhac

bannhac (idBannhac, tenBannhac, idNhacsi, idTheloai)

Bảng nhacsi

nhacsi (idNhacsi, tenNhacsi)

Liên kết khóa ngoại

Trường idNhacsi trong bảng bannhac là khóa ngoại, tham chiếu đến trường khóa chính idNhacsi của bảng nhacsi.

Tên nhạc sĩ được lưu ở bảng nhacsi. Vì vậy, cần nối hai bảng theo trường idNhacsi để lấy đồng thời tên bản nhạc và tên tác giả.

Cú pháp kết hai bảng

INNER JOIN ghép các dòng có giá trị tương ứng tại trường liên kết giữa hai bảng.

SQL
SELECT bannhac.tenBannhac, nhacsi.tenNhacsi
FROM bannhac INNER JOIN nhacsi
     ON bannhac.idNhacsi = nhacsi.idNhacsi;
Thực hiện truy vấn với HeidiSQL

Chọn CSDL mymusic, mở thẻ Truy vấn, nhập câu lệnh SQL và nhấn F9 hoặc chọn lệnh Chạy.

  • HeidiSQL dùng màu sắc để giúp người dùng quan sát cú pháp câu truy vấn.
  • Khi nhập tên bảng và dấu chấm, HeidiSQL hiển thị danh sách trường để người dùng lựa chọn.




HÃY THỰC HÀNH

Vận dụng INNER JOIN để lập các danh sách bản nhạc theo yêu cầu.



1
Lập danh sách gồm idBannhac, tenBannhac, tenNhacsi từ tất cả các bản nhạc có trong bảng bannhac.
SQL
SELECT bannhac.idBannhac, bannhac.tenBannhac, nhacsi.tenNhacsi
FROM bannhac INNER JOIN nhacsi
     ON bannhac.idNhacsi = nhacsi.idNhacsi;
2
Lập danh sách gồm idBannhac, tenBannhac từ các bản nhạc của nhạc sĩ Đỗ Nhuận.
SQL
SELECT bannhac.idBannhac, bannhac.tenBannhac
FROM bannhac INNER JOIN nhacsi
     ON bannhac.idNhacsi = nhacsi.idNhacsi
WHERE nhacsi.tenNhacsi = 'Đỗ Nhuận';

NHIỆM VỤ 2

Lập Danh Sách Các Bản Thu Âm

Để truy vấn nhiều hơn hai bảng theo liên kết khóa ngoại, hãy lặp lại mệnh đề INNER JOIN.

Cú pháp kết ba bảng

Tên_bảng_x.tên_trường_x có thể là trường của bảng a hoặc bảng b đã được nối trước đó.

SQL
SELECT danh_sách_tên_trường_của_3_bảng
FROM tên_bảng_a
     INNER JOIN tên_bảng_b ON tên_bảng_a.tên_trường_a = tên_bảng_b.tên_trường_b
     INNER JOIN tên_bảng_c ON tên_bảng_x.tên_trường_x = tên_bảng_c.tên_trường_c
[WHERE ...]
[ORDER BY ...];
Ví dụ: Danh sách bản thu âm với idBanthuam, tenBannhac, tenCasi
SQL
SELECT banthuam.idBanthuam, bannhac.tenBannhac, casi.tenCasi
FROM banthuam
     INNER JOIN bannhac ON banthuam.idBannhac = bannhac.idBannhac
     INNER JOIN casi ON banthuam.idCasi = casi.idCasi;

NHIỆM VỤ 3

Tìm Hiểu Ứng Dụng Quản Lý Dữ Liệu Âm Nhạc

Khi nhập bản thu âm, người dùng chỉ chọn tên bản nhạc và tên ca sĩ đã có trong CSDL; danh sách hiển thị đầy đủ thông tin tường minh.



Câu hỏi và lời giải tham khảo
Người sử dụng có cần biết, nhớ cấu trúc của bảng trong CSDL không?

Không. Người dùng thao tác trên giao diện trực quan với hộp chọn và ô nhập liệu, nên không cần nhớ tên bảng hay tên trường trong CSDL.

Giao diện trên có dễ hiểu, dễ sử dụng không?

Có. Người dùng chọn từ danh sách có sẵn và thấy rõ tên bản nhạc, tên ca sĩ, tên tác giả thay vì các mã ID phức tạp.

Hình thức nhập dữ liệu như vậy có hỗ trợ tính nhất quán dữ liệu không?

Có. Việc chọn dữ liệu từ danh sách giúp tránh lỗi gõ sai, bảo đảm các giá trị tham chiếu chính xác với dữ liệu trong các bảng gốc.

📝 LUYỆN TẬP

Củng cố kỹ năng liên kết các bảng để khai thác dữ liệu âm nhạc.

Lấy danh sách các bản thu âm với đầy đủ: idBanthuam, tenBannhac, tenNhacsi, tenCasi.
SQL
SELECT banthuam.idBanthuam, bannhac.tenBannhac, nhacsi.tenNhacsi, casi.tenCasi
FROM banthuam
     INNER JOIN bannhac ON banthuam.idBannhac = bannhac.idBannhac
     INNER JOIN nhacsi ON bannhac.idNhacsi = nhacsi.idNhacsi
     INNER JOIN casi ON banthuam.idCasi = casi.idCasi;

🔎 VẬN DỤNG

Thực hành khai thác dữ liệu qua nhiều bảng liên kết.

Câu 1. Lấy danh sách các bản thu âm với các thông tin: idBanthuam, tenBannhac, tenCasi các bản nhạc của nhạc sĩ Văn Cao.

Kết hợp bốn bảng để tìm mọi bản thu âm của các bài nhạc có nhạc sĩ sáng tác là Văn Cao.

Bảng được liên kết
banthuambannhacnhacsicasi
Đọc câu truy vấn
SELECT banthuam.idBanthuam, bannhac.tenBannhac, casi.tenCasi
FROM banthuam
     INNER JOIN bannhac ON banthuam.idBannhac = bannhac.idBannhac
     INNER JOIN nhacsi ON bannhac.idNhacsi = nhacsi.idNhacsi
     INNER JOIN casi ON banthuam.idCasi = casi.idCasi
WHERE nhacsi.tenNhacsi = 'Văn Cao';

Kết quả mẫu

Các bản thu âm của nhạc sĩ Văn Cao
3 dòng dữ liệu
idBanthuamtenBannhactenCasi
BT01Suối mơLê Dũng
BT04Thiên ThaiHồng Nhung
BT07Trường ca Sông LôTrọng Tấn

Dữ liệu trong bảng là ví dụ mô phỏng để quan sát cấu trúc kết quả của truy vấn.


Câu 2. Lấy danh sách các bản thu âm với các thông tin: idBanthuam, tenBannhac, ten Tacgia các bản nhạc do ca sĩ Lê Dung thể hiện.

Tìm tên bài nhạc và tên tác giả của tất cả bản thu âm có ca sĩ thể hiện là Lê Dũng.

Bảng được liên kết
banthuambannhacnhacsicasi

Đọc câu truy vấn

SELECT banthuam.idBanthuam, bannhac.tenBannhac, nhacsi.tenNhacsi AS tenTacgia
FROM banthuam
     INNER JOIN bannhac ON banthuam.idBannhac = bannhac.idBannhac
     INNER JOIN nhacsi ON bannhac.idNhacsi = nhacsi.idNhacsi
     INNER JOIN casi ON banthuam.idCasi = casi.idCasi
WHERE casi.tenCasi = 'Lê Dũng';

Kết quả mẫu

Các bài hát do Lê Dũng thể hiện
3 dòng dữ liệu
idBanthuamtenBannhactenTacgia
BT01Suối mơVăn Cao
BT03Cung đàn mùa xuânNgô Thụy Miên
BT09Dòng sông lơ đãngViệt Anh

Dữ liệu trong bảng là ví dụ mô phỏng để quan sát cấu trúc kết quả của truy vấn.


Câu 3. Lấy danh sách các bản thu âm với các thông tin: id Banthuam, tenBannhac, tenTacgia, tenCasi các bản nhạc do ca sĩ Lê Dung thể hiện thuộc thể loại Nhạc trữ tình.

Thêm điều kiện thể loại để lọc các bài Nhạc trữ tình trong danh sách bản thu âm của Lê Dũng.

Bảng được liên kết
banthuambannhacnhacsicasitheloai
Đọc câu truy vấn
SELECT banthuam.idBanthuam, bannhac.tenBannhac, nhacsi.tenNhacsi AS tenTacgia, casi.tenCasi
FROM banthuam
     INNER JOIN bannhac ON banthuam.idBannhac = bannhac.idBannhac
     INNER JOIN nhacsi ON bannhac.idNhacsi = nhacsi.idNhacsi
     INNER JOIN casi ON banthuam.idCasi = casi.idCasi
     INNER JOIN theloai ON bannhac.idTheloai = theloai.idTheloai
WHERE casi.tenCasi = 'Lê Dũng' AND theloai.tenTheloai = 'Nhạc trữ tình';

Kết quả mẫu

Lê Dũng · Nhạc trữ tình
2 dòng dữ liệu
idBanthuamtenBannhactenTacgiatenCasi
BT01Suối mơVăn CaoLê Dũng
BT03Cung đàn mùa xuânNgô Thụy MiênLê Dũng

Dữ liệu trong bảng là ví dụ mô phỏng để quan sát cấu trúc kết quả của truy vấn.


Câu 4. Thực hành truy xuất bảng Phường/Xã qua liên kết với bảng Tỉnh/Thành phố.

Dùng khóa liên kết giữa bảng phuongxa và tinhthanh để hiển thị địa phương trực thuộc.

Bảng được liên kết
phuongxatinhthanh
Đọc câu truy vấn
SELECT phuongxa.idPhuongxa, phuongxa.tenPhuongxa, tinhthanh.tenTinhthanh
FROM phuongxa INNER JOIN tinhthanh
     ON phuongxa.idTinhthanh = tinhthanh.idTinhthanh;

Kết quả mẫu

Danh sách đơn vị hành chính
4 dòng dữ liệu
idPhuongxatenPhuongxatenTinhthanh
PX01Phường Bến NghéThành phố Hồ Chí Minh
PX02Phường Trúc BạchHà Nội
PX03Xã Cẩm ThanhQuảng Nam
PX04Phường Hải Châu IĐà Nẵng

Dữ liệu trong bảng là ví dụ mô phỏng để quan sát cấu trúc kết quả của truy vấn.

🧠 CÔNG THỨC NHỚ NHANH

TRUY XUẤT DỮ LIỆU

LIÊN KẾT CÁC BẢNG BẰNG INNER JOIN

KHÓA NGOẠI

Xác định trường dùng để liên kết các bảng.

INNER JOIN

Ghép các dòng có giá trị tương ứng.

WHERE / ORDER BY

Lọc và sắp xếp kết quả theo yêu cầu.

bảng dữ liệuINNER JOINdữ liệu đầy đủ


“JOIN ĐÚNG KHÓA – DỮ LIỆU ĐẦY ĐỦ – TRUY XUẤT HIỆU QUẢ.”


💻🎓

BÀI KIỂM TRA TIN HỌC THPT

Lựa chọn mức độ phù hợp với năng lực của em

📌 HƯỚNG DẪN

Em hãy lựa chọn mức độ phù hợp với yêu cầu của bài học. Sau khi chọn mức độ, bài kiểm tra trực tuyến sẽ được hiển thị ngay bên dưới.

💡 Mẹo: Hãy hoàn thành mức độ trước khi chuyển sang mức độ tiếp theo.

🌟 Mỗi câu hỏi là một cơ hội để em tiến bộ. Hãy tự tin, bình tĩnh và cố gắng hết mình!

Chúc em hoàn thành bài thật tốt!

 

Bài cũ hơn Bài mới hơn
Đọc tiếp:
Lên đầu trang