Tải bản đầy đủ (.ppt) (50 trang)

Chương 7 Ngôn ngữ SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (357.62 KB, 50 trang )

Chuong 7
Chuong 7
Ngôn ngữ SQL
Ngôn ngữ SQL
1
Nội dung
Nội dung

Giới thiệu chung

Ba nhóm ngôn ngữ SQL
◦ DDL

DML

DCL

Câu lệnh SELECT
◦ Lọc dữ liệu

Thống kê dữ liệu qua các hàm gộp

Các kiểu kết nối

Subquery

Biểu thức đại số quan hệ và câu truy vấn
2
Giới thiệu chung
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 (Data Definition Language)

DML (Data Manipulation Language)

DCL (Data Control Language)
3
DDL
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
4
DML
DML


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

Gồm các lệnh:

SELECT

INSERT, UPDATE, DELETE, TRUNCATE
5
DCL
DCL

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

Gồm các lệnh

GRANT/REVOKE/ADD

COMMIT/ROLLBACK
6
Truy vấn dữ liệu
Truy vấn dữ liệu

Cú pháp chung của lệnh SELECT
SELECT 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 ] ]
7
Mệnh đề SELECT
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 >
< select_list > ::=
{ *
|{ table_name | view_name | table_alias }.*
| { column_name | expression }
[ [ AS ] column_alias ]
| column_alias = expression
} [ , n ]
8
Mệnh đề SELECT
Mệnh đề SELECT

ALL (DEFAULT): hiển thị tất cả các bản ghi
kể cả các hàng trùng nhau.

DISTINCT: chỉ hiển thị các hàng duy nhất
không trùng nhau trong bảng kết quả.

Ví dụ: liệt kê tất cả các thành phố mà hiện
thời các khách hàng đang sống

SELECT DISTINCT City , Region FROM
Customers
9
Mệnh đề SELECT
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
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???
10
Mệnh đề SELECT
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
trường cơ sở.


Biểu thức bao gồm:
◦ Các trường
◦ Các toán tử số học, logic, so sánh

Các hàm
11
Mệnh đề SELECT
Mệnh đề SELECT

Ví dụ 1:
SELECT OrderID, ProductID,
Amount =UnitPrice*Quantity* (1- Discount)
FROM [Order Details]
12
Các hàm tập hợp (Aggregate function)
Các hàm tập hợp (Aggregate function)
Tên hàm
Tên hàm
Ý nghĩa
Ý nghĩa
SUM
SUM
Tính tổng các số
Tính tổng các số
MIN
MIN
Trả về giá trị nhỏ nhất
Trả về giá trị nhỏ nhất
MAX
MAX

Trả về giá trị lớn nhất
Trả về giá trị lớn nhất
AVG
AVG
Tính giá trị trung bình
Tính giá trị trung bình
COUNT
COUNT
Đếm số phần tử
Đếm số phần tử
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ị
đơn
Ví dụ các hàm gộp trong lệnh select
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
14
Mệnh đề WHERE
Mệnh đề WHERE


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

Cú pháp: WHERE <search_condition>

Ví dụ:
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = 'WA'

15
Mệnh đề ORDER BY
Mệnh đề ORDER BY

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
16
Nhóm dữ liệu trong bảng
Nhóm dữ liệu trong bảng
kết quả
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 cách dùng các hàm gộp
◦ 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
17
Mệnh đề GROUP BY
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
18
Ví dụ
Ví dụ

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


business 25125.0000
mod_cook 15000.0000
trad_cook 19000.0000
(3 row(s) affected)
19
Ví dụ 2
Ví dụ 2

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

business 25125.0000
mod_cook 15000.0000
popular_comp NULL
psychology NULL
trad_cook 19000.0000
UNDECIDED NULL
(6 row(s) affected)
20
GROUP BY và HAVING
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)
21
Sử dụng WHERE và HAVING
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 mới được xuất ra bảng kết quả.
22

Ví dụ
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
23
SELECT INTO
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.

Cú pháp
SELECT columns_list
INTO new_table_name
FROM table_name1, table_name2,………,
table_name n
WHERE condition1, condition2,……….,
condition n

Ví dụ
SELECT Title_Id, Title INTO NewTitles
FROM Titles WHERE Price > $15
24
Mệnh đề JOIN

Mệnh đề JOIN

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]
[WHERE search_condition]
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×