Professional Documents
Culture Documents
HỆ CƠ SỞ DỮ LIỆU
1
PHẦN 3:
NGÔN NGỮ THAO TÁC DỮ LIỆU
(Data Manaipulation language- DML)
2
1. GIỚI THIỆ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
Ví dụ:
DELETE - Xóa dữ liệu
▪ 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
▪ 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
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
▪ VD 8.2: Cho thông tin của hai sinh viên đầu tiên trong danh sách
sinh viên
▪ 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
▪ Kết quả: Tổng lương Lương cao nhất Lương thấp nhất Lương trung bình
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
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
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
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
ChiTietDatHang MatHang
▪ 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
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
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
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
➢ 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
➢ 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
➢ 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
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
Bảng
Ketqua
CÁC PHÉP TOÁN TẬP HỢ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