1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài 6 TRUY XUẤT CSDL Ngôn ngữ thao tác dữ liệu – DMC và DCL pot

98 590 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Truy xuất CSDL Ngôn Ngữ Thao Tác Dữ Liệu – DMC Và DCL
Thể loại Bài
Định dạng
Số trang 98
Dung lượng 15,93 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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, SumQuantity As Total FROM [Order Details]

Trang 1

TRUY XUẤT CSDL

Ngôn ngữ thao tác dữ liệu – DMC và DCL

Bài 6

Trang 2

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

– Các mệnh đề EXISTS, DISTINCT, COMPUTE BY

2 Sửa chữa dữ liệu

– Lệnh INSERT

– Lệnh UPDATE

– Lệnh DELETE

Trang 4

Ví dụ lệnh SELECT

Column names Table names

Condition Sort order

Trang 5

Truy vấn đơn giản

 Chọn tất cả các cột trong một bảng

Syntax

SELECT * FROM < tablename>

SELECT * FROM Customers

Example

Trang 6

Truy vấn đơn giản

Trang 7

Truy vấn đơn giản

Trang 8

Truy vấn đơn giản

 Đặt tên cho cột mới

Trang 10

SELECT DISTINCT diadiem FROM DIADIEM_PHG

Trang 11

 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

Trang 12

Mệnh đề WHERE

• Chứa điều kiện lọc dữ liệu cần trả về

• Cú pháp: WHERE <search_condition>

Trang 13

Phép toán quan hệ - Relational Operators

Greater Than >

Equal To =

Meaning

Trang 15

Phép toán Logical

 OR operator

SELECT * FROM Orders

WHERE Customerid = „TOMSP‟ OR

Customerid = „HANAR‟

Example

Trang 16

Logical Operators (contd.)

 NOT operator

SELECT * FROM Orders

WHERE NOT Employeeid = 10

Example

Trang 17

Represents a single character

Represents a string of any length

Represents a single character within the range enclosed in the brackets

Represents any single character not SELECT * FROM flight WHERE

Trang 18

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

<ANY: Nhỏ hơn trị cao nhất

>ANY: Lớn hơn trị thấp nhất

=ANY: Tương đương với IN >ALL: Lớn hơn trị cao nhất

Trang 19

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

Trang 20

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

Trang 21

Biến bộ

• Cho biết hai nhân viên có cùng lương

SELECT NV1.LASTNAME, NV2.LASTNAME,NV1.CITY

FROM EMPLOYEES NV1, EMPLOYEES NV2

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ễ

đọc!

SELECT NV1.LASTNAME, NV2.LASTNAME,NV1.CITY

FROM EMPLOYEES NV1, EMPLOYEES NV2

tuple variable

Các thuộc tính Trùng tên

Trang 22

• Danh sách các hoá đơn gồm Mahd, tenkh

SELECT orderid, Orderid.Customerid, CompanyName

FROM Orders, Customers

WHERE 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 Employees, Orders

WHERE 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

SELECT O.Orderid, LastName +‟ „+FirstName as EmployeeName FROM Employees E, Orders O

WHERE E.employeeid =O.Employeeid And Country =„USA‟

Truy vấn từ nhiều bảng & Where

(điều kiện kết nối)

Trang 24

Nhóm dữ liệu trong bảng kết quả

Trang 25

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

nhóm

Trang 26

Mệnh đề GROUP BY

• Ví dụ:

SELECT Orderid, SUM(Quantity * UnitPrice)

AS „Total„ FROM [Order Details]

GROUP BY Orderid

SELECT Orderid, AVG(Quantity * UnitPrice)

AS „AVG TOTAL„ FROM [Order Details]

GROUP BY Orderid

Trang 27

Mệnh đề GROUP BY

• Ví dụ:

SELECT Orderid, MIN(Quantity * UnitPrice)

AS „MIN Total„ FROM [Order Details]

GROUP BY Orderid

SELECT Orderid, MAX(Quantity * UnitPrice)

AS „MAX Total„ FROM [Order Details]

GROUP BY Orderid

Trang 28

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

SELECT Count(*)

AS „Count Of Orders„ FROM [Orders]

Trang 29

Mệnh đề GROUP BY

• Ví dụ:

SELECT Productid, Sum(Quantity) As Total

FROM [Order Details]

WHERE Productid =2

GROUP BY Productid

SELECT Customerid, Count(Orderid)

AS „Count Order of Customers„ FROM Orders

Trang 30

Ví dụ

• SELECT Type, Advance = SUM (Advance) FROM Titles WHERE Type IN ('business', 'mod_cook', 'trad_cook') GROUP BY Type

Trang 31

Ví dụ 2

• SELECT Type, Advance = SUM (Advance) FROM Titles WHERE Type IN ('business', 'mod_cook', 'trad_cook') GROUP BY ALL Type

Trang 32

GROUP BY và HAVING

• Có thể hạn chế các nhóm trong bảng kết quả bằng mệnh đề HAVING

• Chỉ sau khi dữ liệu đã được nhóm và tổng hợp , điều kiện trong mệnh đề HAVING mới được áp dụng

• 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

BY pub_id HAVING (AVG(price) > 10)

Trang 33

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

– 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

Trang 34

Ví dụ

SELECT titles.pub_id, AVG(titles.price)

FROM titles INNER JOIN publishers

ON titles.pub_id = publishers.pub_id WHERE

publishers.state = 'CA' GROUP BY titles.pub_id

HAVING AVG(price) > 10

Sử dụng WHERE và HAVING

Trang 35

Ví dụ 2

SELECT Productid, Sum(Quantity) As Total

FROM [Order Details]

GROUP BY Productid

HAVING Sum(Quantity)>=30

SELECT Customerid, Count(Orderid)

AS „Count Order of Customers„ FROM Orders

Sử dụng WHERE và HAVING

Trang 36

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

Trang 37

Ví dụ

SELECT Productid, Orderid, Sum(Quantity) As Total

FROM [Order Details]

WHERE Orderid <10250

GROUP BY Productid, Orderid

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

Sử dụng Group với Cube

Trang 38

CUBE and ROLLUP

Kết quả

Trang 39

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

kê SUM, AVG, MAX, MIN,…

• 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

WHERE c.CustomerID = o.CustomerID AND o.OrderID = od.OrderID AND c.CustomerID LIKE 'AN%‘ ORDER BY 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

WHERE c.CustomerID = o.CustomerID AND o.OrderID =

Trang 40

Ví dụ

SELECT Productid, Orderid, Quantity

FROM [Order Details]

ORDER BY Productid, Orderid

COMPUTE Sum(Quantity)

SELECT Productid, Orderid, Sum(Quantity) As Total

FROM [Order Details]

ORDER BY Productid, Orderid

COMPUTE SUM(Quantity) By Productid

Mệnh đề COMPUTE

Trang 41

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]

Trang 42

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ữ liệu

• Nên tạo bí danh (alias) cho tên bảng để tránh gõ tên dài và làm truy vấn dễ đọc hơn

Trang 43

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

Trang 45

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ị

• 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

Trang 46

Kết nối nội - Inner joins

SELECT Customers.CustomerID, CompanyName,

OrderID, OrderDate

FROM Customers INNER JOIN Orders

ON Customers.CustomerID = Orders.CustomerID

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

Trang 47

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

• Ví dụ:

SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state FROM publishers p INNER JOIN authors a

ON a.state > p.state

WHERE p.pub_name = 'New Moon Books'

ORDER BY au_lname ASC, au_fname ASC

Trang 48

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

SELECT column_name, column_name [,column_name]

FROM table_name [LEFT | RIGHT] OUTER JOIN

table_name

ON table_name.ref_column_name

Trang 49

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ả

• Ví dụ:

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors a LEFT OUTER JOIN publishers p ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC,

a.au_fname ASC

Trang 50

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

• Cross join không có mệnh đề ON

– Nếu không mệnh đề WHERE, cross join sẽ tạo ra tích Cartesian

– Nếu có mệnh đề WHERE, cross join sẽ thực hiện như

1 kết nối nội

Trang 51

Kết nối chéo - Cross join

Trang 52

Truy vấn tự kết nối (self-join)

• Ví dụ: tìm tất cả sinh viên đã học ít nhất là 2 course

SELECT t1.StudID

FROM Transcript t1 JOIN Transcript t2

ON t1.CrsCode = t2.CrsCode AND

Trang 53

Truy vấn tự kết nối (self-join)

SELECT Customers.CustomerID, CompanyName, OrderID, OrderDate FROM Customers INNER JOIN

Orders

ON Customers.CustomerID = Orders.CustomerID

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

Trang 55

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 được phép dùng

Trang 56

SELECT <Column Name> FROM Table

WHERE <Column Name> =

(SELECT <Column Name> FROM

Parent Query Operator

A subquery is a SELECT statement inside

another SELECT statement

Cú pháp

Truy vấn con - Subqueries

Trang 57

• Ví dụ 1:

SELECT Ord.OrderID, Ord.OrderDate, (SELECT

MAX(OrdDet.UnitPrice)

FROM Northwind.dbo.[Order Details] AS

OrdDet WHERE Ord.OrderID =OrdDet.OrderID) AS MaxUnitPrice

FROM Northwind.dbo.Orders AS Ord

• 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

Truy vấn con - Subqueries

Trang 58

• Cách 1: dùng subquery

SELECT ProductName FROM Products

WHERE UnitPrice = (SELECT UnitPrice FROM Products

WHERE ProductName = 'Sir Rodney''s Scones')

• Cách 2: dùng join

SELECT Prd1.ProductName FROM Products AS Prd1 JOIN

Products AS Prd2

ON (Prd1.UnitPrice = Prd2.UnitPrice)

WHERE Prd2.ProductName = 'Sir Rodney''s Scones'

Truy vấn con - Subqueries

Trang 59

• 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)

– WHERE [NOT] EXISTS (subquery)

Truy vấn con - Subqueries

Trang 60

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')

• Dùng cách 2 với mệnh đề join???

Trang 61

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 > (SELECT MIN(price) FROM titles)

Trang 62

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ì

nó chỉ trả về một giá trị

Ví dụ

SELECT ProductName, UnitPrice FROM Products

WHERE CategoryID =1 and UnitPrice <

Trang 63

 Sử dụng toán tử In, Not in, Any, all…

2) SELECT Ordeid, Productid, Quantity FROM [Order

details] WHERE ProductId =1 and quantity >=All

Subquery trả về nhiều giá trị

Trang 64

• Cho biết các sản phẩm có đơn giá cao nhất

SELECT *

FROM PRODUCTS

WHERE Unitprice >= ALL

(SELECT unitprice FROM Products)

• Cho biết các sản phẩm có đơn vị tính có chữ Box và có đơn giá cao nhất

SELECT *

FROM PRODUCTS

WHERE QuantityPerunit like „%box%‟ and

Unitprice >= ALL

(SELECT unitprice FROM Products)

Subquery trả về nhiều giá trị

Trang 65

Subquery với các toán tử so sánh

• Subquery trả về một giá trị

SELECT ProductName, UnitPrice FROM Products

WHERE SupplierID=1 and

UnitPrice < ( SELECT AVG(UnitPrice) FROM Products WHERE SupplierID=1 )

• Subquery trả về một dãy giá trị

Select OrderID from [order details]

Where ProductID IN (select ProductID

From Products

Trang 66

Subquery với các toán tử so sánh

Select OrderID , productID, quantity from [order details]

Where ProductID =1 and

quantity >= all (select quantity

From [order details] Where ProductID=1)

• 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 )

Trang 67

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

Trang 68

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

• Ví dụ:

SELECT au_lname, au_fname

FROM authors WHERE city <> ALL (SELECT city FROM publishers)

Ngày đăng: 27/06/2014, 06:20

HÌNH ẢNH LIÊN QUAN

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 - Bài 6 TRUY XUẤT CSDL Ngôn ngữ thao tác dữ liệu – DMC và DCL pot
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 (Trang 25)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm