[kiemtraquiz]
Phần I : Trắc Nghiệm
Câu 1: Để khai báo khóa ngoài chọn thẻ?
A. Create database
B. Create new
C. Root
D. Foreign keys
Câu 2: Khi chọn thêm mới để thêm trường thì một trường mới hiện ra với tên mặc định là?
A. Cột mới
B. Trường mới
C. Column 1
D. Row 1
Câu 3: Cần khai báo giá trị mặc định phù hợp với?
A. Giá trị tương ứng của hàng
B. Giá trị tương ứng của cột
C. Giá trị tương ứng của k
D. Đáp án khác
Câu 4: Việc thiết lập khoá ngoài được thực hiện như thế nào??
A. Việc thiết lập khoá ngoài được thực hiện bằng cách xác định cột trong bảng hiện tại là khoá ngoài
B. Việc thiết lập khoá ngoài được thực hiện bằng cách chỉ định bảng mà khoá ngoài này tham chiếu đến (bảng gốc)
C. Việc thiết lập khoá ngoài được thực hiện bằng cách xác định cột trong bảng hiện tại là khoá ngoài, và chỉ định bảng mà khoá ngoài này tham chiếu đến (bảng gốc)
D. Cả ba đáp án trên đều sai
Câu 5: Để truy xuất dữ liệu từ bảng "casi" theo các tiêu chí khác nhau, có thể sử dụng?
A. Trực tiếp lọc ra các dữ liệu thủ công
B. Đặt lệnh và thực hiện lệnh
C. Ngôn ngữ truy vấn cơ sở dữ liệu (SQL) để tạo các câu truy vấn phù hợp
D. Cả ba đáp án trên đều đúng
Câu 6: Muốn truy xuất dữ liệu các ca sĩ có "tencasi" chứa từ khóa "Hoa" ta dùng ?
A. SELECT * FROM casi WHERE tencasi LIKE '%Hoa%';
B. SELECT * FROM casi WHERE idcasi = 1;
C. SELECT * FROM casi;
D. SELECT * FROM casi WHERE tencasi LIKE 'N%';
Câu 7: Có thể nhập câu truy vấn SQL để?
A. Sắp xếp dữ liệu một cách linh hoạt hơn
B. Xóa dự liệu nhanh hơn
C. Truy xuất dữ liệu một cách linh hoạt hơn
D. Cả ba đáp án trên đều sai
Câu 8: Để biểu diễn thứ tự GIẢM dần ta dùng
A. ASC
B. LIKE
C. AND
D. DESC
Câu 9: Để truy xuất dữ liệu từ bảng "banthuam" với điều kiện kết hợp giữa nhiều trường ta dùng câu lệnh?
A. SELECT * FROM banthuam WHERE idcasi = 2 -- Giả sử giá trị idcasi cần tìm là 2 AND banthuam >= 100; -- Giả sử giá trị banthuam cần tìm là lớn hơn hoặc bằng 100
B. SELECT * FROM banthuam ORDER BY idbannhac ASC;
C. SELECT idbannhac, idcasi FROM banthuam;
D. SELECT * FROM banthuam WHERE idbannhac = 1; -- Giả sử giá trị idbannhac cần tìm là 1
Câu 10: Để Truy xuất dữ liệu từ bảng "quanhuyen" với điều kiện cụ thể trên trường "idquanhuyen" ta dùng câu lệnh?
A. SELECT * FROM quanhuyen WHERE danso > 1000000 -- Giả sử giá trị danso cần tìm là lớn hơn 1.000.000 AND dientich < 1000; -- Giả sử giá trị dientich cần tìm là nhỏ hơn 1000
B. SELECT * FROM quanhuyen WHERE idquanhuyen = 1; -- Giả sử giá trị idquanhuyen cần tìm là 1
C. SELECT * FROM quanhuyen;
D. SELECT idquanhuyen, tenquanhuyen FROM quanhuyen;
Câu 11: Sao lưu cơ sở dữ liệu từ máy tính nguồn bằng cách?
A. Sử dụng công cụ sao lưu của hệ quản trị cơ sở dữ liệu đang sử dụng trên máy tính nguồn để tạo ra một file sao lưu dữ liệu của cơ sở dữ liệu
B. Có thể sử dụng các phương tiện như USB, mạng LAN, FTP, hoặc các dịch vụ chia sẻ file để chuyển file sao lưu dữ liệu từ máy tính nguồn sang máy tính đích
C. Trên máy tính đích, sử dụng công cụ phục hồi dữ liệu của hệ quản trị cơ sở dữ liệu tương ứng để đọc file sao lưu dữ liệu và khôi phục cơ sở dữ liệu trên máy tính đích
D. Tất cả đều đúng
Câu 12: Ta có thể chọn định dạng file sao lưu dữ liệu nào dưới đây?
A. SQL
B. CSV
C. JSON
D. Cả ba đáp án trên đều đúng
Câu 13: Kiểm tra và đánh giá tính hoạt động của sao lưu dữ liệu dự phòng bằng cách?
A. Thực hiện các kiểm tra tính khả thi của dữ liệu đã sao lưu
B. Thực hiện các kiểm tra tính chính xác của dữ liệu đã sao lưu
C. Thực hiện các kiểm tra tính đầy đủ của dữ liệu đã sao lưu
D. Cả ba đáp án trên đều đúng
Câu 14: Để Truy xuất dữ liệu từ bảng "quanhuyen" với điều kiện kết hợp giữa nhiều trường ta dùng câu lệnh?
A. SELECT * FROM quanhuyen WHERE danso > 1000000 -- Giả sử giá trị danso cần tìm là lớn hơn 1.000.000 AND dientich < 1000; -- Giả sử giá trị dientich cần tìm là nhỏ hơn 1000
B. SELECT * FROM quanhuyen WHERE idquanhuyen = 1; -- Giả sử giá trị idquanhuyen cần tìm là 1
C. SELECT * FROM quanhuyen;
D. SELECT idquanhuyen, tenquanhuyen FROM quanhuyen;
Câu 15: Trường idNhacsi là trường khóa ngoài đã được khai báo tham chiếu đến trường idNhacsi của bàng nhacsi, để đảm bảo giá trị nhất quán giá trị hợp lệ chỉ có thể lấy từ các giá trị của ?
A. idNhacsi có trong bảng tenBannhac
B. nhacsi có trong bảng idNhacsi
C. idNhacsi có trong bảng nhacsi
D. Đáp án khác
Phần II : Tự Luận:
Bài 1: Cho các bảng sau:
Bảng student_data
| id | full_name | student_code | class_id | dob | gender | status |
|---|---|---|---|---|---|---|
| 1 | Mai Nguyễn Châu An | 110002 | 1 | active | ||
| 2 | Vũ Khánh An | 110006 | 1 | active | ||
| 3 | Đỗ Nguyễn Minh An | 110007 | 2 | active | ||
| 4 | Trần Nguyễn Nhật An | 110008 | 3 | active | ||
| 5 | Nguyễn Thị Phúc An | 110010 | 2 | active | ||
| 6 | Phạm Nguyễn Phúc An | 110011 | 4 | active | ||
| 7 | Trần Bảo Quốc An | 110014 | 5 | active | ||
| 8 | Nguyễn Ngọc Thuận An | 110016 | 6 | active | ||
| 9 | Nguyễn Ngọc Xuân An | 110017 | 7 | active | ||
| 10 | Nguyễn Hoàng Ân | 110018 | 8 | active | ||
| 11 | Nguyễn Trần Hà Anh | 110021 | 2 | active | ||
| 12 | Hoàng Lê Hoài Anh | 110023 | 9 | active | ||
| 13 | Nguyễn Lê Hồng Anh | 110026 | 10 | active | ||
| 14 | Nguyễn Ngọc Kim Anh | 110027 | 3 | active | ||
| 15 | Trần Thị Kim Anh | 110028 | 11 | active | ||
| 16 | Nguyễn Kỳ Lâm Anh | 110029 | 10 | active | ||
| 17 | Phạm Lưu Minh Anh | 110030 | 12 | active | ||
| 18 | Trần Nhật Nguyên Anh | 110032 | 13 | active | ||
| 19 | Nguyễn Nhật Anh | 110033 | 9 | active | ||
| 20 | Nguyễn Phương Anh | 110034 | 4 | active |
Biết rằng kiểu dữ liệu của trường id là INT (PRIMARY KEY), full_name là VARCHAR(128), student_code là CHAR(6), class_id là INT (FOREIGN KEY tới bảng Class_data), dob là VARCHAR(36), gender là BOOLEAN, status là VARCHAR(16)
Bảng Class_data
| id | name | school_id |
|---|---|---|
| 1 | 11A1 | 1 |
| 2 | 11A16 | 1 |
| 3 | 11A7 | 1 |
| 4 | 11A5 | 1 |
| 5 | 11A9 | 1 |
| 6 | 11A3 | 1 |
| 7 | 11A6 | 1 |
| 8 | 11A14 | 1 |
| 9 | 11A11 | 1 |
| 10 | 11A13 | 1 |
| 11 | 11A8 | 1 |
| 12 | 11A15 | 1 |
| 13 | 11A4 | 1 |
| 14 | 11A12 | 1 |
Biết rằng kiểu dữ liệu của trường id là INT (PRIMARY KEY), name là VARCHAR(18), school_id là INT
Hãy:
a) Viết câu lệnh truy xuất id, full_name và tên lớp (name trong bảng Class_data) của các học sinh có class_id là 4
b) Viết câu lệnh truy xuất toàn bộ bảng student_data kèm tên lớp từ Class_data và sắp xếp theo thứ tự class_id tăng dần
c) Viết câu lệnh truy xuất danh sách học sinh (bao gồm id, full_name, student_code, tên lớp từ Class_data) có tên kết thúc bằng “An”
DÙNG CÁC NGỮ LIỆU SAU ĐỂ THỰC HÀNH BÀI 2 VÀ 3
Bối cảnh
Công ty TTKT muốn tăng cường bảo mật hệ thống quản lý nội bộ. Bộ phận IT yêu cầu phân tích dữ liệu đăng nhập của người dùng nhằm:
• Phát hiện đăng nhập bất thường
• Theo dõi IP đáng ngờ
• Kiểm soát thiết bị truy cập
• Thống kê hoạt động người dùng
Hệ thống lưu trữ dữ liệu đăng nhập trong bảng login_logs.
Cấu trúc dữ liệu
Công ty TTKT có bảng:
Bảng login_logs
Bảng login_logs lưu thông tin các lần đăng nhập vào hệ thống.
Biết rằng:
• id là INT (PRIMARY KEY)
• user_id là INT (FOREIGN KEY tới bảng users)
• login_time là DATETIME
• ip_address là VARCHAR(45)
• user_agent là VARCHAR(255)
• source là VARCHAR(20) (ví dụ: 'web', 'mobile', 'unknown')
Bài 2: Hãy giúp administration thực hiện một số truy vấn cơ bản
a) Viết câu lệnh SQL lấy danh sách user_id, login_time, ip_address của các lần đăng nhập có source = 'web'.
b) Viết câu lệnh SQL lấy toàn bộ dữ liệu trong bảng login_logs và sắp xếp theo login_time giảm dần (mới nhất trước).
c) Viết câu lệnh SQL lấy danh sách các lần đăng nhập có địa chỉ IP là '113.182.131.218'.
Bài 3: Hãy giúp administration điều tra hệ thống có bất thường hay không
a) Viết câu lệnh SQL đếm số lần đăng nhập của từng user_id.
b) Viết câu lệnh SQL tìm những user_id đăng nhập từ nhiều hơn 1 địa chỉ IP khác nhau.
c) Viết câu lệnh SQL tìm những địa chỉ IP được sử dụng bởi từ 2 người dùng trở lên.
d) Viết câu lệnh SQL lấy danh sách các lần đăng nhập có source = 'unknown'.
Bài 4: Viết câu lệnh truy vấn tạo danh sách các học sinh gồm 2 cột: Ten_hs, TB_CN
ds_hs
| ma_hs | ten_hs |
| 1 | Trần Nam Anh |
| 2 | Cao Thị Bạn |
| 3 | Phan Văn Tui |
| 4 | Mạc Thị Ổi |
| 5 | Hứa Văn Xoài |
ds_diem
| Ma_hs | TB_HK1 | TB_HK2 |
| 1 | 8.3 | 8.5 |
| 2 | 8 | 9 |
| 3 | 9.3 | 8 |
| 4 | 7.8 | 7 |
| 5 | 8 | 6.5 |
Trong đó: \( TB\_CN = (TB\_HK1 + TB\_HK2 * 2) / 3 \), làm tròn điểm có phần thập phân gồm 2 chữ số.
Lưu ý: Xem câu lệnh SELECT sgk 110 (có sử dụng AS)
..................................................................................................................................................................
Kết quả:
| Ten_hs | TB_CN |
| Trần Nam Anh | 8.43 |
| Cao Thị Bạn | 8.67 |
| Phan Văn Tui | 8.43 |
| Mạc Thị Ổi | 7.27 |
| Hứa Văn Xoài | 7 |
Bài 5: Tạo danh sách các học sinh có điểm TB_CN trên 8
ds_hs
| ma_hs | ten_hs |
| 1 | Trần Nam Anh |
| 2 | Cao Thị Bạn |
| 3 | Phan Văn Tui |
| 4 | Mạc Thị Ổi |
| 5 | Hứa Văn Xoài |
ds_diem
| Ma_hs | TB_HK1 | TB_HK2 |
| 1 | 8.3 | 8.5 |
| 2 | 8 | 9 |
| 3 | 9.3 | 8 |
| 4 | 7.8 | 7 |
| 5 | 8 | 6.5 |
..................................................................................................................................................................
[dapan=1D,2C,3B,4C,5D,6A,7C,8D,9A,10B,11A,12D,13D,14A,15C]
Giải Tự luận
Bài 1a: Lấy id, full_name và tên lớp của học sinh có class_id = 4
SELECT s.id, s.full_name, c.name
FROM student_data s
JOIN Class_data c ON s.class_id = c.id
WHERE s.class_id = 4;
Bài 1b: Lấy toàn bộ student_data kèm tên lớp, sắp xếp class_id tăng dần
SELECT s.*, c.name
FROM student_data s
JOIN Class_data c ON s.class_id = c.id
ORDER BY s.class_id ASC;
Bài 1c: Lấy danh sách học sinh có tên kết thúc bằng "An"
SELECT s.id, s.full_name, s.student_code, c.name
FROM student_data s
JOIN Class_data c ON s.class_id = c.id
WHERE s.full_name LIKE '% An';
Lưu ý: Dùng '% An' để tránh trùng với Văn, Tân...
Bài 2a: Lấy user_id, login_time, ip_address có source = 'web'
SELECT user_id, login_time, ip_address
FROM login_logs
WHERE source = 'web';
Bài 2b: Lấy toàn bộ dữ liệu, sắp xếp login_time giảm dần
SELECT *
FROM login_logs
ORDER BY login_time DESC;
Bài 2c: Lấy danh sách đăng nhập có IP '113.182.131.218'
SELECT *
FROM login_logs
WHERE ip_address = '113.182.131.218';
Bài 3a: Đếm số lần đăng nhập của từng user_id
SELECT user_id, COUNT(*) AS so_lan_dang_nhap
FROM login_logs
GROUP BY user_id;
Bài 3b: Tìm user_id đăng nhập từ nhiều hơn 1 IP khác nhau
SELECT user_id
FROM login_logs
GROUP BY user_id
HAVING COUNT(DISTINCT ip_address) > 1;
Bài 3c: Tìm IP được sử dụng bởi từ 2 người dùng trở lên
SELECT ip_address
FROM login_logs
GROUP BY ip_address
HAVING COUNT(DISTINCT user_id) >= 2;
Bài 3d: Lấy danh sách đăng nhập có source = 'unknown'
SELECT *
FROM login_logs
WHERE source = 'unknown';
Bài 4: Tính điểm trung bình cả năm (TB_CN)
SELECT
hs.ten_hs,
ROUND((d.TB_HK1 + d.TB_HK2 * 2) / 3, 2) AS TB_CN
FROM ds_hs hs
JOIN ds_diem d ON hs.ma_hs = d.Ma_hs;
Bài 5: Lọc học sinh có TB_CN > 8
SELECT
hs.ten_hs,
ROUND((d.TB_HK1 + d.TB_HK2 * 2) / 3, 2) AS TB_CN
FROM ds_hs hs
JOIN ds_diem d ON hs.ma_hs = d.Ma_hs
WHERE (d.TB_HK1 + d.TB_HK2 * 2) / 3 > 8;