Phạm vi: Mảng một chiều và hai chiều; quản trị cơ sở dữ liệu; dữ liệu mảng; cấu trúc bảng và trường khóa.
Phần 1: Cơ bản
Bài 1. Cho danh sách a = [6, 2, 9, 4]. Giá trị của a[0] và a[3] là bao nhiêu?
Bài 2. Viết câu lệnh Python tạo mảng một chiều gồm các số 1, 3, 5, 7.
Bài 3. Cho mảng hai chiều b = [[2, 4], [6, 8]]. Viết câu lệnh in phần tử ở hàng 1, cột 0 (đếm từ 0).
Bài 4. Nêu một điểm khác nhau giữa mảng một chiều và mảng hai chiều.
Bài 5. Trong bảng HocSinh(MaHS, HoTen, NgaySinh), trường nào nên làm khóa chính? Vì sao?
Bài 6. Kể tên hai công việc của người quản trị cơ sở dữ liệu.
Bài 7. Viết đoạn chương trình Python tính tổng các phần tử của mảng [2, 5, 1, 4].
Bài 8. Cho mảng a = [10, 20, 30]. Viết câu lệnh thêm số 40 vào cuối mảng.
Bài 9. Một bảng Sach có các trường: MaSach, TenSach, TacGia. Hãy chỉ rõ khóa chính và giải thích.
Bài 10. Nêu một lý do cần xác định kiểu dữ liệu cho mỗi trường khi tạo bảng.
Bài 11. Cho mảng hai chiều m = [[1, 2, 3], [4, 5, 6]]. Mảng có bao nhiêu hàng, bao nhiêu cột?
Bài 12. Viết đoạn chương trình Python in tất cả các phần tử của mảng [7, 3, 9] trên một dòng, cách nhau bởi dấu cách.
Bài 13. Khóa chính có được phép để trống không? Vì sao?
Bài 14. Cho bảng Lop(MaLop, TenLop). Hãy viết câu lệnh SQL liệt kê tất cả các lớp.
Bài 15. Nêu một ví dụ về khóa ngoại trong đời sống quản lí (ví dụ: bảng điểm tham chiếu tới bảng học sinh) và giải thích.
Bài 16. Viết đoạn chương trình Python đếm số phần tử lớn hơn 5 trong mảng [3, 8, 1, 9, 4].
Phần 2: Nâng cao
Bài 17. Viết chương trình Python nhập mảng một chiều gồm n số nguyên, in ra phần tử lớn nhất và vị trí của nó (vị trí đầu tiên nếu trùng).
Bài 18. Viết chương trình Python tạo mảng hai chiều 2 hàng × 4 cột gồm các số từ 1 đến 8 theo thứ tự hàng, rồi in mảng theo từng hàng.
Bài 19. Cho bảng Diem(MaHS, MonHoc, DiemSo) và bảng HocSinh(MaHS, HoTen). Hãy giải thích vì sao MaHS trong bảng Diem là khóa ngoại và viết câu lệnh SQL liệt kê họ tên học sinh cùng điểm môn "Tin học".
Bài 20. Một cửa hàng quản lí bảng SanPham(MaSP, TenSP, Gia) và bảng DonHang(MaDH, MaSP, SoLuong). Hãy chỉ rõ khóa chính của mỗi bảng, khóa ngoại trong bảng DonHang, và viết câu lệnh SQL liệt kê tên sản phẩm cùng số lượng của các đơn hàng.
Bài 21. Viết chương trình Python nhập mảng hai chiều m hàng × n cột, tính tổng các phần tử ở hàng đầu tiên.
Bài 22. Trong bảng Sach, nếu xóa trường khóa chính thì điều gì xảy ra với khả năng phân biệt các bản ghi? Giải thích.
Bài 23. Viết chương trình Python kiểm tra xem một giá trị x có xuất hiện trong mảng hay không, in "Có" hoặc "Không".
Bài 24. Hãy thiết kế bảng NhanVien gồm ít nhất 5 trường, chỉ rõ khóa chính, kiểu dữ liệu của mỗi trường và giải thích lựa chọn khóa chính.
Đáp án
Bài 1. a[0] = 6, a[3] = 4.
Bài 2. a = [1, 3, 5, 7].
Bài 3. print(b[1][0]) → in ra 6.
Bài 4. Ví dụ: mảng một chiều là danh sách tuyến tính, mỗi phần tử có một chỉ số; mảng hai chiều là bảng có hàng và cột, mỗi phần tử có hai chỉ số (hàng, cột).
Bài 5. MaHS làm khóa chính vì mỗi học sinh có mã riêng, không trùng lặp; họ tên có thể trùng, ngày sinh có thể trùng.
Bài 6. Ví dụ: sao lưu dữ liệu; phân quyền truy cập; khôi phục dữ liệu; đảm bảo an toàn, bảo mật.
Bài 7.
a = [2, 5, 1, 4]
print(sum(a)) # 12
Bài 8. a.append(40) → a = [10, 20, 30, 40].
Bài 9. Khóa chính: MaSach. Mỗi cuốn sách có mã riêng, không trùng; tên sách có thể trùng nhau.
Bài 10. Ví dụ: đảm bảo dữ liệu nhập đúng dạng (ngày sinh phải là ngày, điểm phải là số), tránh sai sót và tiết kiệm bộ nhớ.
Bài 11. 2 hàng, 3 cột.
Bài 12.
a = [7, 3, 9]
print(*a) # 7 3 9
Bài 13. Không. Khóa chính dùng để xác định duy nhất mỗi bản ghi nên không được để trống.
Bài 14. SELECT * FROM Lop;
Bài 15. Ví dụ: bảng Diem có trường MaHS tham chiếu tới MaHS của bảng HocSinh, đảm bảo mỗi điểm thuộc về một học sinh đã tồn tại.
Bài 16.
a = [3, 8, 1, 9, 4]
dem = 0
for x in a:
if x > 5:
dem += 1
print(dem) # 2
Bài 17.
n = int(input("Nhập n: "))
a = [int(input(f"Nhập phần tử {i + 1}: ")) for i in range(n)]
lon_nhat = max(a)
print("Lớn nhất:", lon_nhat, "Vị trí:", a.index(lon_nhat))
Bài 18.
a = [[1, 2, 3, 4], [5, 6, 7, 8]]
for hang in a:
print(hang)
Bài 19. MaHS trong bảng Diem là khóa ngoại vì nó tham chiếu tới khóa chính MaHS của bảng HocSinh, đảm bảo điểm thuộc về học sinh có thật.
SELECT HocSinh.HoTen, Diem.DiemSo FROM Diem
JOIN HocSinh ON Diem.MaHS = HocSinh.MaHS
WHERE Diem.MonHoc = 'Tin học';
Bài 20. Khóa chính: SanPham(MaSP), DonHang(MaDH). Khóa ngoại trong DonHang: MaSP tham chiếu tới SanPham(MaSP).
SELECT SanPham.TenSP, DonHang.SoLuong FROM DonHang
JOIN SanPham ON DonHang.MaSP = SanPham.MaSP;
Bài 21.
m = int(input("Nhập số hàng m: "))
n = int(input("Nhập số cột n: "))
a = []
for i in range(m):
hang = [int(input(f"Nhập a[{i}][{j}]: ")) for j in range(n)]
a.append(hang)
print("Tổng hàng đầu tiên:", sum(a[0]))
Bài 22. Không còn trường nào đảm bảo tính duy nhất; các bản ghi có thể bị nhầm lẫn, nhất là khi có các bản ghi trùng tên hoặc trùng thông tin khác. Hệ quản trị CSDL cũng không thể kiểm soát trùng lặp.
Bài 23.
a = [2, 5, 8, 1]
x = int(input("Nhập x: "))
print("Có" if x in a else "Không")
Bài 24. Ví dụ: NhanVien(MaNV, HoTen, NgaySinh, PhongBan, Luong). Khóa chính: MaNV (kiểu văn bản hoặc số, không trùng, không trống). HoTen: văn bản; NgaySinh: ngày; PhongBan: văn bản; Luong: số. Chọn MaNV vì mỗi nhân viên có mã riêng duy nhất.
