Dùng câu lệnh “delete from ” để xoá các dữ liệu thoả mãn một điều kiện mong muốn
 Cú pháp:
delete from tên-quan-hệ
[where điều-kiện];
 Mệnh đề where tương tự trong câu lệnh select
 VD:
 delete from Student where regdate > '2000-01-01';
 delete from Book where 
 Xoá toàn bộ dữ liệu của quan hệ:
 delete from quan-hệ;
 truncate quan-hệ;
                
              
                                            
                                
            
 
            
                 19 trang
19 trang | 
Chia sẻ: vietpd | Lượt xem: 1782 | Lượt tải: 0 
              
            Bạn đang xem nội dung tài liệu Bài giảng SQL (Structured Query Language) phần 2, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
SQL 
(Structured Query Language) 
(tiếp theo) 
1 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Xoá dữ liệu 
 Dùng câu lệnh “delete from…” để xoá các dữ liệu thoả 
mãn một điều kiện mong muốn 
 Cú pháp: 
delete from tên-quan-hệ 
[where điều-kiện]; 
 Mệnh đề where tương tự trong câu lệnh select 
 VD: 
 delete from Student where regdate > '2000-01-01'; 
 delete from Book where 
 Xoá toàn bộ dữ liệu của quan hệ: 
 delete from quan-hệ; 
 truncate quan-hệ; 
2 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Sửa đổi dữ liệu 
 Dùng câu lệnh “update …” để cập nhật giá trị của các 
thuộc tính trong một quan hệ bằng giá trị mới thoả mãn 
một điều kiện mong muốn 
 Cú pháp: 
update tên-quan-hệ 
set thuộc-tính = giá-trị,... 
where điều-kiện; 
 VD: 
 update Student set class = 'C‘ 
 where name = 'Bill Gates'; 
 update Book set borrowed = 1, date = now() 
 where id = 1234; 
3 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Số học 
 Các phép toán: +, -, *, /, % 
 Hàm: abs(), sqrt(), exp(), ln(), power(), 
rand(),… 
 Ví dụ: 
 select sqrt(5) + power(40, 5); 
 update Product set price = price * (1 + ln(2)) 
 where category = 'laptop'; 
4 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Logic 
 Các phép toán: and, or, not 
 So sánh: >, =, , !=, between … and 
… 
 Ví dụ: 
 select * from Product 
 where price >= 50 and count < 10; 
 So sánh với null: dùng “is null” và “is not null” 
 select id from Student 
 where phone is not null; 
 Tập hợp: in(…) 
 select id from Student 
 where class in ('A', 'B'); 
5 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Làm việc với ngày tháng 
 Các kiểu dữ liệu: 
 date, time, datetime, timestamp 
 Thời gian hiện tại: 
 curdate(), curtime(), now() 
 Cộng trừ thời gian: 
 date_add(), time_add() 
 date_sub(), time_sub() 
 Trích các tham số: 
 year(), month(), day(), week(), hour(), minute(), 
second() 
6 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Làm việc với kiểu chuỗi 
 So sánh: =, !=, >, =, <= 
 Một số hàm: lower(s), upper(s), concat(s1, 
s2), locate(s1, s2), substring(s, p, n),… 
 Toán tử like: so sánh chuỗi theo khuôn dạng sử 
dụng 
 %: đại diện cho một chuỗi bất kỳ 
 _: đại diện cho một ký tự bất kỳ 
 VD: 
 select * from Student where name like 'Bill%'; 
 select * from Word where title like '__%tion'; 
7 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Gộp nhóm 
 Câu hỏi: tính điểm trung bình của học sinh có id = 10 
 select avg(mark) from Mark where std = 10; 
 Câu hỏi: tính điểm trung bình của từng học sinh 
 select std, avg(mark) from Mark group by std; 
 Các hàm gộp: 
 avg(): giá trị trung bình 
 min(): giá trị min 
 max(): giá trị max 
 sum(): tổng 
 count(): số lượng 
 Ví dụ khác: danh sách sách trong thư viện kèm theo số 
lượng 
 select title, count(*) from Book group by title; 
8 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Gộp nhóm: điều kiện trên nhóm 
 Trong câu lệnh có gộp nhóm, “where…” là điều kiện 
đối với từng phần tử, còn “having…” là điều kiện với 
nhóm 
 VD: 
 select s.id, s.name, avg(m.mark) 
 from Mark m, Student s 
 where m.std = s.id and s.class = 'B' 
 group by s.id 
 having max(m.mark) >= 8; 
 Danh sách các sinh viên lớp B có điểm trung bình >= 8 
9 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Gộp kết quả 
 Phép hợp trong SQL được thực hiện bằng cú pháp: 
select … union select … 
 Chú ý: 
 Kết quả các phép select phải tương thích với nhau 
 Có thể thực hiện hợp hai hoặc nhiều phép select với nhau 
 Có thể dùng ngoặc (…) để cho rõ ràng 
 Các kết quả trùng sẽ bị loại bỏ, nếu không muốn thì dùng “union 
all” 
 Ví dụ: 
 select name, dob from Student 
 where class = 'B' 
 union ( 
select name, dob from Teacher 
where city = 'Hanoi'); 
10 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Giao và loại trừ kết quả 
 Tương tự như phép gộp, nhưng dùng “intersect” và 
“except” thay cho “union” 
 Ví dụ: 
 select id, name from Employee 
 where gender = 'male' 
 intersect ( 
select id, name from Employee 
where dob < '1980-01-01' 
except ( 
select id, name from Employee 
where level = 5 )); 
 Chú ý: 
 Trong MySQL không hỗ trợ “intersect” và “except”, mà phải 
dùng các câu lệnh lồng nhau 
 MSSQL dùng “minus” thay vì “except” 
11 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Câu lệnh lồng nhau (nested queries) 
 SQL cho phép sử dụng các câu lệnh con 
(subqueries) để tăng tính linh hoạt trong truy vấn 
 Ví dụ: liệt kê các bài hát (quan hệ Song) thuộc các 
thể loại được sáng tác bởi các tác giả (quan hệ 
Author) sinh trước năm 1950 
 select * from Song 
 where author_id in ( 
select id from Author 
where dob < '1950-01-01'); 
12 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Toán tử “in” 
 Dùng để kiểm tra tính thuộc tập hợp 
 Phủ định dùng “not in…” 
 Có thể được dùng cho bộ giá trị 
 select * from Song 
 where (author, category) in 
( (5, 10), (4, 15), (4, 19) ); 
 select * from Author 
 where (first_name, last_name) in 
(select firstn, lastn from Nominated) 
13 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Toán tử exists 
 Dùng để kiểm tra một tập hợp có rỗng hay không 
 Phủ định dùng “not exists…” 
 Ví dụ: liệt kê các khách hàng chưa mua máy tính ở cửa 
hàng 
 select * from Customer 
where not exists ( 
select id from Invoice 
where customer = Customer.id); 
 Tương tự: 
 select * from Customer 
where count ( 
select id from Invoice 
where customer = Customer.id) > 0; 
14 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Liên kết giữa các thuộc tính với câu lệnh con 
 Các thuộc tính của câu lệnh mẹ có thể được sử 
dụng trong các câu lệnh con 
 VD: 
 select customer from Borrower 
where exists ( 
select * from Depositor 
where Depositor.customer = Borrower.customer); 
15 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
So sánh tập hợp 
 Câu hỏi: liệt kê các sinh viên của lớp A có điểm lớn 
hơn ít nhất một sinh viên của lớp B 
 select * from Student 
where class = 'A' and mark > some ( 
select mark from Student where class = 'B'); 
 Các kiểu so sánh tập hợp: 
 some / any: có ít nhất một phần tử thoả mãn 
 all: so với tất cả 
16 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Câu lệnh con trong mệnh đề from 
 Câu lệnh con có thể được sử dụng trong mệnh đề from 
 Kết quả của câu lệnh con có thể được đổi tên để dễ 
tham chiếu 
 Ví dụ: 
 select branch-name, avg-balance 
from ( 
select branch-name, avg(balance) from account 
group by branch-name ) 
as branch-avg(branch-name, avg-balance) 
where avg-balance > 1200; 
17 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Biến 
 SQL cho phép tạo các biến để lưu tạm thời các giá trị. 
Các biến được dùng theo cú pháp: @tên 
 Định nghĩa / thay đổi giá trị của biến: 
 set @VAR = VALUE; 
 select @VAR := VALUE; 
 Ví dụ: 
 set @std = 20; 
select @stddob:=dob 
from Student where id=@std; 
select @stddob; 
18 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Bài tập 
Cho các quan hệ SinhVien, GiaoVien, DangKyHoc, Day, Lop, MonHoc. Viết 
câu truy vấn cho các yêu cầu sau: 
1. Liệt kê các sinh viên có đăng ký các môn X, Y 
2. Liệt kê các giáo viên dạy từ 5 lớp trở lên 
3. Liệt kê các giáo viên dạy ít nhất một lớp có 30 sinh viên trở lên 
4. Liệt kê các môn học của giáo viên G mà sinh viên A đăng ký 
Cho các quan hệ Sach, TacGia, NguoiDoc, Muon. Viết câu truy vấn cho các 
yêu cầu sau: 
5. Liệt kê các sách đã được mượn nhiều hơn 10 lần trong năm 2011 
6. Liệt kê những người đọc đã mượn ít nhất 10 đầu sách khác nhau 
7. Liệt kê các sách đang được mượn bởi một trong các người đọc ở câu 
trên 
8. Liệt kê các sách của Stephen King hiện tại không có ai đang mượn 
19 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội