Bài 6
TRUY XUẤT CSDL Ngôn ngữ thao tác dữ liệu – DMC và DCL
1
Accessing and Modifying Data
1. Truy xuất dữ liệu – Lệnh Select
Truy vấn đơn giản Truy vấn từ nhiều bảng Truy vấn con - SubQuery
2. Sửa chữa dữ liệu
Lệnh INSERT Lệnh UPDATE Lệnh DELETE
– – –
2
– – – – Các mệnh đề EXISTS, DISTINCT, COMPUTE BY
Cú pháp lệnh Select
SELECT [ALL | DISTINCT] [TOP n [WITH TIES]] select_list
[ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ]
ORDER BY : Sắp xếp
•
• WHERE: Điều kiện
GROUP BY: Nhóm
•
•
HAVING: Điều kiện nhóm
3
Ví dụ lệnh SELECT
Table names
Column names
Condition
4
Sort order
Truy vấn đơn giản
Chọn tất cả các cột trong một bảng
SELECT * FROM < tablename>
Syntax
SELECT * FROM Customers
5
Example
Truy vấn đơn giản
Chọn một vài cột trong một bảng
Syntax
SELECT
Example
6
SELECT Productid, productName FROM Products
Truy vấn đơn giản
Kết nối các cột thành một cột
Syntax
SELECT
Example
7
SELECT FirstName + „ „ + Lastname FROM Employees
Truy vấn đơn giản
Đặt tên cho cột mới
Syntax
SELECT
Example
„ +LastName AS
8
SELECT FirstName +‟ „EmployeeName' FROM Employees
Truy vấn đơn giản
Tạo cột tính toán
SELECT Orderid, Quantity*UnitPrice AS „Total' FROM [Order details]
9
Example
Truy vấn đơn giản
Loại bỏ những dòng trùng nhau Syntax
SELECT diadiem FROM DIADIEM_PHG
diadiem
TP HCM
HA NOI
TP HCM
SELECT DISTINCT
SELECT DISTINCT diadiem FROM
DIADIEM_PHG
Example
diadiem
TP HCM
10
HA NOI
SELECT DISTINCT Customerid FROM Orders
Truy vấn đơn giản
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
Syntax
SELECT TOP n [PERCENT]
Examples
11
SELECT TOP 3 Productid, Unitprice FROM [Order Details] SELECT TOP 4 PERCENT Productid FROM Products
Mệnh đề WHERE
12
• Chứa điều kiện lọc dữ liệu cần trả về
• Cú pháp: WHERE
Phép toán quan hệ - Relational Operators
Operator
Meaning
Greater Than
>
Equal To =
Less than <
>= Greater Than or Equal To
Less Than or Equal To <=
13
Not !
Phép toán Logical
Phép toán và AND
Example
14
SELECT Orderid, orderdate, customerid FROM Orders WHERE Month(Orderdate) = 7 AND Year(Orderdate)=1996
Phép toán Logical
OR operator
Example
15
SELECT * FROM Orders WHERE Customerid = „TOMSP‟ OR Customerid = „HANAR‟
Logical Operators (contd.)
NOT operator
SELECT * FROM Orders WHERE NOT Employeeid = 10
16
Example
Wildcard Characters
Wildcard _
Description Represents a single character
Example SELECT Meal_Code FROM Meal WHERE Meal_Code LIKE ‘C_’
Represents a string of any length
SELECT Meal_Code FROM Meal WHERE Meal_Code LIKE ‘CO_%’
%
single
[]
SELECT * FROM flight WHERE aircraft_code LIKE ‘9W0[1-2]’
[^]
SELECT * FROM flight WHERE aircraft_code LIKE ‘9W0[^1-2]’
character Represents a within the range enclosed in the brackets Represents any single character not within the range enclosed in the brackets
17
Các toán tử SQL
• LIKE: giống 1 chuỗi • IS NOT NULL: không phải giá trị rỗng • BETWEEN…AND: giữa 2 giá trị • IN: đạt giá trị trong 1 danh sách • ALL/ ANY (SOME): được dùng trong lệnh truy vấn con và kết
quả là nhiều dòng.
• EXIST: kiểm tra sự tồn tại của 1 dữ liệu trong nhiều dòng. 18 Các hàm SQL • Day(Biểu thức ngày): Trả về ngày
• Month(Biểu thức ngày): Trả về tháng
• Year(Biểu thức ngày): Trả về năm
• GetDate(): Trả về ngày giờ hệ thống
• Max(dãy giá trị): Trả về giá trị lớn nhất trong dãy
• Min(dãy giá trị): Trả về giá trị nhỏ nhất trong dãy
• Avg(dãy giá trị): Trả về giá trị trung bình của dãy
• Count(dãy giá trị): Đếm số dòng.
• Sum(dãy giá trị): Trả về tổng các giá trị trong dãy 19 19 So sánh Chuỗi • So sánh gần đúng sử dụng “like”
– Hai ký tự thay thế: „_‟ và „%‟ • Tìm tất cả các mã nhân viên có 3 ký tự cuoi cua dia chi la RD.
SELECT *
FROM EMPLOYEES
WHERE ADDRESS LIKE '%RD.'
Cho biết tên nhân viên sinh vào những năm 1960 SELECT LastName, FirstName, BirthDate
FROM EMPLOYEES
WHERE convert(char(8), BIRTHDATE,1) like '______6_' 20 tuple variable Các thuộc tính Trùng tên Biến bộ
• Cho biết hai nhân viên có cùng lương EMPLOYEES NV1, EMPLOYEES NV2 SELECT NV1.LASTNAME, NV2.LASTNAME,NV1.CITY
FROM
WHERE NV1.CITY = NV2.CITY • Có thể sử dụng biến bộ bất kỳ lúc nào để thuận tiện và dễ WHERE NV1.LASTNAME, NV2.LASTNAME,NV1.CITY
EMPLOYEES NV1, EMPLOYEES NV2
NV1.CITY <> NV2.CITY 21 đọc!
SELECT
FROM Truy vấn từ nhiều bảng & Where
(điều kiện kết nối) • Danh sách các hoá đơn gồm Mahd, tenkh SELECT
FROM
WHERE orderid, Orderid.Customerid, CompanyName
Orders, Customers
orders.customerid = Customers.customerid • Danh sách các hoá đơn do nhan viên có tên bắt dầu là D lập
SELECT Orders.Orderid, LastName +‟ „+FirstName as EmployeeName FROM
WHERE Employees, Orders
Employees.employeeid = Orders.Employeeid And LastName like „D%‟ • Danh sách các hoá đơn do nhan viên có country là USA lập Employees E, Orders O
E.employeeid =O.Employeeid And Country =„USA‟ 22 SELECT O.Orderid, LastName +‟ „+FirstName as EmployeeName
FROM
WHERE Sắp xếp - ORDER BY Clause Xác định thứ tự của bộ kết quả
Cú pháp
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n] ]
ASC (ascending) : xếp theo thứ tự tăng
DESC (descending): xếp theo thứ tự giảm 23 Nhó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ả: – GROUP BY: tổng hợp bảng kết quả theo nhóm bằng – COMPUTE và COMPUTE BY: mệnh đề 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 24 cách dùng các hàm gộp Mệnh đề GROUP BY • Cú pháp: [GROUP BY [ ALL ]group_by_expression [,...n] ALL bảng kết quả sẽ chứa tất cả các nhóm kể cả những nhóm
không thỏa mãn điều kiện lọc trong trong mệnh đề
WHERE, những nhóm không thoả điều kiện sẽ có giá trị
null. • group_by_expression: biểu thức dùng để xác định cột được 25 nhóm Mệnh đề GROUP BY • Ví dụ: SELECT Orderid, SUM(Quantity * UnitPrice)
AS „Total„ FROM [Order Details]
GROUP BY Orderid 26 SELECT Orderid, AVG(Quantity * UnitPrice)
AS „AVG TOTAL„ FROM [Order Details]
GROUP BY Orderid Mệnh đề GROUP BY • Ví dụ:
SELECT Orderid, MIN(Quantity * UnitPrice)
AS „MIN Total„ FROM [Order Details]
GROUP BY Orderid 27 SELECT Orderid, MAX(Quantity * UnitPrice)
AS „MAX Total„ FROM [Order Details]
GROUP BY Orderid Mệnh đề GROUP BY • Ví dụ: SELECT Count(Reportsto)
AS „Count Of Orders„ FROM [Orders] SELECT Customerid, Count(Orderid)
AS „Count Order of Customers„ FROM Orders
GROUP BY Customerid 28 SELECT Count(*)
AS „Count Of Orders„ FROM [Orders] Mệnh đề GROUP BY • Ví dụ: SELECT Productid, Sum(Quantity) As Total 29 FROM [Order Details]
WHERE Productid =2
GROUP BY Productid
SELECT Customerid, Count(Orderid)
AS „Count Order of Customers„ FROM Orders
WHERE Customerid like „%m‟
GROUP BY Customerid Mệnh đề GROUP BY
Ví dụ ('business', • SELECT Type, Advance = SUM (Advance) FROM
'mod_cook',
IN
Titles WHERE Type
'trad_cook') GROUP BY Type Advance
--------------------- 25125.0000
15000.0000
19000.0000 30 Type
------------
business
mod_cook
trad_cook
(3 row(s) affected) Mệnh đề GROUP BY Advance 25125.0000
15000.0000
NULL
NULL
19000.0000
NULL Type
------------
business
mod_cook
popular_comp
psychology
trad_cook
UNDECIDED
(6 row(s) affected) 31 Ví dụ 2
• SELECT Type, Advance = SUM (Advance) FROM Titles
WHERE Type IN ('business', 'mod_cook', 'trad_cook')
GROUP BY ALL Type
--------------------- GROUP BY và HAVING • Có thể hạn chế các nhóm trong bảng kết quả bằng mệnh đề HAVING. trong mệnh đề HAVING mới được áp dụng. • Chỉ sau khi dữ liệu đã được nhóm và tổng hợp , điều kiện • Không thể dùng 1 cột mà nó không tham gia vào hàm gộp của mệnh đề SELECT hay của mệnh đề GROUP BY. • SELECT pub_id, AVG(price) FROM titles GROUP 32 BY pub_id HAVING (AVG(price) > 10) Sử 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. 33 – 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
nhóm. Chỉ những nhóm thoả mãn điều kiện HAVING
mới được xuất ra bảng kết quả. Sử dụng WHERE và HAVING
Ví dụ SELECT titles.pub_id, AVG(titles.price) publishers.state = 'CA' 34 FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id WHERE
GROUP BY titles.pub_id
HAVING AVG(price) > 10 Sử dụng WHERE và HAVING Ví dụ 2 SELECT Productid, Sum(Quantity) As Total
FROM [Order Details]
GROUP BY Productid
HAVING Sum(Quantity)>=30 35 SELECT Customerid, Count(Orderid)
AS „Count Order of Customers„ FROM Orders
GROUP BY Customerid
HAVING Count(Orderid) <=5 Sử dụng Group với ROLLUP • Roll Up sẽ chèn thêm các dòng Total nằm trước các nhóm
mẫu tin được phân thành Group By SELECT Productid, Orderid, Sum(Quantity) As Total
FROM [Order Details]
WHERE Orderid <10250
GROUP BY Productid, Orderid
ORDER BY Productid, Orderid
SELECT Productid, Orderid, Sum(Quantity) As Total
FROM [Order Details]
WHERE Orderid <10250
GROUP BY Productid, Orderid
WITH ROLLUP
ORDER BY Productid, Orderid 36 Sử dụng Group với Cube Tương tự như Rollup nhưng thêm các dòng Total của mỗi
sự kết hợp có thể có giữa các cột 37 SELECT Productid, Orderid, Sum(Quantity) As Total
FROM [Order Details]
WHERE Orderid <10250
GROUP BY Productid, Orderid
WITH CUBE
ORDER BY Productid, Orderid CUBE and ROLLUP 38 Mệnh đề COMPUTE • Thường dùng để kiểm tra số liệu, dùng kèm với các hàm thống • COMPUTE…BY…: Có kết nhóm 1) SELECT c.CustomerID, o.OrderID, (od.quantity * od.unitprice) as 'total‘ FROM Orders o, [order details] od, Customers c AND o.OrderID =
'AN%‘ ORDER BY WHERE c.CustomerID = o.CustomerID
od.OrderID AND c.CustomerID LIKE
c.customerID COMPUTE SUM( od.quantity * od.unitprice) 2) SELECT c.CustomerID, o.OrderID, (od.quantity * od.unitprice) 'total‘ FROM Orders o, [order details] od, Customers c 39 WHERE c.CustomerID = o.CustomerID AND o.OrderID =
'AN%‘ ORDER BY
od.OrderID AND c.CustomerID LIKE
c.customerID COMPUTE SUM(od.quantity * od.unitprice) BY
c.CustomerID Mệnh đề COMPUTE SELECT Productid, Orderid, Sum(Quantity) As Total
FROM [Order Details]
ORDER BY Productid, Orderid
COMPUTE SUM(Quantity) By Productid
COMPUTE SUM(Quantity) 40 Mệnh đề JOIN-Kết nối nhiều bảng • Mệnh đề join dùng để khôi phục dữ liệu từ nhiều hơn 1 bảng
• Cú pháp SELECT column_name [,n..]
FROM table_name table_alias
[CROSS|INNER|[LEFT | RIGHT]OUTER] JOIN table_name table_alias [ON table_name.ref_column_name join_operator table_name.ref_column_name] 41 [WHERE search_condition] Kế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 cơ sở dữ • Nên tạo bí danh (alias) cho tên bảng để tránh gõ tên dài và liệu. làm truy vấn dễ đọc hơn SELECT t.Title_Id, t.Title, p.Pub_Id
from Titles t
JOIN Publishers p on t.Pub_Id=p.Pub_Id
WHERE Pub_Name='New Moon Books' 42 • Ví dụ Cá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. • Ví dụ 43 Các loại kết nối • Inner Join
• Outer Join
• Cross Join
• Equi Join
• Natural Join
• Self Join 44 Kết nối nội - Inner joins • Trong kết nối nội, dữ liệu từ nhiều bảng được hiển thị sau
khi so sánh giá trị trong 1 cột chung. Chỉ những hàng mà có
giá trị thoả mãn điều kiện kết nối trong cột chung đó mới
được hiển thị. 45 • Tích Cartesian: việc kết nối nhiều bảng mà không có điều
kiện kết nối trong mệnh đề ON sẽ tạo ra tích cartesian giữa 2
bảng • Ví dụ: SELECT t.title,t.price, p.pub_name, p.city, t.pubdate
from titles t join publishers p
on t.pub_id = p.pub_id Kết nối nội - Inner joins 46 SELECT Customers.CustomerID, CompanyName,
SELECT ProductName, od.OrderID, Quantity, UnitPrice, OrderID, OrderDate
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID 46 Quantity * UnitPrice AS [Money]
FROM Products AS p INNER JOIN [Order Details]
AS od ON p.ProductID = od.ProductID
INNER JOIN Orders As o
ON od.OrderID = o.OrderID
WHERE Month(OrderDate) = 7 Kết nối nội với toán tử lớn hơn • Có thể thực hiện kết nối 2 bảng với điều kiện kết nối dùng toán tử không bằng nhau. SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state FROM publishers p INNER JOIN authors a • Ví dụ: WHERE p.pub_name = 'New Moon Books' ORDER BY au_lname ASC, au_fname ASC 47 Kết nối ngoại - Outer joins • Kết nối ngoại được dùng để cho ra kết quả chứa tất cả các
hàng của 1 bảng và các hàng trùng nhau của bảng còn lại.
Những cột mà không có giá trị phù hợp sẽ được hiển thị
giá trị NULL. • Cú pháp 48 Kết nối trái - LEFT OUTER JOIN • Tất cả các hàng từ bảng bên trái trong mối kết nối giữa 2 bảng sẽ được hiển thị trong bảng kết quả. SELECT a.au_fname, a.au_lname, p.pub_name • Ví dụ: FROM authors a LEFT OUTER JOIN publishers p ON ORDER BY p.pub_name ASC, a.au_lname ASC, a.city = p.city 49 a.au_fname ASC Cross join • Cross join trả về mọi tổ hợp có thể có của tất cả các hàng trong các bảng kết nối. – Nếu không mệnh đề WHERE, cross join sẽ tạo ra tích • Cross join không có mệnh đề ON Cartesian – Nếu có mệnh đề WHERE, cross join sẽ thực hiện như 50 1 kết nối nội Kết nối chéo - Cross join • Ví dụ 1:
SELECT au_fname, au_lname, pub_name FROM authors CROSS JOIN publishers ORDER BY au_lname DESC Kết quả chứa 184 hàng (authors có 23 hàng và publishers có 8 hàng; 23 x 8 = 184 hàng). SELECT au_fname, au_lname, pub_name FROM authors
INNER JOIN publishers ON authors.city = publishers.city
ORDER BY au_lname DESC
51 • Ví dụ 2:
SELECT au_fname, au_lname, pub_name FROM authors
CROSS JOIN publishers WHERE authors.city = publishers.city
ORDER BY au_lname DESC Truy vấn tự kết nối (self-join) SELECT t1.StudID
FROM Transcript t1 JOIN Transcript t2
ON t1.CrsCode = t2.CrsCode AND
t1.StudID = t2.StudID 52 • Ví dụ: tìm tất cả sinh viên đã học ít nhất là 2 course Truy vấn tự kết nối (self-join) SELECT Customers.CustomerID, ON Customers.CustomerID = Orders.CustomerID CompanyName,
OrderID, OrderDate FROM Customers INNER JOIN
Orders SELECT ProductName, od.OrderID, Quantity, UnitPrice,
Quantity * UnitPrice AS [Money] FROM Products AS p
INNER JOIN [Order Details] AS od ON p.ProductID =
od.ProductID INNER JOIN Orders As o ON od.OrderID = o.OrderID 53 WHERE Month(OrderDate) = 7 54 Truy vấn con - Subqueries • Subquery là lệnh SELECT mà kết quả trả về là 1 giá trị
đơn (single value) 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 55 được phép dùng Truy vấn con - Subqueries A subquery is a SELECT statement inside
another SELECT statement. Parent Query SELECT WHERE Operator Subquery 56 (SELECT Truy vấn con - Subqueries • Ví dụ 1: MAX(OrdDet.UnitPrice) SELECT Ord.OrderID, Ord.OrderDate, (SELECT FROM Northwind.dbo.[Order Details] AS
OrdDet WHERE Ord.OrderID =OrdDet.OrderID) AS MaxUnitPrice FROM Northwind.dbo.Orders AS Ord 57 57 • Subquery có thể được dùng để khôi phục dữ liệu từ nhiều
bảng và có thể được dùng như 1 cách khác của join
(alternative to a join) Truy vấn con - Subqueries WHERE ProductName = 'Sir Rodney''s Scones') • Cách 1: dùng subquery.
SELECT ProductName FROM Products
WHERE UnitPrice = (SELECT UnitPrice FROM Products • Cách 2: dùng join
SELECT Prd1.ProductName FROM Products AS Prd1 JOIN ON (Prd1.UnitPrice = Prd2.UnitPrice)
WHERE Prd2.ProductName = 'Sir Rodney''s Scones' 58 Products AS Prd2 Truy vấn con - Subqueries • Subquery có thể được dùng theo 1 trong các dạng sau: – WHERE expression [NOT] IN (subquery) – WHERE expression comparison_operator [ANY | ALL] (subquery) 59 – WHERE [NOT] EXISTS (subquery) Subqueries 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ị. • Ví dụ:
SELECT pub_name FROM publishers WHERE pub_id IN
(SELECT pub_id FROM titles WHERE type = 'business') 60 • Dùng cách 2 với mệnh đề join??? Subquery với các toán tử so sánh • Các toán tử so sánh đơn giản (unmodified comparison operator) =, < >, >, > =, <, ! >, ! <, or < =
• Subquery bắt đầu với toán tử so sánh đơn giản và trả về 1 giá trị đơn (single value) SELECT DISTINCT title FROM titles WHERE price > 61 (SELECT MIN(price) FROM titles) Subquery trả về một giá trị Use Aggregrate Functions in Subquery as Max(), Min(), Avg(),… Khi một subquery được sử dụng trong mệnh đề
SELECT, nó trả về dữ liệu thay cho một cột.
Loại subquery này được gọi là scalar query bởi vì 62 SELECT ProductName, UnitPrice FROM Products WHERE CategoryID =1 and UnitPrice <
(SELECT AVG(Unitprice) FROM Products) Subquery trả về nhiều giá trị Sử dụng toán tử In, Not in, Any, all… Ví dụ WHERE ProductId
In (SELECT Productid FROM Products
WHERE CategoryID =1) 2) SELECT Ordeid, Productid, Quantity FROM [Order
details] WHERE ProductId =1 and quantity >=All
(SELECT Quantity FROM [Order Details] WHERE
CategoryID =1) 63 1) SELECT Ordeid FROM [Order details] Subquery trả về nhiều giá trị • Cho biết các sản phẩm có đơn giá cao nhất *
PRODUCTS
Unitprice >= ALL (SELECT unitprice FROM Products) SELECT
FROM
WHERE • Cho biết các sản phẩm có đơn vị tính có chữ Box và có đơn giá cao PRODUCTS
QuantityPerunit like „%box%‟ and
Unitprice >= ALL nhất
SELECT *
FROM
WHERE
(SELECT unitprice FROM Products) 64 Subquery với các toán tử so sánh WHERE SupplierID=1 and
UnitPrice < ( SELECT AVG(UnitPrice) FROM Products WHERE SupplierID=1 ) • Subquery trả về một giá trị
SELECT ProductName, UnitPrice FROM Products
• Subquery trả về một dãy giá trị
Select OrderID from [order details] Where ProductID IN (select ProductID
From Products
Where SupplierID=1) 65 Subquery với các toán tử so sánh From [order details] Where ProductID=1) 66 Select OrderID , productID, quantity from [order details]
Where ProductID =1 and
quantity >= all (select quantity
• Subquery dùng với toán tử EXISTS
Select * from Customers as mC where NOT EXISTS ( SELECT * from [Orders] as o
where o.customerid = mC.customerid ) Subquery với các toán tử so sánh • Toán tử so sánh phức (Modified Comparison operators)
là toán tử so sánh đơn giản có kèm theo các từ All, any
hay some (=toán tử s/sánh+ [All,Any,some]) 67 • 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 gia trị và có thể bao gồm
cả mệnh đề GROUP BY hay HAVING. Subquery 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 publishers) 68 • Ví dụ:
SELECT au_lname, au_fname
FROM authors WHERE city <> ALL (SELECT city FROM Subquery với các toán tử so sánh 69 Using EXISTS and NOT EXISTS EXISTS checks the existence of rows that the subquery returns The subquery does not return any data, instead it returns TRUE or FALSE 70 SELECT Orderid, Customerid FROM Orders WHERE EXISTS
(SELECT Customerid FROM Customers
WHERE City =„London‟) Using EXISTS and NOT EXISTS EXISTS checks the existence of rows that the subquery returns The subquery does not return any data, instead it returns TRUE or FALSE WHERE NOT EXISTS
(SELECT Customerid FROM Customers
WHERE City =„London‟) 71 SELECT Orderid, Customerid FROM Orders Nested Subqueries Nested subqueries are subqueries within other
subqueries (SELECT orderid FROM [Order details] where 72 SELECT customerid,ComPanyname FROM Customers
WHERE Customerid >=all
(SELECT Customerid from Orders
WHERE orderid>=all
Productid =11 )) Correlated Subqueries A subquery refers to the parent query
A subquery is re-evaluated for every iteration of the parent query city FROM 73 SELECT Customerid,CompanyName,
Customers
WHERE customerid IN
(SELECT customerid FROM Employees,orders
WHERE orders.employeeid = employees.employeeid and
Employees.city =Customers.city) Unions UNION loại bỏ các bản ghi trùng
lặp trước khi trả lại kết quả
UNION ALL giữ lại tất cả các bản
ghi từ hai tập ban đầu. Toán tử Union để kết nốt 2 câu lệnh Select
Cú pháp SELECT statement UNION [ALL] SELECT statement 74 SELECT c.City FROM Customers c
UNION
SELECT e.City FROM Employees e Lệnh SELECT INTO – Tạo bảng • Ta có thể tạo table mới dựa vào tập kết quả của câu lệnh Select.
Table mới có thể là table tạm hay là một table thực sự trong DB. • Cú pháp: SELECT *|ColumnNam1, ColumnName2,… INTO TableName FROM Tables WHERE Condition ORDER By SortFieldName GROUP BY FieldGroupName 75 Lệnh SELECT INTO – Tạo bảng 1) Tạo Table Tạm SELECT CompanyName as name, Phone INTO #Temp_Customer FROM Customers Xem kết quả 76 Select * Form #Temp_Customer Lệnh SELECT INTO – Tạo bảng Ví dụ 2 SELECT c.Customerid As Name, Orderid, OrderDate INTO Customer_Order FROM Customers as c INNER Join Orders As o WHERE Month(OrderDate) =7 77 ON c.Customerid =o.Customerid Lệnh SELECT INTO – Tạo bảng Ví dụ 3 : Tạo bảng dữ liệu từ DataBase khác USE SalesDB SELECT CompanyName As Name, Phone FROM NorthWind.dbo.Customers 78 INTO KhachHang Sửa chữa dữ liệu – The INSERT Statement
– The UPDATE Statement
– The DELETE Statement
– Modifying Data Using XML 79 Lệnh Insert • Thêm một hay nhiều dòng dữ liệu bào bảng hay một – Dữ liệu chèn phải đúng kiểu dữ liệu của cột.
– Không nhập giá trị Null vào cột Not Null.
– Tuân thủ đúng các toàn vẹn dữ liệu, bẫy lỗi.
– Chỉ định danh sách các giá trị ứng với các cột.
– Cột có thuộc tính Identity thì không cần chỉ định giá trị.
– Tại một thời điểm chỉ có thể chèn vào một bảng duy nhất. 80 view.
• Lưu ý: Lệnh INSERT • Cú pháp 1 INSERT • Ví dụ 1
INSERT Products (ProductID, ProductName) 81 VALUES (123, 'Ice Tea') Lệnh Insert INSERT 82 • Cú pháp 2
• Ví dụ 2
INSERT NewProducts (Od.ProductID, P.ProductName) SELECT OD.ProductID, ProductName
FROM Products as P INNER JOIN [Order Details]
AS Od ON P. ProductID = Od. ProductID
WHERE CategoryID<>2 Lệnh UPDATE • Thay đổi/cập nhật dữ liệu trong một bảng • Ví dụ WHERE Discount<>0 AND ProductId=2 UPDATE [Order Details]
SET UnitPrice= ( SELECT UnitPrice+ UnitPrice*0.2 FROM Products WHERE ProductId=2) WHERE ProductId=2 83 UPDATE [Order Details] SET
Discount=Discount+0.05 Lệnh DELETE • Xóa một hay nhiều dòng trong một bảng hay một truy • 84 vấn
DELETE Lệnh TRUNCATE TABLE • Lệnh TRUNCATE TABLE dùng để – Xóa toàn bộ dữ liệu trong một bảng
– Về chức năng hoàn toàn giống như câu lệnh DElete
– Nhanh hơn câu lệnh delete
– Không bật các bẫy lỗi trigger
TRUNCATE TABLE table_name • Ví dụ 85 TRUNCATE TABLE NewProducts sp_help Sp_help Customers 86 DROP TABLE 87 DROP TABLE Sanpham Default Object • Default objects offer another way of defining a default value for a column. Default objects, called
“defaults,” have been in SQL Server since the very
first version. Defaults are not really part of
declarative integrity because they are not part of
the table structure; they are actually part of the
database schema, which is the overall definition of
every database object. 88 Default Object • The CREATE DEFAULT Statement : sp_unbindefault object_name CREATE DEFAULT dvt AS ‘KG’ GO sp_bindefault ‘dvt’, ‘Products.QuantityPerUnit’ 89 Rules • Rules are a backward compatibility feature used to define • CREATE RULE ActiveDate AS @Date BETWEEN ‘01/01/70’ AND GETDATE() GO sp_bindrule ActiveDate, ‘Orders.OrderDate’ 90 Similar to the book indexes Allow the program to find data in a table without scanning the entire table
Provide fast access to data in a table
Enforce uniqueness on rows in a table 91 Guidelines for Creating Indexes • A column can be selected for indexing based on the following criteria:
– It is frequently searched
– It is used for sorting • Do not index the column in the following cases:
– Column contains few unique values
– Table is small 92 CREATE [UNIQUE] [CLUSTERED] [NONCLUSTERED] INDEX Index_name ON Table (Column_name) [WITH [PAD_INDEX] [FILLFACTOR = fillfactor] 93 [[,] DROP_EXISTING]] The two types of indexes are:
Clustered
Non-clustered 94 Determines the storage order of data in a table A table can only have one clustered index ON Orders (Customerid) 95 CREATE CLUSTERED INDEX Customerid_ndx Specifies a logical ordering for a table
A table can have up to 249 non-clustered indexes ON Nhanvien (Manv) 96 CREATE NONCLUSTERED INDEX Manv_ndx Unique indexes do not permit duplicate values in the index column Composite indexes permit two or more
columns to be used in the creation of the
index 97 The sp_helpindex system stored procedure lists the indexes created on a particular table sp_helpindex 98 sp_helpindex PassengerVí dụ
Kết quả
kê SUM, AVG, MAX, MIN,…
Ví dụ
SELECT Productid, Orderid, Quantity
FROM [Order Details]
ORDER BY Productid, Orderid
COMPUTE Sum(Quantity)
SELECT OrderID,p.ProductID, ProductName,
CategoryName ,Quantity
FROM [Order Details] o JOIN Products p
ON o.ProductID = p.ProductID
JOIN Categories c
ON p.CategoryID = c.CategoryID
ON a.state > p.state
SELECT column_name, column_name [,column_name]
FROM table_name [LEFT | RIGHT] OUTER JOIN
table_name
ON table_name.ref_column_name
join_operator table_name.ref_column_name
Cú pháp
WHERE
nó chỉ trả về một giá trị.
Ví dụ
Example
Example
Example
Example
Ví dụ
UPDATE
Viewing Tables
Syntax: Viewing table information
Example: Viewing table information
Removing tables
Syntax
Example
• Defaults play the role of global variables that can be
bound, or assigned, to columns or to user-defined
datatypes.
CREATE DEFAULT default AS constant_expression
• Bind the default to a column: After a DEFAULT is created, it
needs to be bound to a column or a user-defined datatype
sp_binddefault defaultname, tablename.columnname
• Unbinding Defaults - Defaults can be unbound from a column
or user-defined datatype using the sp_unbindefault system
stored procedure
validation rulesthat can be bound to table columns or to user-
defined datatypes.
The CREATE RULE Statement:
CREATE RULE rulename AS condition_expression
• Binding Rules: A rule can be bound using the sp_bindrule
system store procedure
sp_bindrule rulename, tablename.columnname
Indexes
Creating an Index
Syntax
Types of Indexes
Clustered Index
Example
Non-clustered Index
Example
Attributes of Indexes
Viewing Indexes
Syntax
Example
Có thể bạn quan tâm
Tài liêu mới