Giải bài tập SGK: Bài 14: SQL – Ngôn ngữ truy vấn có cấu trúc – Tin học 11

Mục lục [Ẩn]

Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó

Câu hỏi mở đầu trang 69

Đề bài: Ở bài trước các em đã biết hệ QTCSDL với vai trò là một bộ phần mềm hỗ trợ khởi tạo, cập nhật, truy xuất CSDL để người dùng có thể cập nhật, truy xuất CSDL. Ngày nay người ta thực hiện công việc đó chủ yếu thông qua ngôn ngữ truy vấn có cấu trúc SQL. Sự khác biệt của việc sử dụng SQL so với việc truy xuất dữ liệu bằng ngôn ngữ lập trình là gì?

Lời giải:

Sự khác biệt giữa SQLngôn ngữ lập trình:

  • Khi dùng ngôn ngữ lập trình (như Python, C++,…):
    • Người dùng phải biết rõ cấu trúc tệp dữ liệu.
    • Phải tự viết chương trình chi tiết: mở tệp, đọc từng dòng, tách dữ liệu, kiểm tra điều kiện, hiển thị kết quả.
    • → Kiểu lập trình “theo thủ tục”, mất công sức, dễ nhầm lẫn.
  • Khi dùng SQL:
    • Người dùng chỉ cần viết yêu cầu dưới dạng câu truy vấn (muốn làm gì).
    • Không cần nghĩ cách để thực hiện – hệ QTCSDL sẽ tự giải quyết.
    • → Đơn giản, ngắn gọn, dễ dùng.

1. Lợi ích của ngôn ngữ truy vấn

Hoạt động 1 trang 69

Đề bài: Để lấy danh sách các bản nhạc do nhạc sĩ Văn Cao (mã định danh Aid = 1) sáng tác trong bảng dữ liệu Bản nhạc, ta có thể thực hiện theo một trong hai cách sau:

  • Cách 1: Dùng một ngôn ngữ lập trình, viết chương trình mở tệp chứa bảng dữ liệu Bản nhạc, rồi lần lượt lấy ra từng nhóm dữ liệu liên quan đến từng bản nhạc, sau đó tách phần Aid để kiểm tra, nếu Aid = 1 thì đưa ra tên bản nhạc (TenBN).
  • Cách 2: Dùng ngôn ngữ truy vấn, viết “CHỌN TenBN TỪ Bản nhạc VỚI Aid = 1” rồi gửi cho hệ QTCSDL thực hiện.

Sự khác biệt cơ bản trong cách truy vấn nhờ ngôn ngữ truy vấn so với lập trình trực tiếp theo em là gì?

Lời giải:

Sự khác biệt cơ bản giữa hai cách:

Tiêu chí Ngôn ngữ lập trình (Cách 1) Ngôn ngữ truy vấn (Cách 2)
Người dùng cần biết Phải biết chi tiết cấu trúc tệp dữ liệu Không cần biết cấu trúc lưu trữ
Cách viết Viết cách thực hiện (mở tệp, đọc, tách, kiểm tra, in) Viết yêu cầu (muốn lấy gì)
Độ dài Dài dòng, phức tạp Ngắn gọn, đơn giản
Người thực hiện Người dùng tự thực hiện Hệ QTCSDL thực hiện

→ Ngôn ngữ truy vấn giúp người dùng chỉ cần mô tả yêu cầu, còn cách thực hiện do hệ QTCSDL đảm nhiệm → tiết kiệm công sức, tránh sai sót.

2. Khởi tạo CSDL

Câu hỏi củng cố mục 2 trang 71

Đề bài:

1. Hãy viết câu truy vấn tạo bảng Ca sĩ như đã mô tả trong Bài 11 với tên bảng là casi.

Lời giải:

Bảng Ca sĩ có 2 cột: Sid (mã ca sĩ, xâu kí tự ngắn) và TenCS (tên ca sĩ).

CREATE TABLE casi (
    Sid CHAR(2),
    TenCS VARCHAR(64)
);

Giải thích:

  • Sid CHAR(2): Mã ca sĩ có độ dài cố định 2 kí tự (ví dụ: TK, LD, TN, QH).
  • TenCS VARCHAR(64): Tên ca sĩ có độ dài thay đổi, tối đa 64 kí tự.

2. Hãy viết câu truy vấn thêm khoá chính Sid cho bảng casi.

Lời giải:

ALTER TABLE casi ADD PRIMARY KEY (Sid);

Giải thích: Lệnh ALTER TABLE ... ADD PRIMARY KEY (...) dùng để thêm khoá chính cho một bảng đã có sẵn.

3. Cập nhật và truy xuất dữ liệu

Câu hỏi củng cố mục 3 trang 72

Đề bài:

1. Hãy viết câu truy vấn lấy tất cả các dòng của bảng nhacsi.

Lời giải:

SELECT * FROM nhacsi;

Giải thích: Kí hiệu * nghĩa là “tất cả các cột”. Câu lệnh này lấy ra toàn bộ dữ liệu của bảng nhacsi.

2. Hãy viết câu truy vấn thêm các dòng cho bảng casi với các giá trị là (‘TK’, ‘Nguyễn Trung Kiên’), (‘QD’, ‘Quý Dương’), (‘YM’, ‘Y Moan’).

Lời giải:

INSERT INTO casi VALUES
    ('TK', 'Nguyễn Trung Kiên'),
    ('QD', 'Quý Dương'),
    ('YM', 'Y Moan');

Giải thích: Lệnh INSERT INTO ... VALUES ... dùng để thêm nhiều dòng mới cùng lúc vào bảng bằng cách liệt kê từng bộ giá trị.

4. Kiểm soát quyền truy cập

Câu hỏi củng cố mục 4 trang 72

Đề bài:

1. Hãy viết câu truy vấn cấp quyền UPDATE đối với tất cả các bảng trong CSDL music cho người dùng mod.

Lời giải:

GRANT update
    ON music.*
    TO mod;

Giải thích:

  • GRANT update: cấp quyền cập nhật.
  • ON music.*: áp dụng cho tất cả các bảng trong CSDL music.
  • TO mod: cấp cho người dùng có tên mod.

2. Hãy viết câu truy vấn thu hồi quyền DELETE đối với bảng nhacsi trong CSDL music cho người dùng mod.

Lời giải:

REVOKE delete
    ON music.nhacsi
    FROM mod;

Giải thích:

  • REVOKE delete: thu hồi quyền xoá.
  • ON music.nhacsi: chỉ áp dụng cho bảng nhacsi trong CSDL music.
  • FROM mod: thu hồi từ người dùng mod.

Luyện tập

Luyện tập trang 72

Đề bài:

1. Hãy viết câu truy vấn tạo bảng Bản thu âm (banthuam) như đã mô tả trong Bài 13.

Lời giải:

Bảng Bản thu âm có 2 cột: Mid (mã bản nhạc) và Sid (mã ca sĩ).

CREATE TABLE banthuam (
    Mid CHAR(4),
    Sid CHAR(2)
);

Giải thích:

  • Mid CHAR(4): Mã bản nhạc có 4 kí tự (ví dụ: 0001, 0002,…).
  • Sid CHAR(2): Mã ca sĩ có 2 kí tự (ví dụ: TK, LD,…).

2. Viết câu truy vấn tạo khoá ngoài Mid và Sid cho bảng banthuam.

Lời giải:

ALTER TABLE banthuam ADD FOREIGN KEY (Mid) REFERENCES bannhac(Mid);
ALTER TABLE banthuam ADD FOREIGN KEY (Sid) REFERENCES casi(Sid);

Giải thích:

  • Câu lệnh đầu: Khai báo Mid trong bảng banthuam tham chiếu tới khoá chính Mid của bảng bannhac.
  • Câu lệnh sau: Khai báo Sid trong bảng banthuam tham chiếu tới khoá chính Sid của bảng casi.

3. Viết câu truy vấn lấy ra tất cả các dòng trong liên kết bảng banthuam với bảng bannhac, mỗi dòng lấy các cột: Mid, Sid của bảng banthuam và cột TenBN của bảng bannhac.

Lời giải:

SELECT banthuam.Mid, banthuam.Sid, bannhac.TenBN
FROM banthuam INNER JOIN bannhac
ON banthuam.Mid = bannhac.Mid;

Giải thích:

  • SELECT banthuam.Mid, banthuam.Sid, bannhac.TenBN: chọn 3 cột từ hai bảng.
  • FROM banthuam INNER JOIN bannhac: liên kết hai bảng banthuambannhac.
  • ON banthuam.Mid = bannhac.Mid: liên kết theo cột Mid (khoá ngoài của banthuam = khoá chính của bannhac).

Vận dụng

Vận dụng trang 72

Đề bài: Viết câu truy vấn lấy ra tất cả các dòng trong liên kết bảng banthuam với bảng bannhac và bảng casi, mỗi dòng lấy các cột: Mid, Sid của bảng banthuam, cột TenBN của bảng bannhac và TenCS của bảng casi.

Lời giải:

SELECT banthuam.Mid, banthuam.Sid, bannhac.TenBN, casi.TenCS
FROM banthuam
    INNER JOIN bannhac ON banthuam.Mid = bannhac.Mid
    INNER JOIN casi ON banthuam.Sid = casi.Sid;

Giải thích:

  • Câu lệnh này liên kết 3 bảng: banthuam, bannhaccasi.
  • Bước 1: Liên kết banthuam với bannhac theo cột Mid → lấy được tên bản nhạc.
  • Bước 2: Liên kết tiếp với casi theo cột Sid → lấy được tên ca sĩ.
  • Kết quả: Mỗi dòng gồm 4 cột: Mid, Sid, TenBN (tên bản nhạc) và TenCS (tên ca sĩ).

→ Câu truy vấn này cho biết đầy đủ thông tin: bản thu âm nào, do ca sĩ nào thể hiện, thuộc bản nhạc nào.

Thầy Phạm Thành Danh

Thầy Phạm Thành Danh

(Người kiểm duyệt, ra đề)

Chức vụ: Trưởng ban biên soạn môn Tin Học THPT

Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1

Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa