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.

  • Cách tạo bảng trong SQL
  • Tích hợp ChatGPT và SQL: Tiến bộ và cơ hội trong nhận dạng giọng nói dựa trên AI
  • ChatGPT và SQL: Hỗ trợ Sức khỏe Tâm thần thông qua Trí tuệ Nhân tạo
  • SQL Series 6- Các loại ràng buộc trong SQL (Phần 2): Not Null, Unique, Default, Check
  • SQL Series 4- Các loại ràng buộc trong SQL (Phần 1): Ràng buộc khóa chính, khóa ngoại

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é!

1. Phần 1: Nội dung bài tập thực hành sql

Hã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 Server

2.1 Bước 1: Tạo database QLBanHang

CREATE DATABASE QLBANHANG;

2.2 Bước 2: Tạo bảng KHACHHANG

Cú 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ả:

Bài tập về ngôn ngữ truy vân sql năm 2024

2.3 Bước 3: Tạo bảng VATTU

Cú 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ả:

Bài tập về ngôn ngữ truy vân sql năm 2024

2.4 Bước 4: Tạo bảng HOADON

Cú pháp:

CREATE TABLE HOADON( MAHD nvarchar(10) NOT NULL PRIMARY KEY, NGAY datetime, MAKH nvarchar(5), TONGTG money );

Kết quả:

Bài tập về ngôn ngữ truy vân sql năm 2024

2.5 Bước 5: Tạo bảng CHITIETHOADON

Cú 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ận

Bài tập về ngôn ngữ truy vân sql năm 2024

Sau 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.

Bài tập về ngôn ngữ truy vân sql năm 2024

Dưới đây là một số khái niệm cơ bản về SQL:

  • Cơ sở dữ liệu: Là một tập hợp dữ liệu được tổ chức theo một cách nhất quán, để có thể truy cập và sử dụng dễ dàng.
  • Bảng: Là một tập hợp các dữ liệu được tổ chức thành các hàng và cột.
  • Kiểu dữ liệu: Là loại dữ liệu mà một trường có thể chứa.
  • Truy vấn SQL: Là một câu lệnh được sử dụng để truy vấn dữ liệu từ cơ sở dữ liệu.

Các câu lệnh SQL cơ bản

Dưới đây là một số câu lệnh SQL cơ bản:

  • SELECT: Lấy dữ liệu từ cơ sở dữ liệu.
  • INSERT: Thêm dữ liệu vào cơ sở dữ liệu.
  • UPDATE: Cập nhật dữ liệu trong cơ sở dữ liệu.
  • DELETE: Xóa dữ liệu khỏi cơ sở dữ liệu.

Các toán tử SQL cơ bản

Dưới đây là một số toán tử SQL cơ bản:

  • Toán tử so sánh: So sánh hai giá trị.
  • Toán tử logic: Kết hợp hai hoặc nhiều mệnh đề.
  • Toán tử toán học: Thực hiện các phép toán số học.

Các hàm SQL cơ bản

Dưới đây là một số hàm SQL cơ bản:

  • Hàm COUNT: Đếm số lượng bản ghi trong một tập hợp.
  • Hàm SUM: Tính tổng của các giá trị trong một tập hợp.
  • Hàm AVG: Tính trung bình của các giá trị trong một tập hợp.

Các câu lệnh SQL nâng cao

Dưới đây là một số câu lệnh SQL nâng cao:

  • JOIN: Kết hợp dữ liệu từ nhiều bảng.
  • GROUP BY: Nhóm dữ liệu theo một thuộc tính.
  • HAVING: Lọc dữ liệu trong một nhóm.
  • WITH: Tạo một subquery.

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:

  1. SELECT – Lựa chọn dữ liệu từ bảng

Truy vấn để lấy tất cả dữ liệu từ một bảng:

sqlCopy code

SELECT * FROM TenBang;

  1. WHERE – Lọc dữ liệu dựa trên điều kiện

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;

  1. ORDER BY – Sắp xếp dữ liệu

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;

  1. GROUP BY – Nhóm dữ liệu

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;

  1. JOIN – Kết nối dữ liệu từ nhiều bảng

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;

  1. INSERT INTO – Thêm dữ liệu mới vào bảng

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ố’);

  1. UPDATE – Cập nhật dữ liệu trong bảng

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;

  1. DELETE – Xóa dữ liệu từ bảng

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 án

Dướ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ả.