You are on page 1of 52

TRƯỜNG ĐH CÔNG NGHỆ GIAO THÔNG VẬN TẢI

HỆ CƠ SỞ DỮ LIỆU

Giảng viên: Nguyễn Thị Kim Huệ

1
PHẦN 3:
NGÔN NGỮ THAO TÁC DỮ LIỆU
(Data Manaipulation language- DML)

2
1. GIỚI THIỆU

Ngôn ngữ thao tác dữ liệu gồm các lệnh sau:


▪ SELECT: Sử dụng để truy xuất dữ liệu từ một hoặc nhiều
bảng
▪ INSERT: Bổ sung dữ liệu
▪ UPDATE: Cập nhật dữ liệu
▪ DELETE: Xóa dữ liệu

3
INSERT - Chèn dữ liệu

➢ Cú pháp:
INSERT [INTO] <tên bảng> [(ds cột)]
VALUES (giá trị cần chèn của hàng 1)
[, (giá trị cần chèn của hàng 2)
,…]
(Thành phần trong [] có thể có hoặc không)
Chú ý:
• Nếu dữ liệu kiểu text và kiểu Date, khi chèn phải có ‘ ‘, nếu là kiểu
nvachar thì phải có tiếp đầu ngữ N’ ’.
• Dữ liệu kiểu Date yêu cầu nhập tháng/ngày/năm hoặc năm/tháng/ngày
• Dữ liệu dạng tự tăng thì không cần nhập.
• Với dữ liệu mặc định, nếu không thay đổi giá trị mặc định khi chèn dữ
liệu cần liệt kê danh sách các cột mà không có cột có ràng buộc mặc
định (default)
1. INSERT - Chèn dữ liệu

▪ INSERT INTO Sinhvien (Masv, TenSV,GT,Ngaysinh, Que, Lop)


VALUES (‘sv1’, N'Trần Trọng‘ , 'Nam‘ , '1995/12/14', N’Hà Nội‘ , 'L02‘),
(‘sv2’, N'Lê Thùy Dung', N'Nữ‘, '05/12/1997', N'Hà Nội','L03')
▪ INSERT INTO Sinhvien
VALUES (‘sv3’, N'Lê An‘ , N'Nam‘ , '11/20/1995‘ , N'Ninh Bình', 'L04’),
INSERT sinhvien
VALUES ( ‘sv4’, N'Đoàn Duy’ , N'Nam’ , '4/12/1994', N'Hà Nội', 'L01’)

• Xem toàn bộ dữ liệu trên bảng


SELECT * FROM <tên bảng>
Lưu ý khi nhập dữ liệu

➢ Chú ý thứ tự nhập dữ liệu vào các bảng.


➢ Trong 1 bảng:
• Khóa chính:
o Không được trùng
o Tên bất kỳ theo đúng kiểu dữ liệu
• Khóa ngoại:
o Không được đặt bất kỳ
o Phải có rồi.
UPDATE - Cập nhật dữ liệu

3. Cập nhật dữ liệu:


UPDATE <Tên bảng>
SET <tên cột>= <giá trị mới>
[ WHERE <Điều kiện>]

Ví dụ:
DELETE - Xóa dữ liệu

▪ Xóa các dòng thỏa mãn điều kiện:


DELETE FROM table_name
WHERE <tên cột>=<giá trị>;
Ví dụ:

▪ Xóa tất cả các dòng nhưng vẫn giữ nguyên cấu trúc bảng:
DELETE FROM table_name;
Ví dụ:
Truy xuất dữ liệu với câu lệnh SELECT

SELECT [DISTINCT |Top n |* ] <biểu thức/ cột [AS <tên mới>],..>

[INTO <tên bảng mới>]


FROM <tên bảng> [<bí danh>],...
[WHERE <điều kiện chọn>]
[GROUP BY < ds tên cột gom nhóm>]
[HAVING <điều kiện lọc nhóm>]
[ORDER BY <tên cột>[ASC|DESC],…];
Truy xuất dữ liệu với câu lệnh SELECT

▪ Truy vấn có ba loại:


• Truy vấn trên một bảng
• Truy vấn trên nhiều bảng
• Truy vấn lồng
TRUY VẤN TRÊN MỘT BẢNG

▪ A. Truy vấn đơn giản


SELECT <danh sách các cột>
FROM <danh sách các bảng>
[WHERE <biểu thức điều kiện>]
▪ <danh sách các cột>
• Tên các thuộc tính (cột) sẽ được hiển thị trong kết quả truy vấn.
▪ <danh sách các bảng>
• Tên các bảng liên quan để lấy kết quả
▪ <biểu thức điều kiện>
• là điều kiện đưa vào để chọn lọc dữ liệu, thường gồm:
• Các phép toán so sánh: < , > , <= , >= , = , < >
• Các phép toán logic: AND, OR, và NOT
• Các từ khóa: BETWEEN … AND, IN, EXISTS, LIKE…
TRUY VẤN TRÊN MỘT BẢNG

▪ Ví dụ 1: Cho danh sách sinh viên gồm Mã SV, Họ tên, Ngày sinh của tất cả các
sinh viên
Select MaSV, TenSV, Ngaysinh
from Sinhvien
▪ Ví dụ 2: Cho danh sách sinh viên nữ thuộc lớp L02
Select *
From Sinhvien
Where (GT=N'Nữ') and (Lop='L02‘)
▪ Ví dụ 3: Thêm ĐỊNH DANH CHO BẢNG VÀ CHO CỘT (sử dụng từ khóa
AS)
select sv.MaSV, TenSV as 'Tên Sinh Viên'
from Sinhvien as sv
/* sau khi định danh cho bảng thì từ đó sử dụng tên định danh*/
TRUY VẤN TRÊN MỘT BẢNG

▪ Xử lý dữ liệu kiểu chuỗi dùng Like hoặc not like để tìm chuỗi gần đúng
%: Thay thế 1 chuỗi
-: thay thế 1 ký tự
▪ VD 4.1: Cho danh sách các sinh viên có tên là ‘Nga’
select *
from sinhvien
where TenSV like N'% Nga'
▪ VD 4.2: Cho danh sách những sinh viên họ Trần
select *
from sinhvien
where TenSV like N'Trần %'
TRUY VẤN TRÊN MỘT BẢNG

▪ Sử dụng BETWEEN <GT1> AND <GT2> để lấy những bản ghi thỏa
mãn nằm giữa GT1 và GT2.

VD: Cho danh sách gồm mã sinh viên, ma môn học của sinh viên có điểm từ 5
đến 7
select MaSv, MaMH
from ketqua
where diem between 5 and 7

▪ Note: Not Between .. and … có ý nghĩa ngược lại.


TRUY VẤN TRÊN MỘT BẢNG

 Sử dụng NULL/NOT NULL cho các trường hợp sau:


- Không biết - không xác định (value unknown)
- Không thể áp dụng (value inapplicable)
- Không tồn tại (value withheld)

 VD: Cho danh sách gồm Mã Sinh viên và mã môn học của sinh viên không
có điểm thi
select MaSV, MaMH
from ketqua
where Diem is Null
TRUY VẤN TRÊN MỘT BẢNG

 Sử dụng IN (NOT IN):


• VD: Cho danh sách các sinh viên có quê ở Hà Nội hoặc Phú Thọ
Select *
From Sinhvien
where que in (N'Hà nội', N'Phú Thọ’)
 Sử dụng các toán tử DISTINCT, TOP N
- Distinct : loại bỏ các dòng dữ liệu trùng
- Top n : lấy n dòng đầu tiên
 VD: Liệt kê danh sách các tỉnh có sinh viên theo học tại trường
select distinct Que
from Sinhvien
TRUY VẤN TRÊN MỘT BẢNG

▪ VD 8.2: Cho thông tin của hai sinh viên đầu tiên trong danh sách
sinh viên

select top (2) MaSV, TenSV,Que


from Sinhvien
TRUY VẤN TRÊN MỘT BẢNG

▪ VD mở rộng
SELECT MANV, HONV + ‘ ’ + DEMNV + ‘ ’ + TENNV AS ‘HO TEN’
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’ MANV HO TEN
333445555 Nguyen Thanh Tung
987987987 Nguyen Manh Hung

SELECT MANV, LUONG*1.1 AS ‘LUONG10%’


FROM NHANVIEN
MANV LUONG10%
WHERE PHG=5 AND PHAI=‘Nam’
333445555 33000
987987987 27500
TRUY VẤN TRÊN MỘT BẢNG

B. HÀM KẾT HỢP


▪ Được sử dụng để tính giá trị thống kê trên toàn bảng hoặc trên mỗi
nhóm dữ liệu
▪ Các hàm cơ bản:
Sum( [All | Distinct] biểu-thức), Avg( [All | Distinct] biểu-thức)
Cout( [All | Distinct] biểu-thức) : đếm số dòng khác Null trong cột,
biểu thức.
Count(*) : đếm số dòng được chọn trong bảng, kể cả Null
Max( biểu-thức ), Min( biểu-thức )
▪ Các hàm thực hiện tính toán trên toàn bộ dữ liệu, bỏ bớt giá trị trùng
nhau thêm từ distinct
TRUY VẤN TRÊN MỘT BẢNG

B. HÀM KẾT HỢP


▪ VD: Tìm tổng lương, lương cao nhất, lương thấp nhất và lương
trung bình của các nhân viên
NHANVIEN(MaNV, TenNV, GT, NS, DChi, Luong, MaPB)
SELECT sum(Luong) AS [Tổng lương] ,
max(Luong) AS [Lương cao nhất] ,
min(Luong) AS [Lương thấp nhất] ,
avg(Luong) AS [Lương trung bình]
FROM NhanVien

▪ Kết quả: Tổng lương Lương cao nhất Lương thấp nhất Lương trung bình

12.000.000 4.000.000 2.500.000 3.000.000


TRUY VẤN TRÊN MỘT BẢNG

B. HÀM KẾT HỢP


▪ VD: Cho biết số lượng nhân viên của phòng 5
NHANVIEN(MaNV, TenNV, GT, NS, DChi, Luong, MaPB)

SELECT count(MNV) AS [Số nhân viên]


FROM NhanVien
WHERE MaPB = 5
TRUY VẤN TRÊN MỘT BẢNG

C. MỆNH ĐỀ GROUP BY
▪ Để thực hiện gom nhóm các bộ theo một tiêu chí xác định để thực
hiện tính toán
SELECT <DS cột gom nhóm>, <Hàm tính toán>
▪ Cú pháp
FROM <danh sách các bảng>
[WHERE <biểu thức điều kiện>]
GROUP BY <DS cột gom nhóm>
HAVING <điều kiện tính toán nhóm>

- Sau khi gom nhóm: Mỗi nhóm, các bộ sẽ có cùng giá trị tại các
thuộc tính gom nhóm

- Danh sách cột gom nhóm ở trong câu lệnh SELECT phải xuất hiện
đầy đủ ở mệnh đề GROUP BY
TRUY VẤN TRÊN MỘT BẢNG

VD1: Đưa ra tên sinh viên theo từng lớp


select tensv, lop
from sv
group by lop, tensv
▪ VD2: Đếm số sinh viên ở mỗi lớp
select lop, count (tensv) as ' Số SV'
from sv
group by lop
VD3: cho biết lớp có số sinh viên lớn hơn bằng 3
select lop, count (tensv) as ' Số SV'
from sv
group by lop
Having count (tensv)>=3
TRUY VẤN TRÊN MỘT BẢNG

NHẬN XÉT:
▪ Mệnh đề GROUP BY
• Các thuộc tính không nằm trong hàm nhóm của mệnh đề
SELECT phải được xuất hiện trong mệnh đề GROUP BY
▪ Mệnh đề HAVING
• Sử dụng các hàm kết hợp trong mệnh đề SELECT để kiểm
tra một số điều kiện nào đó
• Chỉ kiểm tra điều kiện trên nhóm, mệnh đề Having không
lọc trên từng bản ghi.
• Điều kiện trên nhóm (ở mệnh đề HAVING) được thực hiện
sau khi gom nhóm.
TRUY VẤN TRÊN MỘT BẢNG

NHẬN XÉT:
▪ Thứ tự thực hiện câu truy vấn có mệnh đề GROUP BY và HAVING
• (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề WHERE
• (2) Những dòng này sẽ được gom thành nhiều nhóm tương ứng
với mệnh đề GROUP BY
• (3) Áp dụng các hàm kết hợp cho mỗi nhóm
• (4) Bỏ qua những nhóm không thỏa điều kiện trong mệnh đề
HAVING
• (5) Rút trích các giá trị của các cột và hàm kết hợp trong mệnh
đề SELECT
Bài tập

1. Đếm số nhân viên Nữ của cửa hàng


2. ĐƯa ra tên mặt hàng của loại hàng 1 hoặc 2
3. Đếm số lượng hàng của mỗi loại hàng
4. Đưa ra loại hàng có giá hàng <2 triệu và có số
lượng mặt hàng >3
6. cho biết tổng số lượng hàng đã bán theo từng mã
hàng.
TRUY VẤN TRÊN MỘT BẢNG

C. MỆNH ĐỀ ORDER BY
▪ Hiển thị kết quả câu truy vấn theo một thứ tự nào đó trên các cột
▪ Cú pháp

SELECT <danh sách các thuộc tính>


FROM <danh sáchcác bảng>
WHERE <biểu thức điều kiện>
ORDER BY <thuộc tính sắp xếp> [ASC | DESC]
ASC (ASCending): tăng (mặc định)
DESC (DESCending): giảm
TRUY VẤN TRÊN MỘT BẢNG

C. MỆNH ĐỀ ORDER BY
VD: Sắp xếp sv theo thứ tự giảm dần của lop, và tăng dần theo masv
select * from sv
order by lop desc, MaSV
TRUY VẤN TRÊN NHIỀU BẢNG

▪ Khi cần thực hiện một yêu cầu truy vấn dữ liệu từ hai hay nhiều bảng.
▪ VD xét:
ChiTietDatHang MatHang

▪ → Đưa ra tên các mặt hàng của đơn hàng có sohoadon=2 trong bảng
ChiTietDatHang
TRUY VẤN TRÊN NHIỀU BẢNG

▪ Có hai cách kết nối bảng:


• Sử dụng mệnh đề where
• Sử dụng Join/inner Join/Left Join/Right Join/Full Join
▪ Trong đó: Join, inner Join và where là tương đương nhau
▪ Sử dụng Where:
SELECT <ds cột>
FROM <Danh sách Tên các bảng>

WHERE <điều kiện nối hai bảng>


▪ Sử dụng inner join
SELECT <danh sách cột>
FROM table1 INNER JOIN table 2
ON <điều kiện nối hai bảng>
TRUY VẤN TRÊN NHIỀU BẢNG

ChiTietDatHang MatHang

→ Đưa ra Sohoadon, mahang và tenhang trong bảng ChiTietHoaDon


C1:
Select sohoadon,a.mahang,tenhang
from chitietdathang a,mathang b
where a.mahang=b.mahang and sohoadon=2
C2:
select sohoadon,a.mahang,tenhang
from chitietdathang a inner join mathang b
on a.mahang= b.mahang
where sohoadon = 2
INNER, LEFT, RIGHT, FULL JOIN

▪ INNER JOIN/JOIN: trả về các dòng của hai bảng thỏa mãn điều kiện
nối
▪ LEFT JOIN: Trả về tất cả các hàng từ bảng bên trái, ngay cả khi
không có so khớp trong bảng bên phải. Nếu dữ liệu có ở bảng trái
không có ở phải vẫn hiển thị
▪ RIGHT JOIN: Trả về tất cả các hàng từ bảng bên phải, ngay cả khi
không có so khớp nào trong bảng bên trái. Nếu dữ liệu có ở bảng phải
không có ở trái vẫn hiển thị
▪ FULL JOIN: Bảng được kết hợp sẽ chứa tất cả bản ghi từ cả hai bảng,
và điền vào đó giá trị NULL cho các giá trị không so khớp nhau.
LEFT JOIN
KhachHang HoaDon
MaKH TenKH MaKH MaSP TenSP
01 Trần Nhật Lệ 01 A100 Quạt máy
02 Lê Thị Nhàn 01 A102 Tủ lạnh
03 Hoàng Lê Minh 03 A120 Máy giặt
04 Bùi Ngọc Quang 05 A230 Ti vi

SELECT TenKH, TenSP


FROM Khachhang LEFT JOIN hoadon
ON Khachhang.MaKH = Hoadon.MaKH
TenKH TenSP
Trần Nhật Lệ Quạt máy
Trần Nhật Lệ Tủ lạnh
Lê Thị Nhàn NULL
Hoàng Lê Minh Máy giặt
Bùi Ngọc Quang NULL
RIGHT JOIN
KhachHang HoaDon
MaKH TenKH MaKH MaSP TenSP
01 Trần Nhật Lệ 01 A100 Quạt máy
02 Lê Thị Nhàn 01 A102 Tủ lạnh
03 Hoàng Lê Minh 03 A120 Máy giặt
04 Bùi Ngọc Quang 05 A230 Ti vi

SELECT TenKH, TenSP


FROM Khachhang RIGHT JOIN hoadon
ON Khachhang.MaKH = Hoadon.MaKH
TenKH TenSP
Trần Nhật Lệ Quạt máy
Trần Nhật Lệ Tủ lạnh
Hoàng Lê Minh Máy giặt
NULL Tivi
FULL JOIN
KhachHang HoaDon
MaKH TenKH MaKH MaSP TenSP
01 Trần Nhật Lệ 01 A100 Quạt máy
02 Lê Thị Nhàn 01 A102 Tủ lạnh
03 Hoàng Lê Minh 03 A120 Máy giặt
04 Bùi Ngọc Quang 05 A230 Ti vi

TenKH TenSP
SELECT TenKH,
TenSP Trần Nhật Lệ Quạt máy
FROM Khachhang Trần Nhật Lệ Tủ lạnh
FULL JOIN hoadon
ON Khachhang.MaKH Lê Thị Nhàn NULL
= Hoadon.MaKH Hoàng Lê Minh Máy giặt
Bùi Ngọc Quang NULL
NULL Tivi
THỨ TỰ XỬ LÝ CỦA LỆNH SELECT

SELECT lop, count (tensv)


FROM sv
[WHERE…]
GROUP BY lop
HAVING count (tensv)>=3
Bài tập

1. Cho danh sách họ tên của nhân viên sinh vào tháng 3 hoặc tháng 10
2. Cho danh sách khách hàng có địa chỉ không thuộc quận Đống Đa
hoặc quận Hoàng Mai
3. Tính tổng số tiền của từng hóa đơn xuất
5. Tổng tiền mỗi khách hàng đã mua hàng
6. Liệt kê danh sách các khách hàng đã mua trên 10 triệu
7. Trong năm 2014, mat hang nao chỉ mua đc đúng 1 lần
8. Cho danh sách các mặt hàng đã được mua trong năm 2014 và tổng
tiền trên 10 triệu
TRUY VẤN CON

▪ Là thực hiện lồng ghép nhiều câu lệnh SELECT với


nhau
▪ VD: Đưa ra những nhân viên có lương cao hơn lương
của nhân viên A
Truy vấn chính
Những nhân viên nào có lương lớn hơn
lương của nhân viên A

Truy vấn con


Mức lương của nhân viên A là bao nhiêu
TRUY VẤN CON

Cú pháp Lưu ý:
SELECT <Ds các cột> - Truy vấn con thi hành môt lần trước
truy vấn chính (truy vấn cha).
FROM <Ds các bảng>
- Kết quả trả về từ truy vấn con được sử
WHERE <biểu thức> Toán tử ( dụng trong câu truy vấn chính.
- Truy vấn con phải đặt trong đóng cặp
SELECT <Ds các cột> đóng mở ngoặc đơn
FROM <Ds các bảng> - Sử dụng các toán tử một dòng với các
truy vấn con trả về một dòng và sử
WHERE <điều kiện>) dụng các toán tử nhiều dòng với các
truy vấn con trả về nhiều dòng.
TRUY VẤN CON

➢ Toán tử so sánh 1 dòng:


o = Bằng
o > Lớn hơn
o >= Lớn hơn hoặc bằng
o < Nhỏ hơn
o <= Nhỏ hơn học bằng
o <> Không bằng
➢ Toán tử so sánh nhiều dòng:
o IN, NOT IN : Bằng, không bằng một trong các giá trị
o ANY: Chỉ cần thỏa một trong các giá trị trả về bởi truy
vấn con
o ALL: Phải thỏa tất cả các giá trị trả về bởi truy vấn con
- EXISTS, NOT EXISTS: Kiểm tra sự tồn tại
TRUY VẤN CON

➢ VD1: Đưa ra những nhân viên có lương cao hơn lương của
nhân viên A (manhanvien = nv1)
? Truy vấn con trả về 1 hay nhiều dòng
TRUY VẤN CON

➢ VD2: Đưa ra mức lương thấp nhất của các phòng với đk: mức
lương thấp nhất của phòng đó phải lớn hơn mức lương thấp nhất
của phòng có mã ‘P1’
➢ (Có bảng nhanvien, các trường: mucluong, maphong

Select maphong,min(mucluong)
From nhanvien
Group by maphong
Having min(mucluong)> (select min(mucluong)
from nhanvien
where maphong = ‘P1’)
TRUY VẤN CON

➢ VD3: Câu lệnh sau sai ở đâu:

Select manv, tennv


From nhanvien
Where mucluong = (select min(mucluong)
from nhanvien
Group by maphong)
TRUY VẤN CON

➢ VD4: Tìm tên những mặt hàng có số lượng nhỏ hơn mọi số
lượng của mặt hàng có maloaihang= 3

select tenhang,soluong,maloaihang
from mathang
where soluong< All (select soluong
from mathang
where maloaihang=3)
TRUY VẤN CON

➢ VD4: Tìm tên những mặt hàng có số lượng nhỏ hơn mọi số
lượng của mặt hàng có maloaihang= 3
➢ Cách 1:

➢ Cách 2
select tenhang,soluong,maloaihang
from mathang
where soluong< (select min(soluong)
from mathang
where maloaihang=3)
Bài tập có truy vấn con

1. Những mặt hàng chưa từng đc khách hàng đặt


2. Những nhan viên có lương cơ bản cao nhất
3. ĐƯa ra nhân viên có tuổi cao nhất.
4. Đưa ra mat hang có số lượng lớn hơn số lượng trung bình trong loại
hàng của mặt hàng đó
CÁC PHÉP TOÁN TẬP HỢP

➢ Gồm:
• UNION: Hợp
• INTERSECT: Giao
• EXCEPT: Trừ
➢ Chú ý: Các trường trong select phải giống nhau mới thực
hiện được
CÁC PHÉP TOÁN TẬP HỢP

VD 1: Cho danh sách mã sinh viên của


những sinh viên không có bất kỳ một điểm
thi của một môn học nào.
Bảng Bảng
Sinhvien Ketqua

Cách 1
Cách 2
select MaSV
from sv select masv, TenSV
except from sv
select masv where masv not in(select masv
from KetQua from KetQua
where Diem is not null where diem is not null)
CÁC PHÉP TOÁN TẬP HỢP

VD 1: Đưa ra những sinh viên có đủ điểm


thi 2 môn có maMH =5 và 6

Bảng
Ketqua
CÁC PHÉP TOÁN TẬP HỢP

VD 1: Đưa ra những sinh viên có đủ điểm thi 2 môn có


maMH =5 và 6
Đưa ra cả Tên sinh viên
NỘI DUNG ÔN TẬP

I. Ngôn ngữ định nghĩa dữ liệu


- Tạo bảng (Creat table…)
- Sửa đổi cấu trúc bảng (Alter table..)
II. Ngôn ngữ thao tác dữ liệu
- Thêm dữ liệu (insert into .. Values…)
- Sửa dữ liệu (update…set…where…)
- Truy xuất:
- Select
- From
- Where
- Group by
- Having
- Order by
- Truy vấn con
BÀI TẬP

▪ Dựa vào CSDL trang ..,viết câu lệnh truy vấn đầy đủ thực hiện các yêu cầu sau:
1. Cho danh sách họ tên của nhân viên sinh vào tháng 3 hoặc tháng 10
2. Đưa ra nhân viên có tuổi cao nhất hiện nay
3. Cho danh sách các tên hàng không bán được mặt hàng nào
4. Liệt kê danh sách các khách hàng đã mua trên 10 triệu
5. Cho danh sách các mặt hàng đã được mua trong năm 2014 và tổng tiền trên 10triệu
6. Tính tổng số tiền đã bán được của từng hóa đơn
7. Tính tổng số lượng và tổng số tiền đã bán được của từng mặt hàng
8. Tính tổng số lượng và tổng số tiền đã bán được của từng mặt hàng trong năm 2013
9. Tính tổng số tiền đã mua hàng của từng khách hàng, thống kê dựa vào tên khách
hàng
10. Cho biết tên mặt hàng đã bán với số lượng nhiều nhất
11. (Đối với những nhân viên đã lập hóa đơn,) thống kê xem mỗi nhân viên đó được
bao nhiêu hóa đơn

You might also like