Tin học 11: Tài liệu ôn tập Câu lệnh truy vấn nâng cao trong MySQL (2026)

Web Publisher User

[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
1Mai Nguyễn Châu An1100021active
2Vũ Khánh An1100061active
3Đỗ Nguyễn Minh An1100072active
4Trần Nguyễn Nhật An1100083active
5Nguyễn Thị Phúc An1100102active
6Phạm Nguyễn Phúc An1100114active
7Trần Bảo Quốc An1100145active
8Nguyễn Ngọc Thuận An1100166active
9Nguyễn Ngọc Xuân An1100177active
10Nguyễn Hoàng Ân1100188active
11Nguyễn Trần Hà Anh1100212active
12Hoàng Lê Hoài Anh1100239active
13Nguyễn Lê Hồng Anh11002610active
14Nguyễn Ngọc Kim Anh1100273active
15Trần Thị Kim Anh11002811active
16Nguyễn Kỳ Lâm Anh11002910active
17Phạm Lưu Minh Anh11003012active
18Trần Nhật Nguyên Anh11003213active
19Nguyễn Nhật Anh1100339active
20Nguyễn Phương Anh1100344active

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
111A11
211A161
311A71
411A51
511A91
611A31
711A61
811A141
911A111
1011A131
1111A81
1211A151
1311A41
1411A121

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;

إرسال تعليق

Chúng tôi rất vui khi bạn muốn đóng góp ý kiến. Để đảm bảo môi trường trao đổi lành mạnh, vui lòng tuân thủ các quy định sau:

1. Sử dụng tiếng Việt có dấu đầy đủ, tránh viết tắt.
2. Bình luận sẽ được kiểm duyệt trước khi công khai.
3. Tôn trọng người khác và đóng góp ý kiến xây dựng.
4. Tuân thủ chính sách của Google và TTKT.

Cảm ơn bạn đã đồng hành cùng chúng tôi!

CẢNH BÁO

Gần đây, chúng tôi phát hiện nội dung bị chụp màn hình và chia sẻ trái phép. TTKT khuyến cáo bạn không nên chụp màn hình mà hãy chia sẻ link đến bài viết để tôn trọng tác giả và tránh bị vô hiệu hóa tài khoản.

Yêu cầu Đăng nhập

Để tiếp tục sử dụng, vui lòng đăng nhập.