Bài tập về ngôn ngữ truy vân sql năm 2024
Bài tập thực hành SQL sau đây để các bạn có thể nắm vững cú pháp hơn. Các bạn nên thử tự xây dựng các bảng trước khi xem lời giải để đảm bảo học tốt hơn.
Xin chào các bạn mình là Phạm Vũ – Học viên FUNiX. Sau khi học xong bài hướng dẫn về cách thao tác với bảng và Ràng buộc khóa chính, khóa ngoại trong sql thì mình có bài tập thực hành SQL sau đây để các bạn có thể nắm vững cú pháp hơn. Các bạn nên thử tự xây dựng các bảng trước khi xem lời giải để đảm bảo học tốt hơn nhé! Show
1. Phần 1: Nội dung bài tập thực hành sqlHãy viết các câu lệnh SQL để tạo CSDL có tên QLBanhang gồm 4 bảng có cấu trúc như sau: Những thuộc tính gạch chân là khóa chính (primary key) của bảng. 1.1 Bảng KHACHHANG Tên cột Kiểu dữ liệu Kích thướcMAKHNvarchar 5 TENKH Nvarchar 30 DIACHI Nvarchar 300 DT Varchar 10 EMAIL Varchar 30 1.2 Bảng VATTU Tên cột Kiểu dữ liệu Kích thướcMAVTNvarchar 5 TENVT Nvarchar 30 DVT Nvarchar 20 GIAMUA money SLTON int 1.3 Bảng HOADON Tên cột Kiểu dữ liệu Kích thướcMAHDNvarchar 10 NGAY Datetime MAKH Nvarchar 5 TONGTG money 1.4 Bảng CHITIETHOADON Tên cột Kiểu dữ liệu Kích thướcMAHDNvarchar 10MAVTNvarchar 5 SL int GIABAN money Thời gian làm bài dự kiến: 30 phút \>>> Xem thêm: Cách sao lưu và khôi phục cơ sở dữ liệu Microsoft SQL Server bằng SSMS 2. Phần 2: Thực hành với hệ quản trị cơ sở dữ liệu SQL Server2.1 Bước 1: Tạo database QLBanHangCREATE DATABASE QLBANHANG; 2.2 Bước 2: Tạo bảng KHACHHANGCú pháp: use QLBanHang CREATE TABLE KHACHHANG( MAKH nvarchar(5) NOT NULL PRIMARY KEY, TENKH nvarchar(30), DIACHI nvarchar(300), DT varchar(10), EMAIL varchar(30) ); Kết quả: 2.3 Bước 3: Tạo bảng VATTUCú pháp: CREATE TABLE VATTU( MAVT nvarchar(5) NOT NULL PRIMARY KEY, TENVT nvarchar(30), DVT nvarchar(20), GIAMUA money, SLTON int ); Kết quả: 2.4 Bước 4: Tạo bảng HOADONCú pháp: CREATE TABLE HOADON( MAHD nvarchar(10) NOT NULL PRIMARY KEY, NGAY datetime, MAKH nvarchar(5), TONGTG money ); Kết quả: 2.5 Bước 5: Tạo bảng CHITIETHOADONCú pháp: CREATE TABLE CHITIETHOADON( MAHD nvarchar(10) NOT NULL, MAVT nvarchar(5) NOT NULL, SL int, GIABAN money CONSTRAINT PK_ChiTietHoaDon PRIMARY KEY(MAHD,MAVT) ); Kết quả: \>>> Xem thêm: Các lệnh cơ bản thao tác với SQL 3. Phần 3: Kết luậnSau khi hoàn thành xong bài thực này này, bạn đã có thể nắm vững cú pháp tạo Database, tạo bảng với khóa chính và các cột với các kiểu dữ liệu khác nhau như int, nvarchar, varchar, datetime, money. Hy vọng bài viết này hữu ích với bạn, nếu có góp ý nào vui lòng liên hệ tới email: [email protected]. SQL là một ngôn ngữ truy vấn có cấu trúc, được sử dụng để truy vấn và thao tác dữ liệu trong cơ sở dữ liệu quan hệ. SQL là một ngôn ngữ tiêu chuẩn, được hỗ trợ bởi hầu hết các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), bao gồm MySQL, PostgreSQL, Oracle, SQL Server, v.v. Dưới đây là một số khái niệm cơ bản về SQL:
Các câu lệnh SQL cơ bảnDưới đây là một số câu lệnh SQL cơ bản:
Các toán tử SQL cơ bảnDưới đây là một số toán tử SQL cơ bản:
Các hàm SQL cơ bảnDưới đây là một số hàm SQL cơ bản:
Các câu lệnh SQL nâng caoDưới đây là một số câu lệnh SQL nâng cao:
Luyện tập SQLĐể học SQL hiệu quả, bạn nên luyện tập thường xuyên. Có rất nhiều tài nguyên trực tuyến và ngoại tuyến có thể giúp bạn luyện tập SQL. Bạn cũng có thể tham gia các cộng đồng SQL để được hỗ trợ và chia sẻ kiến thức. Bài tập SQL cơ bản:Dưới đây là một loạt các bài tập SQL Server cơ bản. Tôi tin rằng sau khi bạn hoàn thành tất cả các bài tập này, bạn sẽ có kiến thức cơ bản về cách sử dụng SQL Server. Bạn có thể tìm đáp án cho mỗi bài tập ở phần dưới. Dưới đây là một số truy vấn SQL cơ bản và giải đáp cho từng truy vấn:
Truy vấn để lấy tất cả dữ liệu từ một bảng: sqlCopy code SELECT * FROM TenBang;
Truy vấn để lấy tất cả dữ liệu từ bảng có một điều kiện cụ thể: sqlCopy code SELECT * FROM TenBang WHERE DieuKien; Ví dụ: Lấy tất cả những người có tuổi lớn hơn 30 từ bảng “People”: sqlCopy code SELECT * FROM People WHERE Age > 30;
Truy vấn để lấy dữ liệu từ bảng và sắp xếp theo một cột cụ thể: sqlCopy code SELECT * FROM TenBang ORDER BY TenCot ASC/DESC; Ví dụ: Lấy danh sách các sản phẩm từ bảng “Products” và sắp xếp theo giá từ thấp đến cao: sqlCopy code SELECT * FROM Products ORDER BY Price ASC;
Truy vấn để nhóm dữ liệu dựa trên giá trị của một cột: sqlCopy code SELECT TenCot, COUNT(*) FROM TenBang GROUP BY TenCot; Ví dụ: Đếm số lượng đơn hàng của mỗi khách hàng từ bảng “Orders” và nhóm theo tên khách hàng: sqlCopy code SELECT CustomerName, COUNT(*) FROM Orders GROUP BY CustomerName;
Truy vấn để kết nối dữ liệu từ hai hoặc nhiều bảng: sqlCopy code SELECT CacCot FROM Bang1 INNER JOIN Bang2 ON Bang1.KhoaChung = Bang2.KhoaChung; Ví dụ: Lấy thông tin sản phẩm và tên nhà cung cấp từ bảng “Products” và “Suppliers” bằng cách kết nối chúng qua cột “SupplierID”: sqlCopy code SELECT Products.ProductName, Suppliers.SupplierName FROM Products INNER JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID;
Truy vấn để thêm dữ liệu mới vào bảng: sqlCopy code INSERT INTO TenBang (CacCot) VALUES (GiaTri); Ví dụ: Thêm một khách hàng mới vào bảng “Customers”: sqlCopy code INSERT INTO Customers (CustomerName, ContactName, City) VALUES (‘Tên khách hàng’, ‘Tên liên hệ’, ‘Thành phố’);
Truy vấn để cập nhật dữ liệu trong bảng: sqlCopy code UPDATE TenBang SET TenCot = GiaTriMoi WHERE DieuKien; Ví dụ: Cập nhật giá sản phẩm có ID là 1 trong bảng “Products” thành 1000: sqlCopy code UPDATE Products SET Price = 1000 WHERE ProductID = 1;
Truy vấn để xóa dữ liệu từ bảng: sqlCopy code DELETE FROM TenBang WHERE DieuKien; Ví dụ: Xóa khách hàng có ID là 5 từ bảng “Customers”: sqlCopy code DELETE FROM Customers WHERE CustomerID = 5; Câu 9: Đưa ra thông tin gồm mã số, họ tên và tên khoa của tất cả các giảng viên. sqlCopy code SELECT GiangVien.magv, GiangVien.hotengv, Khoa.tenkhoa FROM GiangVien INNER JOIN Khoa ON GiangVien.makhoa = Khoa.makhoa; Câu 10: Đưa ra thông tin gồm mã số, họ tên và tên khoa của các giảng viên của khoa ‘DIA LY va QLTN’. sqlCopy code SELECT GiangVien.magv, GiangVien.hotengv, Khoa.tenkhoa FROM GiangVien INNER JOIN Khoa ON GiangVien.makhoa = Khoa.makhoa WHERE Khoa.tenkhoa = ‘DIA LY va QLTN’; Câu 11: Cho biết số sinh viên của khoa ‘CONG NGHE SINH HOC’. sqlCopy code SELECT COUNT(SinhVien.masv) AS SoSinhVien FROM SinhVien INNER JOIN Khoa ON SinhVien.makhoa = Khoa.makhoa WHERE Khoa.tenkhoa = ‘CONG NGHE SINH HOC’; Câu 12: Đưa ra danh sách gồm mã số, họ tên và tuổi của các sinh viên khoa ‘TOAN’. sqlCopy code SELECT SinhVien.masv, SinhVien.hotensv, YEAR(GETDATE()) – SinhVien.namsinh AS Tuoi FROM SinhVien INNER JOIN Khoa ON SinhVien.makhoa = Khoa.makhoa WHERE Khoa.tenkhoa = ‘TOAN’; Câu 13: Cho biết số giảng viên của khoa ‘CONG NGHE SINH HOC’. sqlCopy code SELECT COUNT(GiangVien.magv) AS SoGiangVien FROM GiangVien INNER JOIN Khoa ON GiangVien.makhoa = Khoa.makhoa WHERE Khoa.tenkhoa = ‘CONG NGHE SINH HOC’; Câu 14: Cho biết thông tin về sinh viên không tham gia thực tập. sqlCopy code SELECT SinhVien.masv, SinhVien.hotensv FROM SinhVien LEFT JOIN HuongDan ON SinhVien.masv = HuongDan.masv WHERE HuongDan.masv IS NULL; Câu 15: Đưa ra mã khoa, tên khoa và số giảng viên của mỗi khoa. sqlCopy code SELECT Khoa.makhoa, Khoa.tenkhoa, COUNT(GiangVien.magv) AS SoGiangVien FROM Khoa LEFT JOIN GiangVien ON Khoa.makhoa = GiangVien.makhoa GROUP BY Khoa.makhoa, Khoa.tenkhoa; Câu 16: Cho biết số điện thoại của khoa mà sinh viên có tên ‘Le van son’ đang theo học. sqlCopy code SELECT Khoa.dienthoai FROM Khoa INNER JOIN SinhVien ON Khoa.makhoa = SinhVien.makhoa WHERE SinhVien.hotensv = ‘Le van son’; Câu 17: Cho biết mã số và tên của các đề tài do giảng viên ‘Tran son’ hướng dẫn. sqlCopy code SELECT DeTai.madt, DeTai.tendt FROM DeTai INNER JOIN HuongDan ON DeTai.madt = HuongDan.madt INNER JOIN GiangVien ON HuongDan.magv = GiangVien.magv WHERE GiangVien.hotengv = ‘Tran son’; Câu 18: Cho biết tên đề tài không có sinh viên nào thực tập. sqlCopy code SELECT DeTai.tendt FROM DeTai LEFT JOIN HuongDan ON DeTai.madt = HuongDan.madt WHERE HuongDan.madt IS NULL; Câu 19: Cho biết mã số, họ tên, tên khoa của các giảng viên hướng dẫn từ 3 sinh viên trở lên. sqlCopy code SELECT GiangVien.magv, GiangVien.hotengv, Khoa.tenkhoa FROM GiangVien INNER JOIN Khoa ON GiangVien.makhoa = Khoa.makhoa INNER JOIN ( SELECT magv, COUNT(masv) AS SoSinhVien FROM HuongDan GROUP BY magv HAVING COUNT(masv) >= 3 ) AS GiangVien_SinhVien ON GiangVien.magv = GiangVien_SinhVien.magv; Câu 20: Cho biết mã số, tên đề tài của đề tài có kinh phí cao nhất. sqlCopy code SELECT DeTai.madt, DeTai.tendt FROM DeTai WHERE DeTai.kinhphi = (SELECT MAX(kinhphi) FROM DeTai); Câu 21: Cho biết mã số và tên các đề tài có nhiều hơn 2 sinh viên tham gia thực tập. sqlCopy code SELECT DeTai.madt, DeTai.tendt FROM DeTai INNER JOIN HuongDan ON DeTai.madt = HuongDan.madt GROUP BY DeTai.madt, DeTai.tendt HAVING COUNT(HuongDan.masv) > 2; Câu 22: Đưa ra mã số, họ tên và điểm của các sinh viên khoa ‘DIA LY va QLTN’. sqlCopy code SELECT SinhVien.masv, SinhVien.hotensv, HuongDan.ketqua FROM SinhVien INNER JOIN HuongDan ON SinhVien.masv = HuongDan.masv INNER JOIN GiangVien ON HuongDan.magv = GiangVien.magv INNER JOIN Khoa ON GiangVien.makhoa = Khoa.makhoa WHERE Khoa.tenkhoa = ‘DIA LY va QLTN’; Câu 23: Đưa ra tên khoa và số lượng sinh viên của mỗi khoa. sqlCopy code SELECT Khoa.tenkhoa, COUNT(SinhVien.masv) AS SoLuongSinhVien FROM Khoa LEFT JOIN SinhVien ON Khoa.makhoa = SinhVien.makhoa GROUP BY Khoa.tenkhoa; Câu 24: Cho biết thông tin về các sinh viên thực tập tại quê nhà. sqlCopy code SELECT SinhVien.masv, SinhVien Đây là một số truy vấn SQL cơ bản. SQL là một ngôn ngữ mạnh mẽ cho việc truy vấn và quản lý dữ liệu trong cơ sở dữ liệu. Hãy tập truy vấn và thao tác với cơ sở dữ liệu để nâng cao kỹ năng của bạn. Bài tập sql nâng cao có đáp ánDưới đây là một số bài tập SQL nâng cao cùng với đáp án của chúng: Bài tập 1: Lấy tất cả sản phẩm có giá cao nhất trong bảng “Products”. sqlCopy code SELECT * FROM Products WHERE Price = (SELECT MAX(Price) FROM Products); Bài tập 2: Tạo một truy vấn để tính tổng số sản phẩm của mỗi nhà cung cấp và hiển thị kết quả bằng cột “TotalProducts”. sqlCopy code SELECT Suppliers.SupplierName, COUNT(Products.ProductID) AS TotalProducts FROM Suppliers LEFT JOIN Products ON Suppliers.SupplierID = Products.SupplierID GROUP BY Suppliers.SupplierName; Bài tập 3: Tạo một truy vấn để lấy tên của tất cả khách hàng mà họ đã đặt hàng từ cả hai nguồn cung cấp “Supplier A” và “Supplier B”. sqlCopy code SELECT Customers.CustomerName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID INNER JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID WHERE Suppliers.SupplierName IN (‘Supplier A’, ‘Supplier B’) GROUP BY Customers.CustomerName; Bài tập 4: Tạo một truy vấn để lấy tên của tất cả những khách hàng không có đơn hàng trong bảng “Orders”. sqlCopy code SELECT Customers.CustomerName FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID WHERE Orders.OrderID IS NULL; Bài tập 5: Tạo một truy vấn để lấy một danh sách các sản phẩm mà không có ai mua từ bảng “OrderDetails”. sqlCopy code SELECT Products.ProductName FROM Products LEFT JOIN OrderDetails ON Products.ProductID = OrderDetails.ProductID WHERE OrderDetails.ProductID IS NULL; Bài tập 6: Tạo một truy vấn để tính tổng doanh số bán hàng của mỗi nhân viên từ bảng “Employees” và “Orders”. sqlCopy code SELECT Employees.EmployeeName, SUM(OrderDetails.Quantity * Products.Price) AS TotalSales FROM Employees LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID LEFT JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID GROUP BY Employees.EmployeeName; Bài tập 7: Tạo một truy vấn để lấy các sản phẩm có giá trung bình lớn hơn giá trung bình của tất cả sản phẩm trong bảng “Products”. sqlCopy code SELECT ProductName, Price FROM Products WHERE Price > (SELECT AVG(Price) FROM Products); Bài tập 8: Tạo một truy vấn để lấy tên của khách hàng đặt hàng nhiều nhất từ bảng “Customers” và “Orders”. sqlCopy code SELECT Customers.CustomerName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID GROUP BY Customers.CustomerName ORDER BY COUNT(Orders.OrderID) DESC LIMIT 1; Bài tập 9: Tạo một truy vấn để lấy danh sách tất cả các nhà cung cấp và tổng số sản phẩm mà họ đã cung cấp, sắp xếp theo tổng số sản phẩm giảm dần. sqlCopy code SELECT Suppliers.SupplierName, COUNT(Products.ProductID) AS TotalProductsSupplied FROM Suppliers LEFT JOIN Products ON Suppliers.SupplierID = Products.SupplierID GROUP BY Suppliers.SupplierName ORDER BY TotalProductsSupplied DESC; Bài tập 10: Tạo một truy vấn để lấy danh sách các sản phẩm có tồn kho ít hơn 10 đơn vị từ bảng “Products”. sqlCopy code SELECT ProductName, UnitsInStock FROM Products WHERE UnitsInStock < 10; Nhớ kiểm tra kết quả của từng truy vấn để đảm bảo tính đúng đắn. Chúc bạn học tốt và thành công với SQL nâng cao! Xem những bài tập nâng cao hơn tại đây Kết luận SQL là một ngôn ngữ quan trọng đối với bất kỳ ai muốn làm việc với cơ sở dữ liệu. Bằng cách nắm vững các khái niệm và câu lệnh SQL cơ bản, bạn có thể truy cập và thao tác dữ liệu một cách hiệu quả. |