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.
trang27/29
Chuyển đổi dữ liệu07.07.2016
Kích1.04 Mb.
1   ...   21   22   23   24   25   26   27   28   29

4.Nhóm dữ liệu


Phân loại tần số xuất hiện có thể được tạo ra một cách nhanh chóng và dễ dàng với mệnh đề GROUP BY của SQL. Mệnh đề GROUP BY có thể được kết hợp với mọi hàm số học. Chẳng hạn, để tìm ra giá trị nhỏ nhất ứng với từng mã bán hàng, sử dụng

SELECT SALE_CODE, MIN(PRICE)


FROM INVENTRY
GROUP BY SALE_CODE;

để tạo ra kết quả dưới đây:



SALE_CODE

MIN(PRICE)

1
2


5.87
8.45
4.99

Tương tự bạn có thể tìm được giá trung bình trong mỗi mã bán hàng bởi

SELECT SALE_CODE, AVG(PRICE)


FROM INVENTRY
GROUP BY SALE_CODE;

để đưa ra kết quả



SALE_CODE

AVG(PRICE)

1
2


64.75
11.43
71.59

Nhớ rằng mệnh đề GROUP BY không thể theo dõi các thuộc tính không được mô tả trong lệnh SELECT. Chẳng hạn, câu vấn tin

SELECT *
FROM INVENTRY


GROUP BY SALE_CODE;

sẽ đưa ra thông báo lỗi

not a GROUP BY expression (không phải biểu thức GROUP BY)

vì biến nhóm được chỉ rõ duy nhất là SALE_CODE, đồng thời bạn đang ra lệnh so sánh một biến duy nhất này với tất cả các biến trong bảng. (Chẳng hạn, không thể nhóm PRICE bởi SALE_CODE!)


5.Bảng ảo: việc tạo các khung nhìn


Bạn có thể tạo ra một bảng lôgic (ảo) với lệnh VIEW. Bảng lôgic này chỉ tồn tại trong bộ nhớ, đồng thời vẫn được xử lý như một bảng thực. Do đó, có thể tạo ra bảng ảo sẵn dùng để tránh các nguy cơ người dùng ngẫu nhiên hoặc (chủ ý) xoá dữ liệu hoặc bổ sung dữ liệu sai vào bảng thực.

Lệnh VIEW đặc biệt hữu dụng do nó được dùng để hạn chế người dùng truy cập vào phần đã chọn của dữ liệu trong bảng. Để ý cú pháp trong dãy lệnh dưới đây, nó tạo ra bảng được đặt tên là INVENT_2. Bảng lôgic INVENT_2 chỉ chứa hai thuộc tính được ấn định (P_CODE và PRICE) và kèm theo đó là chỉ ứng với các giá lớn hơn 50.00USD.

CREATE VIEW INVENT_2 AS
SELECT P_CODE, PRICE
FROM INVENTRY
WHERE PRICE > 50.00;

Sau khi đã tạo ra bảng lôgic, SELECT sẽ chỉ trình bày các thuộc tính được giới hạn ở trên:

SELECT *
FROM INVENT_2;

Kết quả đạt được là:



P_CODE

PRICE

89-WRE-Q
2232/QWE
2232/QTY

256.99
99.87
109.92

Với các khung nhìn chúng ta có thể làm cho mọi dữ liệu sẵn dùng với người dùng đồng thời không phải bận tâm đến các hành vi làm sai dữ liệu trong bảng thực, theo đó nâng cao tính an toàn dữ liệu của hệ thống. Đồng thời khả năng hạn chế người dùng vào các phần dữ liệu được chỉ rõ của chúng ta là yếu tố cơ bản đảm bảo tính bí mật cũng như an toàn dữ liệu.

6.Chỉ mục SQL


Bạn đã biết trong chương 2 chỉ mục là gì và cách mà nó được dùng để nâng cao hiệu quả tìm kiếm dữ liệu. Các chỉ mục thường được tạo ra để đáp ứng một loại tìm kiếm đặc biệt sau khi các bảng đã được sử dụng một thời gian nào đó. Tuy nhiên, nhiều RDBMS chứa các tiện ích sẽ cho phép bạn mô tả các chỉ mục theo các thuộc tính được chọn khi các bảng được tạo ra. Và về sau bạn cũng sẽ thấy nhu cầu cần có các chỉ mục bổ sung trong quá trình sử dụng bảng. Vì vậy, khả năng tạo ra nhanh chóng và hiệu quả các chỉ mục tại thời điểm bất kỳ là quan trọng. Các chỉ mục SQL có thể được tạo ra trên cơ sở các thuộc tính đã chọn. Chẳng hạn, dãy lệnh dưới đây tạo ra chỉ mục với tên P_CODEX, dựa vào thuộc tính P_CODE được lưu trong bảng INVENTRY:

CREATE INDEX P_CODEX


ON INVENTRY(P_CODE);

SQL sẽ không cho bạn ghi đè lên một chỉ mục đang tồn tại trước khi cảnh báo bạn, theo đó bảo toàn cấu trúc chỉ mục trong từ điển dữ liệu. Bạn cũng có thể tạo một chỉ mục kèm với việc ngăn chặn bạn dùng giá trị đã được dùng trước đó. Đặc điểm như vậy đặc biệt hữu dụng khi thuộc tính chỉ mục là khoá chính với các giá trị không trùng nhau.

CREATE UNIQUE INDEX P_CODEX
ON INVENTRY(P_CODE);

Nếu bạn cố gắng đưa vào giá trị P_CODE đã có, SQL sẽ đưa ra thông báo lỗi

duplicate value in index (giá trị đã có trong chỉ mục)

7.Liên kết các bảng CSDL


Khả năng kết hợp (JOIN) các bảng theo các thuộc tính chung có lẽ là sự phân biệt quan trọng nhất giữa CSDL quan hệ và các CSDL khác. Lệnh JOIN được thực hiện khi dữ liệu cần lấy ra từ nhiều hơn một bảng tại một thời điểm. (Nếu cần thiết, xem lại các định nghĩa JOIN tự nhiên, JOIN bằng và các ví dụ trong chương 2. Nhớ rằng SQL dựa trên đại số quan hệ.)

Để thực hiện lệnh JOIN thành công, danh sách các thuộc tính được liệt kê trong SELECT phải được xác định rõ. Chẳng hạn, giả sử bạn muốn liệt kê thông tin được dẫn ra từ hai bảng CSDL ROBCOR. Vì V_CODE là khoá ngoại trong bảng INVENTRY và khóa chính trong bảng VENDOR, liên kết được thành lập theo V_CODE:



Bảng

Các thuộc tính cần chỉ ra

Thuộc tính liên kết

INVENTRY

P_DESCRIPT, PRICE

V_CODE

VENDOR

V_COMPANY, V_PHONE

Vậy lệnh có thể là

SELECT INVENTRY.P_DESCRIPT, INVENTRY.PRICE,


VENDOR.V_COMPANY, VENDOR.V_PHONE
FROM INVENTRY, VENDOR
WHERE INVENTRY.V_CODE = VENDOR.V_CODE;

Dãy lệnh trên đưa ra kết quả:



P_DESCRIPT

PRICE

V_COMPANY

V_PHONE

7.25in, power saw blade
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade

14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92

Q&D Building Supplies
J.I. Supplies, Inc
Q&D Building Supplies
Q&D Building Supplies
J.I. Supplies, Inc
Harding Super Wholesale
Harding Super Wholesale
Charlie’s Wholesale
Rather’s Building, Inc.
Harding Super Wholesale

800-333-9011
666-233-1281
800-333-9011
800-333-9011
666-233-1281
800-213-9999
800-213-9999
212-667-0090
800-234-1200
800-213-9999

Kết quả đưa ra có thể được trình bày theo một thứ tự khác do lệnh SQL đưa ra một danh sách dựa trên vị trí con trỏ hiện thời. Trên thực tế, bạn có thể nhận được một danh sách với thứ tự khác nhau tại các thời điểm khác nhau. Tuy nhiên, bạn có thể tạo ra một danh sách với thứ tự biết trước với điều kiện ORDER:

SELECT INVENTRY.P_DESCRIPT, INVENTRY.PRICE,


VENDOR.V_COMPANY, VENDOR.V_PHONE
FROM INVENTRY, VENDOR
WHERE INVENTRY.V_CODE = VENDOR.V_CODE
ORDER BY PRICE;

Trong trường hợp này, danh sách của bạn sẽ luôn được sắp xếp từ giá thấp nhất tới giá cao nhất:



P_DESCRIPT

PRICE

V_COMPANY

V_PHONE

Rat-tail file, 1/8in fine

4.99

Q&D Building Supplies

800-333-9011

PVC pipe, 3.5in, 8ft

5.87

Q&D Building Supplies

800-333-9011

Claw hammer

5.95

Rather’s Building, Inc.

800-234-1200

2.5in, wood screw, 100

8.45

J.I. Supplies, Inc

666-233-1281

Sledge hammer, 12lb

14.4

J.I. Supplies, Inc

666-233-1281

7.25in, power saw blade

14.99

Q&D Building Supplies

800-333-9011

Hardware cloth,1/4in,50ft

39.95

Charlie’s Wholesale

212-667-0090

B&D jigsaw, 8in, blade

99.87

Harding Super Wholesale

800-213-9999

B&D jigsaw, 12in, blade

109.92

Harding Super Wholesale

800-213-9999

Houselite chain saw, 16in

256.99

Harding Super Wholesale

800-213-9999

Lưu ý rằng dãy lệnh SQL trên kết nối một hàng trong bảng INVENTRY với một hàng phù hợp theo cột V_CODE của bảng VENDOR. Vì nhà cung cấp bất kỳ có thể chuyển một số bất kỳ các sản phẩm được đặt mua vào CSDL ROBCOR, bảng INVENTRY có thể nhiều mục V_CODE ứng với mỗi mục V_CODE trong bảng VENDOR. Nói cách khác, mỗi V_CODE trong VENDOR có thể tương ứng với nhiều hàng V_CODE trong INVENTRY.

Nếu chúng ta quên không mô tả mệnh đề WHERE, chúng ta sẽ nhận được một kết quả là tích tương ứng với kết nối tự nhiên. (Xem chương 2 để ôn lại các khái niệm này, nếu cần thiết.) Vì bảng INVENTRY chứa mười

hàng và bảng VENDOR chứa năm hàng, tích Đề-các có thể đưa ra một danh sách (10  5) = 50 hàng do mỗi hàng trong INVENTRY có thể kết nối với từng hàng của bảng VENDOR.

Tất cả các lệnh SQL đều có thể được dùng để kết nối bảng. Chẳng hạn, dãy lệnh dưới đây hoàn toàn có thể chấp nhận được trong SQL:


SELECT INVENTRY.P_DESCRIPT, INVENTRY.PRICE,


VENDOR.V_COMPANY, VENDOR.V_PHONE
FROM INVENTRY, VENDOR
WHERE INVENTRY.V_CODE = VENDOR.V_CODE
AND INVENTRY.STOCK_DATE > 07/01/91;

Một bí danh (tên gọi khác) có thể được dùng để định danh các bảng được dùng để lấy ra dữ liệu. Lưu ý rằng chúng ta đã dùng bí danh “A” và “B” để gắn cho các bảng INVENTRY và VENDOR trong dãy lệnh dưới đây. Bất cứ một tên bảng hợp pháp nào đều có thể được dùng như một bí danh. (Chúng ta cũng đã chỉ liệt kê các tên bảng - không đi kèm thuộc tính – như một nguồn dữ liệu do các bảng không chứa các tên trùng lặp xuất hiện trong lệnh SELECT.)

SELECT P_DESCRIPT, PRICE, V_COMPANY, V_PHONE
FROM INVENTRY A, VENDOR B
WHERE A.V_CODE = B.V_CODE
ORDER BY PRICE;

Một bí danh đặc biệt hữu dụng khi một bảng phải được kết nối với chính nó theo các nhóm.


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