Ban chỉ ĐẠo công nghệ thông tin của cơ quan đẢng giáo trình thiết kế, XÂy dựng và quản trị CƠ SỞ DỮ liệu hà NỘI, 2004



tải về 1.04 Mb.
trang26/29
Chuyển đổi dữ liệu07.07.2016
Kích1.04 Mb.
1   ...   21   22   23   24   25   26   27   28   29

2.Loại bỏ trùng lặp


Có bao nhiêu nhà cung cấp khác nhau hiện được thể hiện trong bảng INVENTRY? Một phép liệt kê đơn giản (SELECT) sẽ không hiệu quả lắm nếu bảng chứa vài ngàn hàng và chúng ta phải chọn lọc ra một cách thủ công các mã của nhà cung cấp. Máy mắn là, mệnh đề DISTINCT của SQL được thiết kế để đưa ra một danh sách các giá trị khác nhau. Chẳng hạn, lệnh

SELECT DISTINCT V_CODE


FROM INVENTRY;

sẽ chỉ đưa ra các mã (V_CODE) nhà cung cấp khác nhau được tìm thấy trong bảng INVENTRY:



V_CODE

21344
21231
24288
23119
21225


3.Các hàm số học SQL


SQL sẽ thực hiện các tóm tắt toán học khác nhau cho bạn, như đếm số hàng thỏa mãn một điều kiện đã cho nào đó, tìm các giá trị lớn nhất và nhỏ nhất của một thuộc tính đã cho nào đó, cộng các giá trị trong một cột đã cho, tính trung bình các giá trị trong một cột đã cho... Các hàm được chỉ ra trong bảng 3.6.
Bảng 3.6 Các hàm số học SQL

Hàm

Kết quả thực hiện

COUNT

Số hàng bao hàm thuộc tính đã mô tả

MIN

Giá trị thuộc tính nhỏ nhất

MAX

Giá trị thuộc tính lớn nhất

AVG

Trung bình số học ứng với thuộc tính đã mô tả

SUM

Tổng tất cả các giá trị của thuộc tính đã chọn

COUNT. Vì COUNT được thiết kế để đếm số “gí trị” cụ thể của thuộc tính, nó thường được dùng kết hợp với mệnh đề DISTINCT. Chẳng hạn, trả lời cho câu hỏi Có bao nhiêu nhà cung cấp khác nhau hiện được tìm thấy trong bảng INVENTRY? chúng ta có thể dùng lệnh

SELECT COUNT (DISTINCT V_CODE)


FROM INVENTRY;

sẽ đưa ra kết quả



COUNT(DISTINCT V_CODE)

5

Nói cách khác, bảng chứa năm mã nhà cung cấp khác nhau.

Tất cả các hàm số học đều có thể được dùng kết hợp với các điều kiện được chỉ ra. Giả sử bạn được yêu cầu đưa ra câu trả lời cho bài toán sau:

Tìm số mặt hàng trong bảng INVENTRY mà giá của chúng nhỏ hơn hoặc bằng 10.00USD.

Câu trả lời được cho bởi dòng lệnh

SELECT COUNT(DISTINCT V_CODE)
FROM INVENTRY
WHERE PRICE <= 10.00;

Dãy lệnh này sẽ đưa ra kết quả



COUNT(DISTINCT V_CODE)

3

(Khảo sát bảng INVENTRY ta thấy rằng bảng chứa năm số V_CODE khác nhau – 21344, 21231, 24288, 23119 và 21225 – trong đó có ba số ứng với các sản phẩm mà giá của chúng nhỏ hơn hoặc bằng 10.00USD.)

Dấu hoa thị (*) vẫn được dùng như một kí tự thay thế để tất cả các bản ghi thỏa mãn điều kiện đã mô tả. Trả lời câu hỏi

Có bao nhiêu hàng trong bảng INVENTRY chứa sản phẩm ứng với PRICE nhỏ hơn hoặc bằng 10.00USD?

dùng dãy lệnh

SELECT COUNT(*)
FROM INVENTRY

WHERE PRICE <= 10.00;

để đưa ra câu trả lời đúng


COUNT(*)

4

(Khảo sát nội dung bảng INVENTRY ta thấy rằng có bốn hàng thoả mãn điều kiện đã chỉ ra.)

MAXMIN. Các hàm MAX và MIN sẽ giúp chúng ta tìm câu trả lời cho các ài toán như

Tìm giá lớn nhất trong bảng INVENTRY.

Tìm giá nhỏ nhất trong bảng INVENTRY.

Câu trả lời đúng cho bài toán thứ nhất được tạo ra bởi

SELECT MAX(PRICE)
FROM INVENTRY;

Dãy lệnh này sẽ đưa ra kết quả



MAX(PRICE)

256.99

Câu trả lời đúng cho bài toán thứ hai được tạo ra bởi

SELECT MIN(PRICE)


FROM INVENTRY;

Dãy lệnh này sẽ đưa ra kết quả



MIN(PRICE)

4.99

Các hàm số học cũng có thể được dùng với các hạn chế lôgic phức tạp hơn. Tuy nhiên, bạn phải nhớ rằng các hàm số học chỉ đưa ra một giá trị duy nhất trên tất cả các giá trị được tìm thấy trong bảng: giá trị lớn nhất duy nhất, giá trị nhỏ nhất duy nhất, tổng đếm duy nhất hoặc giá trị trung bình duy nhất. Thường dễ quên các cảnh báo đơn giản này. Chẳng hạn, chúng ta cùng khảo sát câu hỏi

Sản phẩm nào có giá cao nhất?

Mặc dù câu hỏi này khác đơn giản, dãy lệnh SQL

SELECT P_CODE, P_DESCRIPT, PRICE


FROM INVENTRY
WHERE PRICE = MAX(PRICE);

sẽ không đưa ra các kết quả mong muốn vì

SELECT đưa ra một danh sách nhiều giá trị giá.

Phép so sánh với MAX(PRICE) xảy ra quá muộn trong dãy lệnh; các giá trị PRICE đã được lấy ra từ bảng trước khi hàm MAX(PRICE) có thể được khớp vào phép so sánh.

Do đó, để trả lời câu hỏi, bạn phải duyệt các mục với một hạn chế giá trị duy nhất bằng cách sử dụng một thủ tục được gọi là vấn tin lồng nhau. Như tên của nó đã chỉ rõ, vấn tin lồng nhau là vấn tin trong vấn tin. Trong trường hợp này, vấn tin lồng nhau gồm hai phần:

vòng trong, được thực hiện trước.

vòng ngoài, được thực hiện sau. (Vòng ngoài thường là SELECT đầu tiên được gặp trong dãy lệnh.)

Dùng dãy lệnh dưới đây như một ví dụ, lưu ý rằng vòng trong trước hết tìm giá trị giá lớn nhất, được lưu trong bộ nhớ. Vì bây giờ vòng ngoài có một giá trị để so sánh từng giá trị PRICE với nó nên câu vấn tin được thực hiện đúng đắn.

SELECT P_CODE, P_DESCRIPT, PRICE
FROM INVENTRY
WHERE PRICE = (SELECT MAX(PRICE)
FROM INVENTRY);

Như mong muốn, dãy lệnh trên đưa ra kết quả



P_CODE

P_DESCRIPT

PRICE

89-WRE-Q

Houselite chain saw, 16in

256.99

AVG. Hàm AVG tương tự như các hàm MIN và MAX, có cùng các hạn chế tính toán. Một giá trị PRICE trung bình duy nhất có thể được tạo ra bằng cách dùng lệnh

SELECT AVG(PRICE)


FROM INVENTRY;

để đưa ra kết quả



AVG(PRICE)

56.14

Một danh sách theo thứ tự giá giảm dần của tất cả các sản phẩm có giá lớn hơn giá trị trung bình có thể được tạo ra bởi

SELECT *
FROM INVENTRY


WHERE PRICE > (SELECT AVG(PRICE)
FROM INVENTRY)
ORDER BY PRICE DESC;

Kết quả đưa ra như sau:



P_CODE

P_DESCRIPT

STOCK_DATE

ON_HAND

MIN_QUANT

PRICE

V_CODE

89-WRE-Q

Houselite chain saw, 16in

08/11/1991

11

5

256.99

24288




2232/QTY

B&D jigsaw, 12in, blade

11/26/1990

8

3

109.92

24288




2232/QWE

B&D jigsaw, 8in, blade

11/26/1990

6

3

99.87

24288




SUM. Hàm SUM tính tổng cho một thuộc tính đã chỉ ra nào đó, theo bất cứ điều kiện nào bạn áp đặt. Chẳng hạn, nếu bạn muốn tìm giá trị tổng cộng của tất cả các sản phẩm theo thống kê, bạn có thể dùng

SELECT SUM(ON_HAND*PRICE)


FROM INVENTRY;

vì giá trị tổng cộng là tích của số sản phẩm hiện có và giá của nó.


1   ...   21   22   23   24   25   26   27   28   29


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2016
được sử dụng cho việc quản lý

    Quê hương