Thêm một đường nối, không đoán tên
Từ câu ba bảng, muốn có tên nhạc sĩ của bài trong bản thu thì đi theo đường `banthuam → bannhac → nhacsi`. `banthuam` **không** có `idNhacsi`; vì thế điều kiện nối mới là `bannhac.idNhacsi = nhacsi.idNhacsi`. Câu sau có bốn bảng nhưng mỗi JOIN chỉ nối đúng một quan hệ đã biết:
```sql
SELECT r.idBanthuam, b.tenBannhac,
n.tenNhacsi, c.tenCasi
FROM banthuam AS r
INNER JOIN bannhac AS b
ON r.idBannhac = b.idBannhac
INNER JOIN nhacsi AS n
ON b.idNhacsi = n.idNhacsi
INNER JOIN casi AS c
ON r.idCasi = c.idCasi
ORDER BY r.idBanthuam;
```
Máy thử trả ba hàng, trong đó bản thu1 và2 đều là “Mưa đầu mùa” của **Mai An** nhưng do hai ca sĩ khác nhau thể hiện; bản thu6 là “Ngày nắng” của Mai An do Linh Chi thể hiện. Tên người/bài trong bài chỉ là dữ liệu giả.
Lọc đúng người, rồi đọc kết quả
Muốn xem bản thu của nhạc sĩ Mai An trên máy thử, thêm `WHERE n.idNhacsi = 1` **trước** `ORDER BY`. Nếu muốn lọc theo ca sĩ Linh Chi, dùng `WHERE c.idCasi = 1`. Hai cách lọc nêu hai đối tượng khác nhau; đọc mã từ bảng người tương ứng trên máy của mình. Có thể lọc theo `n.tenNhacsi = 'Mai An'`, nhưng tên người có thể trùng; mã riêng tránh lẫn người cùng tên.
SGK gọi cột kết quả “tên tác giả” ở một bài vận dụng; bảng hiện tại lưu `tenNhacsi`, không có cột `tenTacgia`. Nếu cần tiêu đề ấy trên kết quả, viết `n.tenNhacsi AS tenTacgia`; bí danh chỉ đổi nhãn của kết quả, không tạo một thông tin mới. Không đổi tên trường thật trong CSDL để khớp lời câu hỏi.
Bài luyện
Từ banthuam và bannhac, muốn nối thêm nhacsi, điều kiện nào đúng?
Mã bản thu khác vai trò mã nhạc sĩ.
Bài lưu mã người sáng tác để tham chiếu.
Mã ca sĩ trỏ tới casi.
Không nối bằng hai chuỗi tên khác nghĩa.
Lời giải
Đường nối từ bản nhạc tới nhạc sĩ dùng bannhac.idNhacsi = nhacsi.idNhacsi.
Bài luyện
Muốn chỉ xem bản thu của nhạc sĩ mã 1 trong câu bốn bảng, WHERE nào đúng?
Chỉ chọn mã bản thu.
Lọc ca sĩ.
Lọc đúng mã nhạc sĩ.
Chỉ chọn một mã bài.
Lời giải
Sau khi JOIN nhacsi, dùng `WHERE n.idNhacsi = 1` để chọn các bản thu của nhạc sĩ ấy.
Bài luyện
`n.tenNhacsi AS tenTacgia` làm gì?
AS trong SELECT không sửa cấu trúc bảng.
Bí danh chỉ dùng cho kết quả câu truy vấn.
Không tạo hàng mới.
Cột xuất phát từ nhacsi, không từ casi.
Lời giải
Bí danh `tenTacgia` làm tiêu đề dễ đọc cho giá trị lấy từ n.tenNhacsi; bảng gốc vẫn giữ tên cột.
Đang học