SlideShare a Scribd company logo
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
TRƯỜNG ĐH CÔNG NGHỆ GIAO THÔNG VẬN TẢI
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
▪ <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…
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>]
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, With ties
- Distinct : loại bỏ các dòng dữ liệu trùng
- Top n : lấy n dòng đầu tiên
- Top n with ties: lấy tất cả dòng có giá trị bằng giá trị top n
(Thường kết hợp với order by)
 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’ HO TEN
Nguyen Thanh Tung
Nguyen Manh Hung
333445555
987987987
MANV
SELECT MANV, LUONG*1.1 AS ‘LUONG10%’
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
LUONG10%
33000
27500
333445555
987987987
MANV
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)
▪ Kết quả:
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
Tổng lương Lương cao nhất Lương thấp nhất Lương trung bình
12.000.000 3.000.000
2.500.000
4.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
▪ Cú pháp
- 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
SELECT <DS cột gom nhóm>, <Hàm tính toán>
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>
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
where
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. ĐƯa ra tên mặt hàng của loại hàng 1 hoặc 2
2. Đếm số lượng của mỗi loại hàng
3. Đưa ra loại hàng có giá hàng < 2 triệu và có số
mã hàng >3
4. 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
ASC (ASCending): tăng (mặc định)
DESC (DESCending): giảm
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]
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:
▪ → Đưa ra tên các mặt hàng của đơn hàng có sohoadon=2 trong bảng
ChiTietDatHang
ChiTietDatHang MatHang
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
→ Đưa ra Sohoadon, mahang và tenhang trong bảng ChiTietHoaDon
C1:
Select sohoadon,mh.mahang,tenhang
from chitietdathang ct,mathang mh
where ct.mahang=mh.mahang and sohoadon=2
C2:
select sohoadon,mh.mahang,tenhang
from chitietdathang ct inner join mathang mh
on ct.mahang= mh.mahang
where sohoadon = 2
ChiTietDatHang MatHang
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
MaKH TenKH
01 Trần Nhật Lệ
02 Lê Thị Nhàn
03 Hoàng Lê Minh
04 Bùi Ngọc Quang
HoaDon
MaKH MaSP TenSP
01 A100 Quạt máy
01 A102 Tủ lạnh
03 A120 Máy giặt
05 A230 Ti vi
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
SELECT TenKH, TenSP
FROM Khachhang LEFT JOIN hoadon
ON Khachhang.MaKH = Hoadon.MaKH
RIGHT JOIN
KhachHang
MaKH TenKH
01 Trần Nhật Lệ
02 Lê Thị Nhàn
03 Hoàng Lê Minh
04 Bùi Ngọc Quang
HoaDon
MaKH MaSP TenSP
01 A100 Quạt máy
01 A102 Tủ lạnh
03 A120 Máy giặt
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
MaKH TenKH
01 Trần Nhật Lệ
02 Lê Thị Nhàn
03 Hoàng Lê Minh
04 Bùi Ngọc Quang
HoaDon
MaKH MaSP TenSP
01 A100 Quạt máy
01 A102 Tủ lạnh
03 A120 Máy giặt
05 A230 Ti vi
SELECT TenKH,
TenSP
FROM Khachhang
FULL 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
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 (Đưa tên khách 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, tên mặt hàng nào chỉ được̉ mua đc đúng 1 lần
8. Cho danh sách các tên mặt hàng đã được mua trong năm 2014 và
tổng tiền trên 10 triệu
9. Đưa ra những nhân viên có cùng ngày tháng năm sinh
10. Đưa ra những khách hàng mua hàng với tổng tiền cao nhất.
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
Mức lương của nhân viên A là bao nhiêu
Truy vấn con
TRUY VẤN CON
SELECT <Ds các cột>
FROM <Ds các bảng>
WHERE <biểu thức> Toán tử (
SELECT <Ds các cột>
FROM <Ds các bảng>
WHERE <điều kiện>)
- Truy vấn con thi hành môt lần trước
truy vấn chính (truy vấn cha).
- Kết quả trả về từ truy vấn con được sử
dụng trong câu truy vấn chính.
- Truy vấn con phải đặt trong đóng cặp
đóng mở ngoặc đơn
- 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ử
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.
Cú pháp Lưu ý:
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< (select soluong
from mathang
where maloaihang=3)
All
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 mặt hàng 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 đó
5. Đưa ra những công ty có cung cấp loại hàng 2 và có số lượng mã hàng
>2
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
select MaSV
from sv
except
select masv
from KetQua
where Diem is not null
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
Sinhvien
Bảng
Ketqua
select masv, TenSV
from sv
where masv not in(select masv
from KetQua
where diem is not null)
Cách 1
Cách 2
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 chưa được bán lần 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

More Related Content

PPT
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
PDF
b34-dml-sql-190213084703.pdf
PPTX
Cơ sở dữ liệu SQL qua các vi du cu the.pptx
PPT
Ngon ngu truy van sql
PPT
PPT
Access: Chuong III Thiet ke truy van Query.ppt
PPT
Thiet Ke Co So Du Lieu2
PDF
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
b34-dml-sql-190213084703.pdf
Cơ sở dữ liệu SQL qua các vi du cu the.pptx
Ngon ngu truy van sql
Access: Chuong III Thiet ke truy van Query.ppt
Thiet Ke Co So Du Lieu2

Similar to B3-DML-SQL-HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU - DVG (20)

PPT
PPT
52695817 p0201-m03t-truy-van-du-lieu-query-truy-van-chon-select-query
PDF
Note4_ThucHanh.pdf
PDF
Co So du lieu chuong 4 truong Dai Hoc hcm
PDF
Bài 4.1 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
PPT
csdl - buoi7-8-9
PDF
Sql understanding
PPTX
ORACLE_ch2_SQL.pptx
PDF
Baigiangphanquery
PDF
Baigiangphanquery
PDF
csdl bai-thuchanh_02
PDF
BHTCNPM-Slide-CSDLLLLLL-CK1-2023-2024.pdf
PDF
Chuong 4 - SQL - University of Information Technology.pdf
PDF
UEB Chuong 3.SV hoc di hoc di hoc di di di
PPTX
Slide duyetgiang
PDF
Lý Thuyết SQL
PPT
02. baigiangquery
PDF
Giáo trình thực hành sql
PDF
Giao trinh thuc hanh sql
PDF
Giao trinh thuc hanh sql
52695817 p0201-m03t-truy-van-du-lieu-query-truy-van-chon-select-query
Note4_ThucHanh.pdf
Co So du lieu chuong 4 truong Dai Hoc hcm
Bài 4.1 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
csdl - buoi7-8-9
Sql understanding
ORACLE_ch2_SQL.pptx
Baigiangphanquery
Baigiangphanquery
csdl bai-thuchanh_02
BHTCNPM-Slide-CSDLLLLLL-CK1-2023-2024.pdf
Chuong 4 - SQL - University of Information Technology.pdf
UEB Chuong 3.SV hoc di hoc di hoc di di di
Slide duyetgiang
Lý Thuyết SQL
02. baigiangquery
Giáo trình thực hành sql
Giao trinh thuc hanh sql
Giao trinh thuc hanh sql
Ad

Recently uploaded (6)

PPTX
bài thuyết trình thi công cầu elearning 3.pptx
PDF
Bài giảng - Phat Trien UD Tren Linux_Final_14092023.pdf
DOCX
GIẢI PHÁP BẢO MẬT THÔNG TIN LOGISTICS CHO DOANH NGHIỆP VIETTEL POST TRONG KỶ ...
DOCX
Truyền Giá Trị Và Tham Chiếu trong Java | Các Cách Truyền Dữ Liệu vào Phương ...
PPTX
thi công cầu thuyết trình elearning 2.pptx
DOCX
Đệ Quy (Recursion) trong Java | Giải thích và Ứng dụng
bài thuyết trình thi công cầu elearning 3.pptx
Bài giảng - Phat Trien UD Tren Linux_Final_14092023.pdf
GIẢI PHÁP BẢO MẬT THÔNG TIN LOGISTICS CHO DOANH NGHIỆP VIETTEL POST TRONG KỶ ...
Truyền Giá Trị Và Tham Chiếu trong Java | Các Cách Truyền Dữ Liệu vào Phương ...
thi công cầu thuyết trình elearning 2.pptx
Đệ Quy (Recursion) trong Java | Giải thích và Ứng dụng
Ad

B3-DML-SQL-HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU - DVG

  • 1. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU TRƯỜNG ĐH CÔNG NGHỆ GIAO THÔNG VẬN TẢI Giảng viên: Nguyễn Thị Kim Huệ 1
  • 2. PHẦN 3: NGÔN NGỮ THAO TÁC DỮ LIỆU (Data Manaipulation language- DML) 2
  • 3. 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
  • 4. 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)
  • 5. 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>
  • 6. 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.
  • 7. 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ụ:
  • 8. 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ụ:
  • 9. 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],…];
  • 10. 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
  • 11. TRUY VẤN TRÊN MỘT BẢNG ▪ A. Truy vấn đơn giả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… 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>]
  • 12. 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*/
  • 13. 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 %'
  • 14. 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.
  • 15. 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
  • 16. 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, With ties - Distinct : loại bỏ các dòng dữ liệu trùng - Top n : lấy n dòng đầu tiên - Top n with ties: lấy tất cả dòng có giá trị bằng giá trị top n (Thường kết hợp với order by)  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
  • 17. 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
  • 18. 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’ HO TEN Nguyen Thanh Tung Nguyen Manh Hung 333445555 987987987 MANV SELECT MANV, LUONG*1.1 AS ‘LUONG10%’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ LUONG10% 33000 27500 333445555 987987987 MANV
  • 19. 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
  • 20. 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) ▪ Kết quả: 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 Tổng lương Lương cao nhất Lương thấp nhất Lương trung bình 12.000.000 3.000.000 2.500.000 4.000.000
  • 21. 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
  • 22. 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 ▪ Cú pháp - 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 SELECT <DS cột gom nhóm>, <Hàm tính toán> 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>
  • 23. 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 where group by lop Having count (tensv)>=3
  • 24. 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.
  • 25. 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
  • 26. Bài tập 1. ĐƯa ra tên mặt hàng của loại hàng 1 hoặc 2 2. Đếm số lượng của mỗi loại hàng 3. Đưa ra loại hàng có giá hàng < 2 triệu và có số mã hàng >3 4. Cho biết tổng số lượng hàng đã bán theo từng mã hàng.
  • 27. 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 ASC (ASCending): tăng (mặc định) DESC (DESCending): giảm 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]
  • 28. 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
  • 29. 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: ▪ → Đưa ra tên các mặt hàng của đơn hàng có sohoadon=2 trong bảng ChiTietDatHang ChiTietDatHang MatHang
  • 30. 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>
  • 31. TRUY VẤN TRÊN NHIỀU BẢNG → Đưa ra Sohoadon, mahang và tenhang trong bảng ChiTietHoaDon C1: Select sohoadon,mh.mahang,tenhang from chitietdathang ct,mathang mh where ct.mahang=mh.mahang and sohoadon=2 C2: select sohoadon,mh.mahang,tenhang from chitietdathang ct inner join mathang mh on ct.mahang= mh.mahang where sohoadon = 2 ChiTietDatHang MatHang
  • 32. 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.
  • 33. LEFT JOIN KhachHang MaKH TenKH 01 Trần Nhật Lệ 02 Lê Thị Nhàn 03 Hoàng Lê Minh 04 Bùi Ngọc Quang HoaDon MaKH MaSP TenSP 01 A100 Quạt máy 01 A102 Tủ lạnh 03 A120 Máy giặt 05 A230 Ti vi 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 SELECT TenKH, TenSP FROM Khachhang LEFT JOIN hoadon ON Khachhang.MaKH = Hoadon.MaKH
  • 34. RIGHT JOIN KhachHang MaKH TenKH 01 Trần Nhật Lệ 02 Lê Thị Nhàn 03 Hoàng Lê Minh 04 Bùi Ngọc Quang HoaDon MaKH MaSP TenSP 01 A100 Quạt máy 01 A102 Tủ lạnh 03 A120 Máy giặt 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
  • 35. FULL JOIN KhachHang MaKH TenKH 01 Trần Nhật Lệ 02 Lê Thị Nhàn 03 Hoàng Lê Minh 04 Bùi Ngọc Quang HoaDon MaKH MaSP TenSP 01 A100 Quạt máy 01 A102 Tủ lạnh 03 A120 Máy giặt 05 A230 Ti vi SELECT TenKH, TenSP FROM Khachhang FULL 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 NULL Tivi
  • 36. THỨ TỰ XỬ LÝ CỦA LỆNH SELECT SELECT lop, count (tensv) FROM sv [WHERE…] GROUP BY lop HAVING count (tensv)>=3
  • 37. 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 (Đưa tên khách 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, tên mặt hàng nào chỉ được̉ mua đc đúng 1 lần 8. Cho danh sách các tên mặt hàng đã được mua trong năm 2014 và tổng tiền trên 10 triệu 9. Đưa ra những nhân viên có cùng ngày tháng năm sinh 10. Đưa ra những khách hàng mua hàng với tổng tiền cao nhất.
  • 38. 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 Mức lương của nhân viên A là bao nhiêu Truy vấn con
  • 39. TRUY VẤN CON SELECT <Ds các cột> FROM <Ds các bảng> WHERE <biểu thức> Toán tử ( SELECT <Ds các cột> FROM <Ds các bảng> WHERE <điều kiện>) - Truy vấn con thi hành môt lần trước truy vấn chính (truy vấn cha). - Kết quả trả về từ truy vấn con được sử dụng trong câu truy vấn chính. - Truy vấn con phải đặt trong đóng cặp đóng mở ngoặc đơn - 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ử 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. Cú pháp Lưu ý:
  • 40. 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
  • 41. 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
  • 42. 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’)
  • 43. 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)
  • 44. 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< (select soluong from mathang where maloaihang=3) All
  • 45. 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)
  • 46. 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 mặt hàng 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 đó 5. Đưa ra những công ty có cung cấp loại hàng 2 và có số lượng mã hàng >2
  • 47. 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
  • 48. CÁC PHÉP TOÁN TẬP HỢP select MaSV from sv except select masv from KetQua where Diem is not null 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 Sinhvien Bảng Ketqua select masv, TenSV from sv where masv not in(select masv from KetQua where diem is not null) Cách 1 Cách 2
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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 chưa được bán lần 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