Font size
WorksheetsSQL Server — Trắc nghiệm lựa chọn (Grade 13)
Total questions: 90
Worksheet time: 45mins
[Phần A: Tạo cơ sở dữ liệu] Cú pháp nào sau đây được sử dụng để tạo cơ sở dữ liệu mới trong SQL Server?
CREATE DATABASE QuanLyNhanSu;
NEW DATABASE QuanLyNhanSu;
ADD DATABASE QuanLyNhanSu;
MAKE DATABASE QuanLyNhanSu;
[Phần A: Tạo cơ sở dữ liệu] Để tạo bảng NHANVIEN với khóa chính MaNV, cú pháp đúng là:
CREATE TABLE NHANVIEN (MaNV INT PRIMARY KEY, TenNV NVARCHAR(50));
CREATE TABLE NHANVIEN (MaNV INT KEY, TenNV NVARCHAR(50));
CREATE TABLE NHANVIEN (MaNV INT MAIN KEY, TenNV NVARCHAR(50));
CREATE TABLE NHANVIEN (MaNV INT FIRST KEY, TenNV NVARCHAR(50));
[Phần A: Tạo cơ sở dữ liệu] Một bảng có thể có nhiều khóa chính (Primary Key).
Đúng
Sai
[Phần A: Tạo cơ sở dữ liệu] Để thêm ràng buộc khóa ngoại cho cột MaPB trong bảng NHANVIEN tham chiếu đến bảng PHONGBAN, ta sử dụng:
FOREIGN KEY (MaPB) REFERENCES PHONGBAN(MaPB)
EXTERNAL KEY (MaPB) REFERENCES PHONGBAN(MaPB)
REFERENCE KEY (MaPB) TO PHONGBAN(MaPB)
LINK KEY (MaPB) WITH PHONGBAN(MaPB)
[Phần A: Tạo cơ sở dữ liệu] Trong SQL Server, ràng buộc nào sau đây được sử dụng để đảm bảo rằng một cột không chứa giá trị NULL?
NOT NULL
UNIQUE
CHECK
DEFAULT
[Phần A: Tạo cơ sở dữ liệu] Để tạo ràng buộc CHECK cho cột GioiTinh chỉ nhận giá trị 'Nam' hoặc 'Nu', ta viết:
CHECK (GioiTinh IN ('Nam', 'Nu'))
CONSTRAINT (GioiTinh = 'Nam' OR 'Nu')
VALIDATE (GioiTinh IN ('Nam', 'Nu'))
VERIFY (GioiTinh = 'Nam' OR GioiTinh = 'Nu')
[Phần A: Tạo cơ sở dữ liệu] Ràng buộc UNIQUE cho phép nhiều giá trị NULL trong cùng một cột.
Đúng
Sai
[Phần A: Tạo cơ sở dữ liệu] Để thêm cột mới vào bảng đã tồn tại, ta sử dụng lệnh:
ALTER TABLE ten_bang ADD ten_cot kieu_du_lieu;
UPDATE TABLE ten_bang ADD ten_cot kieu_du_lieu;
MODIFY TABLE ten_bang ADD ten_cot kieu_du_lieu;
CHANGE TABLE ten_bang ADD ten_cot kieu_du_lieu;
[Phần A: Tạo cơ sở dữ liệu] Để xóa bảng NHANVIEN khỏi cơ sở dữ liệu, ta sử dụng:
DROP TABLE NHANVIEN;
DELETE TABLE NHANVIEN;
REMOVE TABLE NHANVIEN;
DESTROY TABLE NHANVIEN;
[Phần A: Tạo cơ sở dữ liệu] Khi tạo khóa chính composite (khóa chính gồm nhiều cột), lựa chọn đáp án sai là:
PRIMARY KEY (MaNV, MaDA)
CONSTRAINT PK_PHANCONG PRIMARY KEY (MaNV, MaDA)
MaNV INT PRIMARY KEY, MaDA INT PRIMARY KEY
PRIMARY KEY CLUSTERED (MaNV, MaDA)
[Phần A: Tạo cơ sở dữ liệu] Khi xóa bảng cha (parent table), SQL Server sẽ tự động xóa tất cả bản ghi trong bảng con (child table) có liên quan.
Đúng
Sai
[Phần A: Tạo cơ sở dữ liệu] Để thiết lập giá trị mặc định cho cột NgaySinh là ngày hiện tại, ta sử dụng:
NgaySinh DATETIME DEFAULT GETDATE()
NgaySinh DATETIME DEFAULT TODAY()
NgaySinh DATETIME DEFAULT NOW()
NgaySinh DATETIME DEFAULT CURRENT_DATE()
[Phần A: Tạo cơ sở dữ liệu] Lệnh nào được sử dụng để tạo index cho bảng NHANVIEN trên cột TenNV?
CREATE INDEX IX_TenNV ON NHANVIEN(TenNV);
ADD INDEX IX_TenNV ON NHANVIEN(TenNV);
NEW INDEX IX_TenNV ON NHANVIEN(TenNV);
MAKE INDEX IX_TenNV ON NHANVIEN(TenNV);
[Phần A: Tạo cơ sở dữ liệu] Những kiểu dữ liệu nào phù hợp để lưu trữ tên nhân viên trong SQL Server? (chọn nhiều đáp án)
FLOAT
VARCHAR(100)
DATE
INT
[Phần A: Tạo cơ sở dữ liệu] Để xóa ràng buộc khóa ngoại có tên FK_NHANVIEN_PHONGBAN, ta sử dụng:
ALTER TABLE NHANVIEN DROP CONSTRAINT FK_NHANVIEN_PHONGBAN;
DROP CONSTRAINT FK_NHANVIEN_PHONGBAN FROM NHANVIEN;
DELETE CONSTRAINT FK_NHANVIEN_PHONGBAN FROM NHANVIEN;
REMOVE CONSTRAINT FK_NHANVIEN_PHONGBAN FROM NHANVIEN;
[Phần B: Truy vấn] Để truy vấn tất cả thông tin nhân viên, ta sử dụng:
SELECT * FROM NHANVIEN;
GET * FROM NHANVIEN;
SHOW * FROM NHANVIEN;
DISPLAY * FROM NHANVIEN;
[Phần B: Truy vấn] Để tìm nhân viên có lương lớn hơn 5000000, ta viết:
SELECT * FROM NHANVIEN WHERE Luong > 5000000;
SELECT * FROM NHANVIEN IF Luong > 5000000;
SELECT * FROM NHANVIEN WHEN Luong > 5000000;
SELECT * FROM NHANVIEN HAVING Luong > 5000000;
[Phần B: Truy vấn] Những từ khóa nào có thể sử dụng để sắp xếp kết quả truy vấn, lựa chọn đáp án sai:
ORDER BY
ASC
DESC
SORT BY
[Phần B: Truy vấn] Để đếm số lượng nhân viên trong mỗi phòng ban, ta sử dụng:
SELECT MaPB, COUNT(*) FROM NHANVIEN GROUP BY MaPB;
SELECT MaPB, COUNT(*) FROM NHANVIEN ORDER BY MaPB;
SELECT MaPB, SUM(*) FROM NHANVIEN GROUP BY MaPB;
SELECT MaPB, TOTAL(*) FROM NHANVIEN GROUP BY MaPB;
[Phần B: Truy vấn] Mệnh đề HAVING được sử dụng để lọc dữ liệu trước khi thực hiện GROUP BY.
Đúng
Sai
[Phần B: Truy vấn] Để tìm nhân viên có lương cao nhất, ta có thể sử dụng:
SELECT * FROM NHANVIEN WHERE Luong = (SELECT MAX(Luong) FROM NHANVIEN);
SELECT * FROM NHANVIEN WHERE Luong = MAX(Luong);
SELECT MAX(*) FROM NHANVIEN WHERE Luong;
SELECT * FROM NHANVIEN ORDER BY Luong DESC LIMIT 1;
[Phần B: Truy vấn] Để nối bảng NHANVIEN và PHONGBAN, ta sử dụng:
SELECT * FROM NHANVIEN NV JOIN PHONGBAN PB ON NV.MaPB = PB.MaPB;
SELECT * FROM NHANVIEN NV LINK PHONGBAN PB ON NV.MaPB = PB.MaPB;
SELECT * FROM NHANVIEN NV CONNECT PHONGBAN PB ON NV.MaPB = PB.MaPB;
SELECT * FROM NHANVIEN NV MERGE PHONGBAN PB ON NV.MaPB = PB.MaPB;
[Phần B: Truy vấn] Trong SQL Server, loại JOIN nào được sử dụng để chỉ lấy các bản ghi có giá trị khớp ở cả hai bảng?
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN
[Phần B: Truy vấn] Để tìm nhân viên không được phân công vào dự án nào, ta sử dụng:
SELECT * FROM NHANVIEN WHERE MaNV NOT IN (SELECT MaNV FROM PHANCONG);
SELECT * FROM NHANVIEN WHERE MaNV NOT EXISTS (SELECT MaNV FROM PHANCONG);
SELECT * FROM NHANVIEN WHERE MaNV <> ALL (SELECT MaNV FROM PHANCONG);
SELECT * FROM NHANVIEN EXCEPT SELECT MaNV FROM PHANCONG;
[Phần B: Truy vấn] Hàm nào được sử dụng để tính tổng trong SQL Server?
SUM()
TOTAL()
ADD()
PLUS()
[Phần B: Truy vấn] Câu lệnh SELECT DISTINCT được sử dụng để loại bỏ các dòng trùng lặp trong kết quả truy vấn.
Đúng
Sai
[Phần B: Truy vấn] Để tìm nhân viên có tên bắt đầu bằng chữ 'N', ta sử dụng:
SELECT * FROM NHANVIEN WHERE TenNV LIKE 'N%';
SELECT * FROM NHANVIEN WHERE TenNV = 'N*';
SELECT * FROM NHANVIEN WHERE TenNV STARTS 'N';
SELECT * FROM NHANVIEN WHERE TenNV BEGIN 'N';
[Phần B: Truy vấn] Trong SQL Server, hàm tổng hợp nào được sử dụng để đếm số lượng bản ghi trong một bảng hoặc nhóm dữ liệu?
COUNT()
AVG()
MIN()
MAX()
[Phần B: Truy vấn] Để giới hạn số dòng trả về trong SQL Server, ta sử dụng:
SELECT TOP 10 * FROM NHANVIEN;
SELECT LIMIT 10 * FROM NHANVIEN;
SELECT FIRST 10 * FROM NHANVIEN;
SELECT HEAD 10 * FROM NHANVIEN;
[Phần B: Truy vấn] Để tính lương trung bình của nhân viên trong mỗi phòng ban có số nhân viên > 5, ta viết:
SELECT MaPB, AVG(Luong) FROM NHANVIEN GROUP BY MaPB HAVING COUNT(*) > 5;
SELECT MaPB, AVG(Luong) FROM NHANVIEN WHERE COUNT(*) > 5 GROUP BY MaPB;
SELECT MaPB, AVG(Luong) FROM NHANVIEN GROUP BY MaPB WHERE COUNT(*) > 5;
SELECT MaPB, MEAN(Luong) FROM NHANVIEN GROUP BY MaPB HAVING COUNT(*) > 5;
[Phần B: Truy vấn] Truy vấn con (Subquery) có thể được sử dụng ở đâu?
Trong mệnh đề WHERE
Trong mệnh đề SELECT
Trong mệnh đề FROM
Tất cả các vị trí trên
[Phần B: Truy vấn] Để tìm phòng ban có nhiều nhân viên nhất, ta có thể sử dụng:
SELECT TOP 1 MaPB, COUNT(*) FROM NHANVIEN GROUP BY MaPB ORDER BY COUNT(*) DESC;
SELECT MAX(MaPB) FROM NHANVIEN GROUP BY MaPB;
SELECT MaPB FROM NHANVIEN WHERE COUNT(*) = MAX(COUNT(*));
SELECT FIRST MaPB FROM NHANVIEN ORDER BY COUNT(*) DESC;
[Phần B: Truy vấn] Câu lệnh UNION ALL sẽ loại bỏ các dòng trùng lặp khi kết hợp hai tập kết quả.
Đúng
Sai
[Phần B: Truy vấn] Để tìm dự án có tổng số giờ làm việc lớn nhất, ta viết:
SELECT MaDA FROM PHANCONG GROUP BY MaDA HAVING SUM(SoGio) = (SELECT MAX(TongGio) FROM (SELECT SUM(SoGio) AS TongGio FROM PHANCONG GROUP BY MaDA) AS T);
SELECT MaDA FROM PHANCONG WHERE SUM(SoGio) = MAX(SUM(SoGio));
SELECT TOP 1 MaDA FROM PHANCONG ORDER BY SUM(SoGio) DESC;
SELECT MaDA FROM PHANCONG GROUP BY MaDA ORDER BY SUM(SoGio) DESC LIMIT 1;
[Phần B: Truy vấn] EXISTS được sử dụng để:
Kiểm tra sự tồn tại của dữ liệu trong truy vấn con
Đếm số dòng trong bảng
Tính tổng giá trị
Sắp xếp dữ liệu
Cú pháp tạo view trong SQL Server là:
CREATE VIEW ten_view AS SELECT cau_lenh;
NEW VIEW ten_view AS SELECT cau_lenh;
ADD VIEW ten_view AS SELECT cau_lenh;
MAKE VIEW ten_view AS SELECT cau_lenh;
View có thể chứa dữ liệu thực sự giống như bảng.
Đúng
Sai
Để tạo view hiển thị thông tin nhân viên và tên phòng ban, ta viết:
CREATE VIEW VW_NHANVIEN_PHONGBAN AS SELECT NV.*, PB.TenPB FROM NHANVIEN NV JOIN PHONGBAN PB ON NV.MaPB = PB.MaPB;
CREATE VIEW VW_NHANVIEN_PHONGBAN FROM SELECT NV.*, PB.TenPB FROM NHANVIEN NV JOIN PHONGBAN PB ON NV.MaPB = PB.MaPB;
CREATE VIEW VW_NHANVIEN_PHONGBAN IS SELECT NV.*, PB.TenPB FROM NHANVIEN NV JOIN PHONGBAN PB ON NV.MaPB = PB.MaPB;
CREATE VIEW VW_NHANVIEN_PHONGBAN WITH SELECT NV.*, PB.TenPB FROM NHANVIEN NV JOIN PHONGBAN PB ON NV.MaPB = PB.MaPB;
Để xóa view, ta sử dụng lệnh:
DROP VIEW ten_view;
DELETE VIEW ten_view;
REMOVE VIEW ten_view;
DESTROY VIEW ten_view;
Trong SQL Server, mục đích chính của View là gì?
Tăng tốc độ truy vấn
Bảo mật dữ liệu
Lưu trữ toàn bộ dữ liệu của bảng
Giảm dung lượng cơ sở dữ liệu
Để sửa đổi view đã tồn tại, ta sử dụng:
ALTER VIEW ten_view AS SELECT cau_lenh_moi;
UPDATE VIEW ten_view AS SELECT cau_lenh_moi;
MODIFY VIEW ten_view AS SELECT cau_lenh_moi;
CHANGE VIEW ten_view AS SELECT cau_lenh_moi;
View có thể được tạo từ nhiều bảng khác nhau.
Đúng
Sai
WITH CHECK OPTION trong view có tác dụng gì?
Đảm bảo dữ liệu được thêm/sửa qua view phải thỏa mãn điều kiện WHERE của view
Kiểm tra cú pháp của view
Tự động cập nhật view khi bảng gốc thay đổi
Tăng hiệu suất truy vấn
View nào sau đây có thể cập nhật được dữ liệu?
View được tạo từ một bảng duy nhất không có hàm tổng hợp
View có sử dụng DISTINCT
View có sử dụng GROUP BY
View được tạo từ nhiều bảng với JOIN
View trong SQL Server được lưu trữ như một bảng ảo và không chiếm dung lượng lưu trữ cho dữ liệu.
Đúng
Sai
Cú pháp tạo hàm trả về giá trị đơn trong SQL Server là:
CREATE FUNCTION ten_ham() RETURNS kieu_du_lieu AS BEGIN ... RETURN gia_tri END
CREATE FUNCTION ten_ham() RETURN kieu_du_lieu AS BEGIN ... RETURN gia_tri END
NEW FUNCTION ten_ham() RETURNS kieu_du_lieu AS BEGIN ... RETURN gia_tri END
ADD FUNCTION ten_ham() RETURNS kieu_du_lieu AS BEGIN ... RETURN gia_tri END
Để tạo hàm trả về bảng, ta sử dụng:
CREATES TABLE
RETURN TABLE
RETURNS @table TABLE
RETURN @table TABLE
Hàm trong SQL Server có thể thực hiện các thao tác DML (INSERT, UPDATE, DELETE).
Đúng
Sai
Trong SQL Server, loại hàm nào trả về một giá trị duy nhất sau khi thực thi?
Table-valued Function
Aggregate Function
Scalar Function
System Function
Để gọi hàm scalar, ta sử dụng cú pháp:
SELECT dbo.ten_ham(tham_so)
EXECUTE ten_ham(tham_so)
CALL ten_ham(tham_so)
RUN ten_ham(tham_so)
Inline Table-valued Function khác gì với Multi-statement Table-valued Function?
Inline function trả về kết quả trực tiếp từ câu SELECT, Multi-statement function có thể chứa nhiều câu lệnh
Inline function nhanh hơn Multi-statement function
Inline function không có BEGIN...END, Multi-statement function có BEGIN...END
Tất cả các đáp án án trên
Hàm Table-valued có thể được sử dụng trong mệnh đề FROM như một bảng.
Đúng
Sai
Để xóa hàm, ta sử dụng:
DROP FUNCTION ten_ham;
DELETE FUNCTION ten_ham;
REMOVE FUNCTION ten_ham;
DESTROY FUNCTION ten_ham;
Tham số trong hàm SQL Server được khai báo như thế nào?
@ten_tham_so kieu_du_lieu
ten_tham_so kieu_du_lieu
$ten_tham_so kieu_du_lieu
#ten_tham_so kieu_du_lieu
Trong SQL Server, hàm có thể được gọi trực tiếp trong câu lệnh nào để trả về giá trị dùng trong điều kiện lọc dữ liệu?
SELECT
WHERE
Stored Procedure
Trigger
Để tạo hàm trả về danh sách nhân viên theo phòng ban, ta có thể viết:
CREATE FUNCTION fn_NVTheoPhongBan(@MaPB INT) RETURNS TABLE AS RETURN (SELECT * FROM NHANVIEN WHERE MaPB = @MaPB)
CREATE FUNCTION fn_NVTheoPhongBan(@MaPB INT) RETURNS TABLE AS RETURN SELECT * FROM NHANVIEN WHERE MaPB = @MaPB
CREATE FUNCTION fn_NVTheoPhongBan(@MaPB INT) RETURNS @result TABLE AS SELECT * FROM NHANVIEN WHERE MaPB = @MaPB
CREATE FUNCTION fn_NVTheoPhongBan(@MaPB INT) RETURN @result TABLE AS SELECT * FROM NHANVIEN WHERE MaPB = @MaPB
Hàm trong SQL Server có thể gọi các hàm khác.
Đúng
Sai
DETERMINISTIC trong hàm có ý nghĩa gì?
Hàm luôn trả về cùng một kết quả với cùng một đầu vào
Hàm chạy nhanh hơn
Hàm có thể truy cập dữ liệu bên ngoài
Hàm có thể thực hiện các thao tác DML
Để sửa đổi hàm đã tồn tại, ta sử dụng:
ALTER FUNCTION ten_ham
UPDATE FUNCTION ten_ham
MODIFY FUNCTION ten_ham
CHANGE FUNCTION ten_ham
Cú pháp tạo stored procedure trong SQL Server là:
CREATE PROCEDURE ten_thu_tuc AS BEGIN ... END
CREATE PROC ten_thu_tuc AS BEGIN ... END
NEW PROCEDURE ten_thu_tuc AS BEGIN ... END
Cả A và B đều đúng
Stored procedure có thể thực hiện các thao tác DML (INSERT, UPDATE, DELETE).
Đúng
Sai
Để tạo procedure thêm mới nhân viên, ta viết:
CREATE PROC sp_ThemNhanVien @MaNV INT, @TenNV NVARCHAR(50) AS BEGIN INSERT INTO NHANVIEN VALUES (@MaNV, @TenNV) END
CREATE PROC sp_ThemNhanVien (@MaNV INT, @TenNV NVARCHAR(50)) AS INSERT INTO NHANVIEN VALUES (@MaNV, @TenNV)
CREATE PROCEDURE sp_ThemNhanVien @MaNV INT, @TenNV NVARCHAR(50) IS INSERT INTO NHANVIEN VALUES (@MaNV, @TenNV)
CREATE PROC sp_ThemNhanVien WITH @MaNV INT, @TenNV NVARCHAR(50) AS INSERT INTO NHANVIEN VALUES (@MaNV, @TenNV)
Trong SQL Server, loại tham số nào của Stored Procedure được sử dụng để truyền giá trị đầu vào vào thủ tục?
OUTPUT
INPUT/OUTPUT
RETURN
INPUT
Để khai báo tham số OUTPUT trong procedure, ta viết:
@ten_tham_so kieu_du_lieu OUTPUT
@ten_tham_so kieu_du_lieu OUT
OUTPUT @ten_tham_so kieu_du_lieu
OUT @ten_tham_so kieu_du_lieu
Để xử lý lỗi trong stored procedure, ta có thể sử dụng:
TRY...CATCH
IF...ELSE
WHILE...BREAK
FOR...NEXT
Stored procedure có thể trả về nhiều result set.
Đúng
Sai
Để tạo procedure cập nhật lương nhân viên, ta có thể viết:
CREATE PROC sp_CapNhatLuong @MaNV INT, @LuongMoi MONEY AS BEGIN UPDATE NHANVIEN SET Luong = @LuongMoi WHERE MaNV = @MaNV END
CREATE PROC sp_CapNhatLuong @MaNV INT, @LuongMoi MONEY IS UPDATE NHANVIEN SET Luong = @LuongMoi WHERE MaNV = @MaNV
CREATE PROCEDURE sp_CapNhatLuong (@MaNV INT, @LuongMoi MONEY) AS UPDATE NHANVIEN SET Luong = @LuongMoi WHERE MaNV = @MaNV
CREATE PROC sp_CapNhatLuong (@MaNV INT, @LuongMoi MONEY) AS UPDATE NHANVIEN SET Luong = @LuongMoi WHERE MaNV = @MaNV
@ROWCOUNT trong stored procedure cho biết gì?
Số dòng bị ảnh hưởng bởi câu lệnh T-SQL cuối cùng
Tổng số dòng trong bảng
Số tham số của procedure
Số lần procedure được gọi
Tìm và sửa lỗi trong đoạn tạo bảng sau: CREATE TABLE NHANVIEN ( MaNV INT PRIMARY KEY, TenNV NVARCHAR(50) NOT NULL, NgaySinh DATE, GioiTinh NVARCHAR(5) CHECK (GioiTinh IN ('Nam','Nu')), DiaChi NVARCHAR(200), MaPB INT FOREIGN KEY REFERENCES PHONGBAN(MaPB), Luong MONEY DEFAULT 0 ); Lựa chọn nêu đúng cách sửa lỗi.
Thiếu từ khóa CONSTRAINT trước FOREIGN KEY
Sai cú pháp FOREIGN KEY, phải viết: MaPB INT, FOREIGN KEY (MaPB) REFERENCES PHONGBAN(MaPB)
Kiểu dữ liệu MONEY không hợp lệ
Không có lỗi
Sửa lỗi trong câu lệnh tạo index: CREATE INDEX IX_TenNV IN NHANVIEN(TenNV);
Sửa IN thành ON
Sửa CREATE INDEX thành ADD INDEX
Thêm từ khóa FOR
Không có lỗi
Sửa lỗi trong câu lệnh tạo bảng với giá trị mặc định: CREATE TABLE DUAN ( MaDA INT PRIMARY KEY, TenDA NVARCHAR(100), NgayBatDau DATE DEFAULT TODAY(), NgayKetThuc DATE, KinhPhi MONEY );
Sửa TODAY() thành GETDATE()
Sửa DEFAULT thành VALUE
Thêm DEFAULT trước GETDATE()
Không có lỗi
Sửa lỗi trong câu truy vấn: SELECT MaNV, TenNV, Luong FROM NHANVIEN WHERE Luong > 5000000 ORDER Luong DESC;
Thêm BY sau ORDER: ORDER BY Luong DESC
Sửa DESC thành DESCENDING
Thêm FROM trước ORDER
Không có lỗi
Tìm và sửa lỗi trong truy vấn có GROUP BY: SELECT MaPB, TenPB, COUNT(*) AS SoNV FROM NHANVIEN NV JOIN PHONGBAN PB ON NV.MaPB = PB.MaPB GROUP BY MaPB;
TenPB phải có trong GROUP BY: GROUP BY MaPB, TenPB
Phải thêm PB.MaPB trong GROUP BY
Phải thêm PB.MaPB và PB.TenPB trong SELECT
Tất cả các đáp án trên
Sửa lỗi trong câu lệnh JOIN: SELECT NV.TenNV, PB.TenPB FROM NHANVIEN NV INNER JOIN PHONGBAN PB IN NV.MaPB = PB.MaPB;
Sửa IN thành ON
Sửa INNER JOIN thành JOIN ON
Thêm WHERE trước điều kiện
Không có lỗi
Chỉnh sửa lỗi trong truy vấn con: SELECT * FROM NHANVIEN WHERE MaPB = (SELECT MaPB FROM PHONGBAN WHERE TenPB = 'Ke toan');
Thêm dấu N trước chuỗi Unicode: N'Ke toan'
Sửa dấu = thành IN
Thêm DISTINCT trong subquery
Không cần sửa nếu chắc chắn subquery trả về 1 giá trị
Sửa lỗi trong câu lệnh HAVING: SELECT MaPB, AVG(Luong) AS LuongTB FROM NHANVIEN WHERE COUNT(*) > 3 GROUP BY MaPB;
Phải dùng HAVING thay vì WHERE cho hàm tổng hợp: HAVING COUNT(*) > 3
Di chuyển WHERE COUNT(*) > 3 xuống sau GROUP BY
Sử dụng TOP 3 thay cho HAVING
Không có lỗi
Tìm lỗi trong câu lệnh UPDATE: UPDATE NHANVIEN SET Luong = Luong * 1.1 WHERE MaPB = 1 AND Luong > 5000000;
Thiếu dấu chấm phẩy ở cuối
Không có FROM clause
Cú pháp SET sai
Không có lỗi
Sửa lỗi trong câu lệnh INSERT: INSERT INTO NHANVIEN VALUES (1, 'Nguyen Van A', '1990-01-01', 'Nam', 'Ha Noi', 1);
Thiếu cột Luong trong VALUES (cần đủ số cột hoặc chỉ định tên cột)
Thêm N trước chuỗi Unicode: N'Nguyen Van A', N'Nam', N'Ha Noi'
Cả A và B đều đúng
Không có lỗi nếu Luong có DEFAULT hoặc NULL
Chỉnh sửa câu lệnh DELETE: DELETE NHANVIEN WHERE MaNV = 1;
Thêm FROM: DELETE FROM NHANVIEN WHERE MaNV = 1
Sửa DELETE thành REMOVE
Thêm * sau DELETE
Không có lỗi (SQL Server cho phép cả hai cách)
Sửa lỗi trong truy vấn với LIKE: SELECT * FROM NHANVIEN WHERE TenNV LIKE '%Nguyen*';
Sửa * thành %: LIKE '%Nguyen%'
Sửa % thành *
Thêm dấu nháy đơn
Không có lỗi
Tìm lỗi trong truy vấn sử dụng TOP: SELECT 10 TOP * FROM NHANVIEN ORDER BY Luong DESC;
Sửa thành: SELECT TOP 10 * FROM NHANVIEN ORDER BY Luong DESC
Sửa thành: SELECT * TOP 10 FROM NHANVIEN
Thêm LIMIT 10
Không có lỗi
Sửa lỗi trong hàm scalar: CREATE FUNCTION fn_TinhTongLuong(@MaPB INT) RETURNS MONEY BEGIN DECLARE @Tong MONEY SELECT @Tong = SUM(Luong) FROM NHANVIEN WHERE MaPB = @MaPB RETURN @Tong END
Thiếu AS trước BEGIN: RETURNS MONEY AS BEGIN
Thiếu GO ở cuối
Sai cú pháp DECLARE
Không có lỗi
Sửa lỗi trong multi-statement table-valued function: CREATE FUNCTION fn_ThongKeNhanVien() RETURNS @KetQua TABLE ( MaPB INT, SoNV INT ) BEGIN INSERT INTO @KetQua SELECT MaPB, COUNT(*) FROM NHANVIEN GROUP BY MaPB END
Thiếu RETURN ở cuối: thêm RETURN trước END
Thiếu AS trước BEGIN
Cả A và B đều đúng
Không có lỗi
Tìm lỗi trong hàm có INSERT: CREATE FUNCTION fn_ThemNhanVien(@MaNV INT, @TenNV NVARCHAR(50)) RETURNS INT AS BEGIN INSERT INTO NHANVIEN (MaNV, TenNV) VALUES (@MaNV, @TenNV) RETURN 1 END
Hàm không thể thực hiện INSERT, phải dùng Stored Procedure
Thiếu @KetQua
Sai cú pháp RETURN
Không có lỗi
Sửa lỗi khi gọi hàm: SELECT fn_TinhTuoi('1990-01-01') AS Tuoi FROM NHANVIEN;
Thêm dbo.: SELECT dbo.fn_TinhTuoi('1990-01-01') AS Tuoi FROM NHANVIEN
Thêm EXECUTE trước fn_TinhTuoi
Sửa thành CALL fn_TinhTuoi
Không có lỗi
Sửa lỗi trong stored procedure: CREATE PROCEDURE sp_LayNhanVien @MaPB INT BEGIN SELECT * FROM NHANVIEN WHERE MaPB = @MaPB END
Thiếu AS trước BEGIN: CREATE PROCEDURE sp_LayNhanVien @MaPB INT AS BEGIN
Thiếu dấu phẩy sau @MaPB INT
Thiếu RETURNS
Không có lỗi
Tìm lỗi trong procedure UPDATE: CREATE PROCEDURE sp_TangLuong @MaNV INT, @PhanTram FLOAT AS BEGIN UPDATE NHANVIEN SET Luong = Luong * (1 + @PhanTram) WHERE MaNV = @MaNV IF @@ROWCOUNT = 0 RETURN 'Khong tim thay nhan vien' ELSE RETURN 'Cap nhat thanh cong' END
RETURN chỉ trả về số nguyên, không thể trả về chuỗi. Dùng PRINT hoặc RAISERROR
Sai cú pháp IF...ELSE
Thiếu BEGIN...END cho IF và ELSE
Không có lỗi
Sửa lỗi trong trigger sau: CREATE TRIGGER trg_KiemTraLuong ON NHANVIEN AFTER INSERT BEGIN IF EXISTS (SELECT * FROM inserted WHERE Luong < 0) ROLLBACK TRANSACTION PRINT 'Luong phai lon hon 0' END
Thiếu AS trước BEGIN
Thêm DELETE trước ROLLBACK
Phải dùng BEFORE INSERT thay vì AFTER INSERT
Không có lỗi
Chỉnh sửa trigger có sử dụng bảng deleted: CREATE TRIGGER trg_XoaNhanVien ON NHANVIEN FOR DELETE AS BEGIN INSERT INTO NhanVien_XoaLog (MaNV, TenNV, NgayXoa) SELECT MaNV, TenNV, GETDATE() FROM deleted END Chọn phương án mô tả sửa đổi cần thiết.
Sửa IN thành ON
Sửa FOR thành AFTER hoặc INSTEAD OF
Chỉ phương án sửa IN thành ON là bắt buộc (FOR là hợp lệ, tương đương AFTER)
Không có lỗi
Sửa lỗi trong trigger có nhiều sự kiện: CREATE TRIGGER trg_AuditNhanVien ON NHANVIEN AFTER INSERT AND UPDATE AND DELETE AS BEGIN INSERT INTO AuditLog (BangName, HanhDong, ThoiGian) VALUES ('NHANVIEN', 'Thay doi', GETDATE()) END Chọn cách sửa cú pháp sự kiện.
Sửa AND thành dấu phẩy: AFTER INSERT, UPDATE, DELETE
Sửa AND thành OR
Phải tạo ba trigger riêng biệt
Không có lỗi
