Tài liệu môn Hệ quản Trị CSDL
Trang 1CHƯƠNG 2
SQL (Structured Query Language)
Trang 2Giới thiệu chung
Là ngôn ngữ chuẩn cho các CSDL quan hệ
Chuẩn ANSI SQL được công bố vào năm 1989,
Trang 3DDL (Data Definition Language)
DDL là ngôn ngữ định nghĩa dữ liệu gồm các
lệnh
CREATE/ALTER/DROP DATABASE
CREATE/ALTER/DROP TABLE
Trang 4DML (Data Manipulation Language)
DML là ngôn ngữ thao tác dữ liệu
Gồm các lệnh:
SELECT
INSERT, UPDATE, DELETE, TRUNCATE
Trang 5DCL (Data Control Language)
DCL là ngôn ngữ điều khiển dữ liệu
Gồm các lệnh
GRANT/REVOKE/ADD
COMMIT/ROLLBACK
Trang 6Truy vấn dữ liệu (Data query)
Cú pháp chung của lệnh SELECT
Trang 7Câu lệnh truy vấn đơn giản
Ví dụ: liệt kê tất cả giáo sư khoa IT
Trang 8Chiến lược chung để đánh giá câu truy vấn đơn giản
Bước 1: mệnh đề FROM được đánh giá
trước Æ tạo ra 1 bảng là kết quả tích
Cartesian của các bảng trong mệnh đề
FROM
Bước 2: mệnh đề WHERE được đánh giá
Æ Tạo ra 1 bảng mới từ bảng của bước 1
và chỉ chứa các hàng thỏa điều kiện
WHERE
Bước 3: mệnh đề SELECT được đánh giá
-Æ tạo ra 1 bảng mới từ bảng của bước 2
Trang 9Mệnh đề SELECT
Để đưa ra danh sách các cột cần xem
Cú pháp:
SELECT [ ALL | DISTINCT ][ TOP n [ PERCENT ]
[ WITH TIES ] ] < select_list >
Trang 10hiện thời các khách hàng đang sống
SELECT DISTINCT City , Region
FROM Customers
Trang 11Mệnh đề SELECT
TOP n [PERCENT]: chỉ có n hàng đầu tiên hay
n% của các hàng của bảng kết quả được xuất
WITH TIES: cho phép 1 số hàng được thêm vào bảng kết quả gốc nếu các hàng này có cùng giá trị trong cột ORDER BY với hàng cuối cùng của n hàng đầu tiên được xác định.
Ví dụ: liệt kê 3 hoá đơn có cước phí cao nhất
SELECT top 3 with ties OrderID, Freight FROM Orders
Order by Freight DESC
N ếu hàng thứ tư có cùng cước phí (freight) với hàng thứ ba trong bảng kết quả thì sao???
Trang 12Mệnh đề SELECT
Ví dụ 1:
SELECT OrderID, ProductID,
Amount = UnitPrice*Quantity* (1- Discount)
FROM [Order Details]
Trang 13Các hàm tập hợp (Aggregate function)
Tên hàm Ý nghĩa SUM Tính tổng các số MIN Trả về giá trị nhỏ nhất MAX Trả về giá trị lớn nhất AVG Tính giá trị trung bình COUNT Đếm số phần tử (not null)
Được dùng để tổng kết các giá trị của 1 cột hay 1
nhóm cột bên trong 1 bảng và cho kết quả là 1 giá trị đơn
Trang 14Ví dụ các hàm gộp trong lệnh select
SELECT sum (Freight) FROM dbo.Orders
Î Tính tổng cước phí chuyên chở của tất cả hóa đơn
SELECT count (OrderID) from dbo.Orders
Î Đếm số hoá đơn
SELECT SUM (UnitPrice*Quantity*(1-Discount)) FROM dbo.[Order Details]
Î Tính doanh số bán hàng
Trang 15WHERE Region = 'WA'
Dùng like , is null, is not null, between and ,
!=, >, <….
Trang 16ASC (ascending) : xếp theo thứ tự tăng
DESC (descending): xếp theo thứ tự giảm
Trang 17Nhóm dữ liệu trong bảng kết quả
Những mệnh đề dùng để nhóm dữ trong
bảng kết quả:
nhóm bằng cách dùng các hàm gộp
COMPUTE trong lệnh SELECT được dùng để phát ra các hàng tổng hợp bằng cách dùng hàm gộp Mệnh đề COMPUTE BY được dùng
để tổng hợp thêm các hàng kết quả theo cột
Trang 18 group_by_expression: biểu thức dùng để xác định cột được nhóm (tên cột)
Trang 20Ví dụ 2
SELECT Type, Advance = SUM (Advance)
FROM Titles
WHERE Type IN ('business', 'mod_cook', 'trad_cook')
GROUP BY ALL Type
Trang 21hay của mệnh đề GROUP BY
GROUP BY pub_id HAVING (AVG(price) > 10)
Trang 22Sử dụng WHERE và HAVING
Mệnh đề HAVING giống như mệnh đề WHERE
nhưng chỉ áp dụng cho cả nhóm trong khi mệnh
đề WHERE áp dụng cho từng hàng.
Một truy vấn có thể chứa cả mệnh đề WHERE và mệnh đề HAVING
Mệnh đề WHERE được áp dụng trước cho các
hàng trong bảng được truy vấn Chỉ những hàng nào thoả mãn điều kiện của mệnh đề WHERE mới được nhóm dữ liệu.
Sau đó mệnh đề HAVING sẽ được áp dụng cho các
Trang 23Ví dụ
SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
Trang 24SELECT INTO
Lệnh SELECT với mệnh đề INTO được dùng dể lưu trữ
kết quả truy vấn vào 1 bảng mới mà không cần phải
Trang 26Outer Join – Example
Relation loan
I Relation borrower
customer_name loan_number
Jones Smith
Jones Smith L-170L-230L-170L-230
3000 4000 1700
loan_number amount
L-170 L-230 L-260
branch_name
Downtown Redwood Perryridge
Trang 27Outer Join – Example
branch_name
Downtown Redwood
Jones Smith
null
Jones Smith
null
loan_number amount
L-170 L-230 L-260
L-170 L-230 L-260
3000 4000 1700
3000 4000 1700
customer_name
branch_name
Downtown Redwood Perryridge
Downtown Redwood Perryridge
I Left Outer Join
loan borrower
Trang 28Outer Join – Example
L-170 L-230 L-155
L-170 L-230 L-155
3000 4000
null
3000 4000
null
customer_name
Jones Smith Hayes
Jones Smith Hayes
branch_name
Downtown Redwood
null
Downtown Redwood
branch_name
Downtown Redwood
I Full Outer Join
loan borrower
I Right Outer Join
loan borrower
Trang 29Kết nối các bảng
Kết nối chỉ tồn tại trong thời gian truy vấn.
Kết nối không thay đổi dữ liệu trong các bảng của
JOIN Publishers p on t.Pub_Id=p.Pub_Id
WHERE Pub_Name='New Moon Books'
Trang 30Các cột tham gia kết nối
Nếu kết nối nhiều hơn 2 bảng thì kết nối 2 bảng trước, sau đó kết nối nhóm này với bảng thứ ba.
Trang 31Biểu thức đại số quan hệ tương đương
SELECT <select list>
FROM Rel1 JOIN Rel2 ON condition1 […,n]
Tương đương với
1
(Re Rel )
Trang 32Truy vấn con - Subqueries
Subquery là lệnh SELECT mà kết quả trả
về là 1 giá trị đơn (single value) hoặc tập giá trị và được đặt lồng vào bên trong các lệnh SELECT, INSERT, UPDATE, hay
DELETE, hay bên trong truy vấn con khác
Subquery có thể được dùng bất kỳ nơi nào
mà biểu thức được phép dùng
Subquery thực thi chậm hơn phép kết
Trang 33AS MaxUnitPrice
FROM Northwind.dbo.Orders AS Ord
Trang 35IN, ANY, ALL, EXISTS
WHERE expression [NOT] IN (subquery)
WHERE expression comparison_operator
[ANY | ALL] (subquery)
WHERE [NOT] EXISTS (subquery)
Trang 36Subqueries với toán tử IN
Kết quả của subquery được dùng với IN
(hay với NOT IN) thường là 1 danh sách
(list) chứa từ 0 đến nhiều giá trị
Trang 37Subquery với các toán tử so sánh
Các toán tử so sánh đơn giản (unmodified comparison operator)
=, < >, >, > =, <, < =
SELECT DISTINCT title FROM titles
WHERE price > (SELECT MIN(price)
FROM titles)
Trang 38Subquery với các toán tử so sánh
Subquery bắt đầu với toán tử so sánh
phức sẽ trả về 1 danh sách (list) của 0 hay nhiều giá trị và có thể bao gồm cả mệnh
Trang 39Subquery với các toán tử so sánh
>ALL có nghĩa lớn hơn mọi giá trị
>ANY có nghĩa lớn hơn ít nhất 1 giá trị
Vd: >ALL (1, 2, 3) lớn hơn 3
>ANY (1, 2, 3) lớn hơn 1
Ví dụ:
SELECT au_lname, au_fname
FROM authors WHERE city <> ALL (SELECT city FROM publishers)
Trang 40Ví dụ
Select Publisher_id=pub_id,
Name=pub_nameFrom publishers
where city = any (select city from authors)
Trang 41Insert, update, delete…
Create table newproducts (
Prodduct id int not null,CategoryID int null
UnitPrice float nullsupplier int null
)
Insert into newproducts (productid,
Productname) values (123, ‘ice tea’)
Trang 43 Update products set unitprice= unitprice*1.1
Update [order details]
set discount = discount + 0.05
where discount <>0 and productid=2
Update [order details]
set unitprice = (
select unitprice=unitprice*0.2 from products
where productid=2) where productid=1
Trang 44 Truncate table newproducts