1. Trang chủ
  2. » Giáo án - Bài giảng

Chương 7 Ngôn ngữ SQL

50 315 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 đề Chương 7 Ngôn ngữ SQL
Thể loại Bài giảng
Định dạng
Số trang 50
Dung lượng 1 MB

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

Nội dung

 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... Được dùng để tổ

Trang 1

Chuong 7 Ngôn ngữ SQL

Trang 3

Giớ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, 1992 và 1999

 Đặc điểm của SQL:

◦ Ngôn ngữ tựa tiếng Anh

◦ Ngôn ngữ phi thủ tục

 Gồm 3 nhóm lệnh:

◦ DDL ( D ata D efinition L anguage)

◦ DML ( D ata M anipulation L anguage)

◦ DCL ( D ata C ontrol L anguage)

Trang 5

 Là ngôn ngữ thao tác dữ liệu

 Gồm các lệnh:

 SELECT

 INSERT, UPDATE, DELETE, TRUNCATE

Trang 6

 Là ngôn ngữ điều khiển dữ liệu

 Gồm các lệnh

 GRANT/REVOKE/ADD

 COMMIT/ROLLBACK

Trang 7

DESC ] ]

Trang 8

Mệ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 10

Mệ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

Trang 11

Mệnh đề SELECT

 Trường tính toán được xây dựng từ biểu

thức (Expression) có liên quan đến các

Trang 12

Mệnh đề SELECT

 Ví dụ 1:

SELECT OrderID, ProductID,

Amount =UnitPrice*Quantity* (1- Discount)

FROM [Order Details]

Trang 13

Đượ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ị

Trang 14

Ví 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ả hoá đơ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 16

ASC (ascending) : xếp theo thứ tự tăng

DESC (descending): xếp theo thứ tự giảm

Trang 18

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

Trang 21

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 22

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.

Trang 23

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

Trang 24

SELECT 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 định nghĩa trước bảng

Trang 25

Mệnh đề JOIN

 Mệnh đề join dùng để khôi phục dữ liệu từ nhiều hơn 1 bảng

Trang 26

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

 Ví dụ

SELECT t.Title_Id, t.Title, p.Pub_Id

from Titles t

Trang 27

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 29

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

Trang 30

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

Trang 31

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

WHERE p.pub_name = 'New Moon Books'

ORDER BY au_lname ASC, au_fname ASC

Trang 32

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]

Trang 33

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ị

Trang 34

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 35

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

 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

SELECT au_fname, au_lname, pub_name FROM

authors INNER JOIN publishers ON authors.city = publishers.city ORDER BY au_lname DESC

Trang 36

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 38

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

Trang 39

 Cách 1: dùng subquery

SELECT ProductName FROM Products

WHERE UnitPrice = (SELECT UnitPrice FROM Products WHERE ProductName = 'Sir

Trang 40

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

Trang 41

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 42

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

Trang 43

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

 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

Trang 44

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

 Ví dụ:

SELECT au_lname, au_fname

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

Trang 45

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

sánh

Trang 46

Chiến lược đá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á

Trang 47

Tương đương giữa câu truy vấn và biểu thức đại số

Liệt kê tên các giáo sư khoa EE

 Lệnh SQL

SELECT P.NameFROM PROFESSOR PWHERE P.DEptId = ‘EE’

Trang 48

Tương đương giữa câu truy vấn và biểu thức đại số

Liệt kê tên tất cả các giáo sư đã dạy mùa hè 2007

Trang 49

Dạng biến đổi chung

Trang 50

Các hạn chế của đại số quan

hệ

 Không thực hiện được các hàm gộp

 Không nhóm được dữ liệu

Ngày đăng: 12/05/2014, 12:04

HÌNH ẢNH LIÊN QUAN

Bảng kết quả: - Chương 7 Ngôn ngữ SQL
Bảng k ết quả: (Trang 17)

TỪ KHÓA LIÊN QUAN

w