Trắc Nghiệm Hệ Quản Trị Cơ Sở Dữ Liệu Chương 3 là bộ đề ôn tập trọng tâm dành cho chương 3 của môn Hệ Quản Trị Cơ Sở Dữ Liệu, thuộc chương trình đào tạo ngành Công nghệ Thông tin tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE). Đề thi được biên soạn bởi ThS. Trần Thị Lan Anh, giảng viên Khoa Công nghệ Thông tin – HCMUTE, năm 2024. Nội dung bộ đề tập trung vào các kiến thức then chốt của chương 3 như ngôn ngữ truy vấn dữ liệu (SQL), các phép toán trên quan hệ, thao tác cập nhật, chèn, xóa và truy xuất dữ liệu, cùng các ví dụ thực hành giúp sinh viên nắm vững cách sử dụng SQL trong quản trị cơ sở dữ liệu.
Trắc Nghiệm Hệ Quản Trị Cơ Sở Dữ Liệu trên dethitracnghiem.vn là bộ đề trắc nghiệm đại học chất lượng, hỗ trợ sinh viên HCMUTE và các trường đại học khác luyện tập, tự kiểm tra và nâng cao kiến thức về hệ quản trị cơ sở dữ liệu. Các câu hỏi được phân loại khoa học, đi kèm đáp án và giải thích cụ thể, giúp người học chủ động ôn luyện, nhận biết điểm mạnh – điểm yếu, từ đó chuẩn bị tốt nhất cho các kỳ thi học phần. Đây là tài liệu trắc nghiệm đại học không thể thiếu dành cho chương 3 của môn học quan trọng này.
Hãy cùng dethitracnghiem.vn khám phá đề thi này và thử sức ngay hôm nay!
Trắc Nghiệm Hệ Quản Trị Cơ Sở Dữ Liệu SQL đại học HCMUTE
Câu 1. Khi thiết kế bảng NhanVien, một cột SoCMND được khai báo với ràng buộc UNIQUE. Một cột khác, MaNV, được khai báo là PRIMARY KEY. Phát biểu nào sau đây diễn giải đúng nhất hệ quả của các khai báo này?
A. Cả hai cột MaNV và SoCMND đều không được phép chứa các giá trị NULL.
B. MaNV không được NULL; SoCMND có thể chứa giá trị NULL (vì NULL không bằng NULL).
C. Bất kỳ cột nào được khai báo với ràng buộc UNIQUE cũng tự động trở thành khóa ngoại.
D. Một bảng chỉ có thể có một ràng buộc UNIQUE hoặc một PRIMARY KEY, không được có cả hai.
Câu 2. Một lập trình viên thực thi câu lệnh SQL sau trên một bảng SanPham có 1.000.000 dòng:
UPDATE SanPham SET Gia = Gia * 1.1;
Hệ quả trực tiếp và nguy hiểm nhất của việc thiếu mệnh đề WHERE trong câu lệnh này là gì?
A. Câu lệnh sẽ chạy rất lâu và có khả năng cao sẽ gây ra lỗi timeout hệ thống.
B. Câu lệnh sẽ gây ra một lỗi cú pháp vì không cung cấp đủ điều kiện để thực thi.
C. Câu lệnh sẽ cập nhật giá của TẤT CẢ sản phẩm, một hành động khó đảo ngược.
D. Câu lệnh sẽ chỉ thực hiện việc cập nhật giá của dòng đầu tiên mà nó tìm thấy.
Câu 3. Phân tích sự khác biệt giữa hai câu truy vấn sau:
(1) SELECT * FROM SinhVien sv LEFT JOIN Lop l ON sv.MaLop = l.MaLop WHERE l.TenLop = ‘CNTT1’;
(2) SELECT * FROM SinhVien sv LEFT JOIN Lop l ON sv.MaLop = l.MaLop AND l.TenLop = ‘CNTT1’;
A. Cả hai câu truy vấn trên đều cho cùng một kết quả trong mọi trường hợp.
B. Câu (1) tương đương INNER JOIN; câu (2) trả về tất cả sinh viên, chỉ điền thông tin lớp ‘CNTT1’.
C. Câu (2) sẽ luôn chạy nhanh hơn câu (1) vì điều kiện được xử lý khi nối.
D. Câu (1) là một cú pháp đúng, trong khi câu (2) sẽ gây ra lỗi khi thực thi.
Câu 4. Cho bảng DangKy(MaSV, MaMH) với dữ liệu: (SV01, MH01), (SV01, MH02), (SV02, MH01), (SV03, NULL).
Kết quả của câu lệnh SELECT COUNT(*), COUNT(MaMH), COUNT(DISTINCT MaSV) FROM DangKy; lần lượt là gì?
A. 4, 3, 3 (COUNT(*) và COUNT(DISTINCT) tính sai)
B. 4, 4, 3 (COUNT(MaMH) tính sai vì có giá trị NULL)
C. 3, 3, 3 (COUNT(*) tính sai vì có giá trị NULL)
D. 4, 3, 3 (COUNT(*) đếm 4 hàng, COUNT(MaMH) bỏ qua NULL, COUNT(DISTINCT MaSV) đếm 3 mã duy nhất)
Câu 5. Người quản trị CSDL muốn thay đổi kiểu dữ liệu của cột Diem trong bảng KetQua từ VARCHAR(5) sang DECIMAL(4,2). Tuy nhiên, trong cột Diem đang tồn tại một giá trị là ‘Không thi’. Điều gì sẽ xảy ra khi thực thi lệnh ALTER TABLE KetQua MODIFY Diem DECIMAL(4,2);?
A. Hệ thống sẽ tự động chuyển đổi giá trị ‘Không thi’ thành giá trị số 0.00.
B. Lệnh sẽ thất bại và báo lỗi do không thể chuyển chuỗi ‘Không thi’ sang kiểu số.
C. Hệ thống sẽ chuyển giá trị ‘Không thi’ thành NULL và thay đổi kiểu dữ liệu.
D. Hệ thống sẽ tự động xóa các hàng có giá trị không hợp lệ trước khi thay đổi.
Câu 6. Để kết hợp kết quả từ hai câu truy vấn có cùng cấu trúc, UNION và UNION ALL đều có thể được sử dụng. Trong trường hợp nào thì việc sử dụng UNION ALL là một lựa chọn tối ưu hơn về mặt hiệu năng?
A. Khi người dùng muốn kết quả trả về được hệ thống sắp xếp một cách tự động.
B. Khi biết chắc hai tập kết quả không trùng lặp hoặc khi muốn giữ lại các hàng trùng lặp.
C. Khi hai tập kết quả được tạo ra từ hai bảng có số lượng cột khác nhau.
D. UNION luôn luôn nhanh hơn UNION ALL vì nó trả về ít dữ liệu hơn cho người dùng.
Câu 7. Xét hai cách truy vấn để tìm tên các phòng ban có nhân viên tên ‘An’:
(1) SELECT TenPB FROM PhongBan WHERE MaPB IN (SELECT MaPB FROM NhanVien WHERE HoTen = ‘An’);
(2) SELECT DISTINCT pb.TenPB FROM PhongBan pb JOIN NhanVien nv ON pb.MaPB = nv.MaPB WHERE nv.HoTen = ‘An’;
Phát biểu nào sau đây là đúng nhất trong hầu hết các hệ quản trị CSDL hiện đại?
A. Cách (1) sử dụng IN luôn cho hiệu quả cao hơn vì truy vấn con chạy trước.
B. Cách (2) sử dụng JOIN thường kém hiệu quả hơn vì phép nối luôn tốn kém.
C. Cách (2) dùng JOIN thường được bộ tối ưu hóa xử lý hiệu quả hơn và dễ đọc hơn.
D. Cả hai cách viết đều cho ra các kế hoạch thực thi giống hệt nhau về hiệu năng.
Câu 8. So sánh DELETE FROM TableA và TRUNCATE TABLE TableA, phát biểu nào sau đây KHÔNG chính xác?
A. DELETE là một thao tác DML, còn TRUNCATE là một thao tác DDL.
B. DELETE xóa từng hàng và ghi nhật ký, TRUNCATE giải phóng trang dữ liệu.
C. TRUNCATE thường reset giá trị tự tăng, còn DELETE thì không làm điều này.
D. DELETE không thể được quay lui (rollback), trong khi TRUNCATE thì có thể.
Câu 9. Thứ tự thực thi logic của các mệnh đề trong một câu lệnh SELECT là gì?
A. SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY
B. FROM -> WHERE -> HAVING -> GROUP BY -> SELECT -> ORDER BY
C. FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
D. FROM -> GROUP BY -> HAVING -> WHERE -> SELECT -> ORDER BY
Câu 10. Một VIEW được tạo ra từ câu lệnh SELECT nối 3 bảng lại với nhau và có sử dụng hàm SUM() trong danh sách cột. Khi người dùng cố gắng thực hiện lệnh INSERT vào VIEW này, điều gì rất có thể sẽ xảy ra?
A. Dữ liệu sẽ được chèn thành công vào bảng đầu tiên trong mệnh đề FROM.
B. Hệ thống sẽ báo lỗi vì VIEW này không thể cập nhật được do chứa phép nối và hàm tập hợp.
C. Lệnh INSERT sẽ được thực thi nhưng không có dữ liệu nào được thêm vào.
D. Chỉ những cột không phải là kết quả của hàm tập hợp SUM() mới được chèn.
Câu 11. Để tìm tất cả sản phẩm có tên bắt đầu bằng ‘Laptop’ và có đúng 4 ký tự theo sau (ví dụ: ‘Laptop Pro’, ‘Laptop Air’), biểu thức LIKE nào là chính xác nhất?
A. `LIKE ‘Laptop%’` (tìm các sản phẩm bắt đầu bằng ‘Laptop’).
B. `LIKE ‘Laptop____’` (dấu gạch dưới `_` đại diện cho một ký tự bất kỳ).
C. `LIKE ‘Laptop_ _ _ _’` (cú pháp có thể không chuẩn xác trên mọi hệ CSDL).
D. Cả hai cú pháp `Laptop%` và `Laptop____` đều cho cùng một kết quả.
Câu 12. Câu lệnh SELECT MaNV FROM NhanVien EXCEPT SELECT MaNV FROM PhanCong; sẽ trả về kết quả gì?
A. Danh sách mã nhân viên có trong cả hai bảng NhanVien và PhanCong.
B. Danh sách tất cả mã nhân viên từ cả hai bảng NhanVien và PhanCong.
C. Danh sách mã nhân viên có trong bảng NhanVien nhưng không có trong bảng PhanCong.
D. Danh sách mã nhân viên có trong bảng PhanCong nhưng không có trong NhanVien.
Câu 13. Một ràng buộc khóa ngoại được định nghĩa với tùy chọn ON DELETE CASCADE. Điều này có ý nghĩa gì khi một bản ghi ở bảng được tham chiếu (bảng cha) bị xóa?
A. Hành động xóa sẽ bị từ chối nếu có bản ghi liên quan ở bảng con.
B. Tất cả các bản ghi có liên quan trong bảng con cũng sẽ tự động bị xóa theo.
C. Giá trị của khóa ngoại trong các bản ghi liên quan sẽ được cập nhật thành NULL.
D. Giá trị của khóa ngoại trong các bản ghi liên quan sẽ được cập nhật thành mặc định.
Câu 14. Biểu thức CASE trong SQL được sử dụng để làm gì?
A. Để thực hiện các phép tính toán học phức tạp trên các cột dữ liệu.
B. Để tạo ra logic điều kiện (if-then-else) ngay trong một câu lệnh SQL.
C. Để định nghĩa một khối mã lệnh có thể được tái sử dụng nhiều lần.
D. Để kiểm tra các ràng buộc trên dữ liệu trước khi thực hiện chèn.
Câu 15. Trong mệnh đề ORDER BY, từ khóa DESC có ý nghĩa là gì?
A. Sắp xếp các giá trị null (không xác định) lên trên đầu của kết quả.
B. Sắp xếp các hàng trong tập kết quả theo thứ tự giảm dần (Descending).
C. Bỏ qua các hàng có giá trị trùng lặp hoàn toàn trong tập kết quả.
D. Sắp xếp các hàng trong tập kết quả theo thứ tự tăng dần (Ascending).
Câu 16. Để tính tổng doanh thu (SoLuong * DonGia) cho mỗi đơn hàng, câu lệnh nào sau đây đúng cú pháp và cho kết quả chính xác?
A. `SELECT MaDH, SUM(SoLuong) * SUM(DonGia) FROM ChiTietDH GROUP BY MaDH;` (sai logic tính toán)
B. `SELECT MaDH, SUM(SoLuong * DonGia) FROM ChiTietDH;` (thiếu GROUP BY)
C. `SELECT MaDH, SUM(SoLuong * DonGia) FROM ChiTietDH GROUP BY MaDH;`
D. `SELECT MaDH, TOTAL(SoLuong * DonGia) FROM ChiTietDH GROUP BY MaDH;` (sai tên hàm)
Câu 17. Cho bảng SinhVien(MaSV, HoTen, DiemTB). Câu lệnh nào sau đây sẽ trả về 5 sinh viên có điểm trung bình cao nhất?
A. `SELECT TOP 5 WITH TIES * FROM SinhVien ORDER BY DiemTB ASC;` (sai thứ tự sắp xếp)
B. `SELECT * FROM SinhVien WHERE ROWNUM <= 5 ORDER BY DiemTB DESC;` (sai thứ tự mệnh đề)
C. `SELECT * FROM SinhVien ORDER BY DiemTB DESC;` (trả về tất cả sinh viên)
D. `SELECT * FROM SinhVien ORDER BY DiemTB DESC LIMIT 5;` hoặc `SELECT TOP 5 * …`
Câu 18. Sự khác biệt chính giữa FULL OUTER JOIN và INNER JOIN là gì?
A. `INNER JOIN` trả về tất cả các hàng từ cả hai bảng tham gia phép nối.
B. `INNER JOIN` chỉ trả về hàng khớp, `FULL OUTER JOIN` trả về tất cả hàng từ cả hai bảng.
C. `FULL OUTER JOIN` là một tên gọi khác của phép toán `CROSS JOIN`.
D. `FULL OUTER JOIN` nhanh hơn `INNER JOIN` vì không cần kiểm tra điều kiện.
Câu 19. Mục đích của câu lệnh CREATE INDEX idx_hoten ON NhanVien(HoTen); là gì?
A. Để bắt buộc các giá trị trong cột HoTen phải là duy nhất không trùng lặp.
B. Để tăng tốc độ tìm kiếm trên cột HoTen, nhưng có thể làm chậm thao tác ghi.
C. Để thực hiện việc mã hóa toàn bộ dữ liệu trong cột HoTen của bảng.
D. Để tạo một bản sao của bảng NhanVien được sắp xếp theo thứ tự HoTen.
Câu 20. Câu lệnh SELECT MaGV FROM GiangDay WHERE MaMH = ‘MH01’ INTERSECT SELECT MaGV FROM GiangDay WHERE MaMH = ‘MH02’; dùng để tìm:
A. Mã các giảng viên dạy môn ‘MH01’ hoặc là môn ‘MH02’.
B. Mã các giảng viên dạy đồng thời cả môn ‘MH01’ và môn ‘MH02’.
C. Mã các giảng viên dạy môn ‘MH01’ nhưng không dạy môn ‘MH02’.
D. Sẽ gây ra lỗi vì không thể dùng `INTERSECT` trên cùng một bảng.
Câu 21. Trong SQL, NULL có nghĩa là gì và kết quả của biểu thức NULL = NULL là gì?
A. NULL có nghĩa là 0, do đó kết quả của biểu thức là TRUE.
B. NULL có nghĩa là chuỗi rỗng, do đó kết quả của biểu thức là TRUE.
C. NULL là giá trị không xác định, kết quả của `NULL = NULL` là UNKNOWN.
D. NULL là một giá trị logic tương đương FALSE, kết quả là FALSE.
Câu 22. Khi nào thì nên sử dụng kiểu dữ liệu NVARCHAR thay vì VARCHAR?
A. Khi người dùng muốn lưu trữ các chuỗi có độ dài cố định và không thay đổi.
B. Khi người dùng muốn tiết kiệm không gian lưu trữ tối đa cho các chuỗi tiếng Anh.
C. Khi ứng dụng cần lưu trữ dữ liệu đa ngôn ngữ, sử dụng bộ ký tự Unicode.
D. Khi cột đó được sử dụng làm khóa chính của một bảng trong cơ sở dữ liệu.
Câu 23. Mệnh đề GROUP BY trong SQL được sử dụng để:
A. Sắp xếp các hàng trong tập kết quả theo một hoặc nhiều cột được chỉ định.
B. Lọc các hàng của bảng dựa trên một điều kiện logic cho trước.
C. Nhóm các hàng có cùng giá trị thành các nhóm để thực hiện hàm tập hợp.
D. Thực hiện việc kết hợp các hàng từ nhiều bảng dữ liệu khác nhau lại.
Câu 24. Câu lệnh GRANT SELECT, INSERT ON KHACHHANG TO NhomKinhDoanh; có tác dụng gì?
A. Cấp cho nhóm người dùng NhomKinhDoanh quyền xem và chèn dữ liệu trên bảng KHACHHANG.
B. Cấp cho nhóm người dùng NhomKinhDoanh toàn bộ các quyền trên bảng KHACHHANG.
C. Thu hồi lại quyền xem và chèn dữ liệu của nhóm người dùng NhomKinhDoanh.
D. Tạo ra một nhóm người dùng mới trong hệ thống có tên là NhomKinhDoanh.
Câu 25. Một “truy vấn con tương quan” (correlated subquery) là một truy vấn con mà:
A. Luôn chạy độc lập với truy vấn cha và chỉ thực thi một lần duy nhất.
B. Việc thực thi của nó phụ thuộc vào truy vấn cha và chạy lặp lại với mỗi hàng của truy vấn cha.
C. Luôn luôn trả về nhiều hơn một giá trị cho mỗi lần thực thi của nó.
D. Chỉ có thể được sử dụng bên trong mệnh đề SELECT của một câu truy vấn.
Câu 26. DROP TABLE SinhVien; và DROP DATABASE QuanLySV; khác nhau như thế nào?
A. `DROP TABLE` xóa dữ liệu, `DROP DATABASE` chỉ xóa cấu trúc.
B. `DROP TABLE` có thể được quay lui (rollback), `DROP DATABASE` thì không thể.
C. `DROP TABLE` xóa một bảng cụ thể; `DROP DATABASE` xóa toàn bộ CSDL và các đối tượng bên trong nó.
D. Chúng là hai lệnh hoàn toàn tương đương nhau về chức năng và phạm vi.
Câu 27. Khối lệnh BEGIN TRANSACTION … COMMIT; trong SQL được sử dụng để làm gì?
A. Để định nghĩa một thủ tục lưu trữ mới trong cơ sở dữ liệu.
B. Để nhóm nhiều câu lệnh thành một đơn vị công việc nguyên tử (atomic).
C. Để tối ưu hóa hiệu năng của các câu lệnh SQL được đặt bên trong khối.
D. Để thực hiện việc kiểm tra cú pháp của các câu lệnh trước khi chạy.
Câu 28. Phép toán CROSS JOIN giữa hai bảng A (có 10 hàng) và B (có 20 hàng) sẽ tạo ra một tập kết quả có bao nhiêu hàng?
A. 10 hàng (bằng số hàng của bảng A)
B. 20 hàng (bằng số hàng của bảng B)
C. 30 hàng (bằng tổng số hàng của hai bảng)
D. 200 hàng (bằng tích số hàng của hai bảng)
Câu 29. Trong mệnh đề WHERE, toán tử BETWEEN được sử dụng như thế nào? Ví dụ: WHERE Gia BETWEEN 100 AND 200.
A. Tìm các giá trị lớn hơn 100 và đồng thời nhỏ hơn 200 (không bao gồm hai đầu mút).
B. Tìm các giá trị lớn hơn hoặc bằng 100 và nhỏ hơn hoặc bằng 200.
C. Chỉ tìm các giá trị chính xác bằng 100 hoặc là bằng 200.
D. Tìm các giá trị nhỏ hơn 100 hoặc là lớn hơn 200.
Câu 30. Tại sao câu lệnh SELECT MaLop, AVG(DiemTB) FROM SinhVien WHERE AVG(DiemTB) > 5.0 GROUP BY MaLop; lại sai cú pháp?
A. Vì mệnh đề GROUP BY phải được đặt trước mệnh đề WHERE trong câu lệnh.
B. Vì không thể dùng hàm tập hợp (AVG) trong mệnh đề WHERE; phải dùng HAVING.
C. Vì hàm AVG không thể tính toán được trên cột DiemTB do sai kiểu dữ liệu.
D. Vì câu lệnh này bị thiếu mệnh đề FROM để chỉ định bảng nguồn dữ liệu.