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
Trang 1Bài 5: SQL – Phần 2
(Structured Query Language)
(tiếp theo)
Trang 2Xoá 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:
Xoá toàn bộ dữ liệu của quan hệ:
delete from quan-hệ;
truncate quan-hệ;
Trang 3Sử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:
where name = 'Bill Gates';
where id = 1234;
Trang 4Số học
Các phép toán: +, -, *, /, %
Hàm: abs(), sqrt(), exp(), ln(), power(),
rand(),…
Ví dụ:
where category = 'laptop';
Trang 5Logic
Các phép toán: and, or, not
So sánh: >, <, >=, <=, =, <>, !=, between … and
…
Ví dụ:
where price >= 50 and count < 10;
So sánh với null: dùng “is null” và “is not null”
Tập hợp: in(…)
Trang 6Là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:
adddate(), addtime()
subdate(), subtime()
Trích các tham số:
year(), month(), day(), week(), hour(), minute(), second()
Trang 7Là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
VD:
Trang 8Gộp nhóm
Câu hỏi: tính điểm trung bình của học sinh có id = 10
Câu hỏi: tính điểm trung bình của từng học sinh
Các hàm gộp:
avg(): giá trị trung bình
min(): giá trị min
max(): giá trị max
Ví dụ khác: danh sách sách trong thư viện kèm theo số lượng
Trang 9Gộ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:
from Mark m, Student s
where m.std = s.id and s.class = 'B'
group by s.id
having max(m.mark) >= 8;
Trang 10Gộp kết quả
Phép hợp trong SQL được thực hiện bằng cú pháp:
select … union select …
Chú ý:
all”
Ví dụ:
where class = 'B'
union (
where city = 'Hanoi');
Trang 11Giao 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ụ:
where gender = 'male'
intersect (
select id, name from Employee where dob < '1980-01-01'
except (
select id, name from Employee where level = 5 ));
Chú ý:
dùng các câu lệnh lồng nhau (dùng toán tử “in”)
Trang 12Câ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 id from Author where dob < '1950-01-01') ;
Trang 13Toá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ị
where (author, category) in
( (5, 10), (4, 15), (4, 19) );
where (first_name, last_name) in
(select firstn, lastn from Nominated)
Trang 14Toá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 id from Invoice where customer = Customer.id);
Tương tự:
select id from Invoice where customer = Customer.id) > 0;
Trang 15Liê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:
where exists (
select * from Depositor
Trang 16So 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 mark from Student where class = 'B');
Các kiểu so sánh tập hợp:
Trang 17Câ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ụ:
from (
select branch-name, avg(balance) from account group by branch-name )
as branch-avg(branch-name, avg-balance) where avg-balance > 1200;
Trang 18Biế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:
Ví dụ:
select @stddob:=dob
from Student where id=@std;
select @stddob;
Trang 19Bà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:
Cho các quan hệ Sach, TacGia, NguoiDoc, Muon Viết câu truy vấn cho các yêu cầu sau:
trên