5.Sao chép một phần bảng
Về sau bạn sẽ thấy rằng có thể cần phải tách cấu trúc bảng thành một số phần nào đó khi nó không thỏa mãn một kiểm tra thiết kế nào đó. May mắn là, SQL cho phép chúng ta sao chép nội dung của các cột đã chọn sang các bảng mới vừa được tạo ra để tránh phải nhập lại dữ liệu một cách thủ công.
Để sao chép các cột đã chọn từ một bảng, trước hết cần tạo cấu trúc bảng mới để nhận dữ liệu. Chẳng hạn, nếu bạn muốn sao chép P_CODE và PRICE từ bảng INVENTRY sang bảng mới có tên là TEMP_1, trước hết cần tạo ra cấu trúc bảng TEMP_1 như dưới đây.
CREATE TABLE TEMP_1 ( PART_CODE CHAR(8) NOT NULL,
PRICE DECIMAL(8,2));
Nhớ rằng các tên cột của bảng TEMP_1 không trùng với các tên cột của bảng gốc và bảng mới không nhất thiết phải có số cột bằng số cột của bảng gốc. Khi đó, cột đầu tiên trong bảng TEMP_1 được đặt tên là PART_CODE, mà không phải là P_CODE có trong bảng INVENTRY; đồng thời bảng TEMP_1 chỉ chứa hai cột, không phải bảy cột như trong bảng INVENTRY. Tuy nhiên, các đặc điểm cột phải tương xứng; bạn không thể sao chép thuộc tính kiểu kí tự vào cấu trúc số, và ngược lại.
Sau khi đã tạo được bảng nhận, sao chép các giá trị cột tương ứng vào bảng TEMP_1 mới tạo ra bởi dãy lệnh
INSERT INTO (Danh sách tên cột của bảng nhận)
SELECT
FROM
Do đó, chúng ta dùng
INSERT INTO TEMP_1 (PART_CODE, PRICE)
SELECT P_CODE, PRICE FROM INVENTRY;
Nội dung của bảng TEMP_1 bây giờ có thể được kiểm tra bởi câu vấn tin
SELECT * FROM TEMP_1;
để liệt kê nội dung của mới TEMP_1:
PART_CODE
|
PRICE
|
13-Q2/P2
ZW-23116
2QQ23DRT
54778-2T
23114-AA
89-WRE-Q
2232/QWE
1546-QQ2
WWE/D324
2232/QTY
|
14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92
|
Trong chương 5 bạn sẽ thấy tầm quan trọng của sao chép một phần bảng trong cái gọi là quá trình chuẩn hoá.
6.Xoá bảng khỏi CSDL
Một bảng có thể bị xoá khỏi CSDL bởi lệnh DROP. Chẳng hạn, chúng ta có thể xoá bảng TEMP_1 vừa tạo với
DROP TABLE TEMP_1;
VI.VẤN TIN PHỨC TẠP VÀ CÁC HÀM SQL
Một trong những ưu điểm quan trọng nhất của SQL là khả năng cho phép người dùng tạo ra các câu vấn tin phức tạp với nhiều dạng khác nhau. Các toán tử lôgic được giới thiệu ở phần trước để cập nhật nội dung bảng cũng sẽ chỉ làm việc trong môi trường vấn tin. Ngoài ra, SQL còn cung cấp các hàm hữu ích để đếm, tìm giá trị nhỏ nhất và lớn nhất, tính giá trị trung bình... Hơn thế nữa, SQL cũng cho phép người dùng hạn chế các câu vấn tin đối với các mục dữ liệu không trùng lặp hoặc các mục trùng lặp của nó có thể được nhóm lại.
1.Sắp xếp danh sách
Mệnh đề ORDER BY của SQL đặc biệt hữu dụng nếu thứ tự liệt kê quan trọng đối với bạn. Cú pháp
ORDER BY
tạo ra một danh sách theo thứ tự tăng dần. Nếu danh sách cần chỉ ra theo thứ tự giảm dần, dùng
ORDER BY DESC
Chẳng hạn, nếu bạn muốn nội dung của bảng INVENTRY được liệt kê bởi PRICE theo thứ tự tăng dần, dùng
SELECT *
FROM INVENTRY
ORDER BY PRICE;
để đưa ra kết quả như dưới đây.
P_CODE
|
P_DESCRIPT
|
STOCK_DATE
|
ON_HAND
|
MIN_QUANT
|
PRICE
|
V_CODE
|
54778-2T
|
Rat-tail file, 1/8in fine
|
12/03/1990
|
43
|
20
|
4.99
|
21344
|
2QQ23DRT
|
PVC pipe, 3.5in, 8ft
|
07/02/1991
|
188
|
75
|
5.87
|
21344
|
WWE/D324
|
Claw hammer
|
08/12/1991
|
23
|
10
|
5.95
|
21225
|
ZW-23116
|
2.5in, wood screw, 100
|
06/25/1991
|
237
|
100
|
8.45
|
21231
|
23114-AA
|
Sledge hammer, 12lb
|
02/15/1991
|
8
|
5
|
14.4
|
21231
|
13-Q2/P2
|
7.25in, power saw blade
|
08/12/1991
|
32
|
15
|
14.99
|
21344
|
1546-QQ2
|
Hardware cloth,1/4in,50ft
|
08/14/1991
|
15
|
5
|
39.95
|
23119
|
2232/QWE
|
B&D jigsaw, 8in, blade
|
11/26/1990
|
6
|
3
|
99.87
|
24288
|
2232/QTY
|
B&D jigsaw, 12in, blade
|
11/26/1990
|
8
|
3
|
109.92
|
24288
|
89-WRE-Q
|
Houselite chain saw, 16in
|
08/11/1991
|
11
|
5
|
256.99
|
24288
|
So sánh danh sách này với nội dung bảng thực tế trong bảng 3.1 và lưu ý sự thay đổi theo thứ tự được liệt kê: sản phẩm giá thấp nhất bây giờ được đứng đầu tiên, tiếp theo là các sản phẩm giá thấp nhất tiếp theo... Bạn nên biết rằng ORDER đưa ra quá trình sắp xếp lôgic; nội dung bảng thực tế không bị ảnh hưởng bởi lệnh ORDER.
Tiếp theo, gõ dòng lệnh
SELECT *
FROM INVENTRY
ORDER BY PRICE DESC;
và khảo sát kết quả đưa ra:
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
|
1546-QQ2
|
Hardware cloth,1/4in,50ft
|
08/14/1991
|
15
|
5
|
39.95
|
23119
|
13-Q2/P2
|
7.25in, power saw blade
|
08/12/1991
|
32
|
15
|
14.99
|
21344
|
23114-AA
|
Sledge hammer, 12lb
|
02/15/1991
|
8
|
5
|
14.4
|
21231
|
ZW-23116
|
2.5in, wood screw, 100
|
06/25/1991
|
237
|
100
|
8.45
|
21231
|
WWE/D324
|
Claw hammer
|
08/12/1991
|
23
|
10
|
5.95
|
21225
|
2QQ23DRT
|
PVC pipe, 3.5in, 8ft
|
07/02/1991
|
188
|
75
|
5.87
|
21344
|
54778-2T
|
Rat-tail file, 1/8in fine
|
12/03/1990
|
43
|
20
|
4.99
|
21344
|
Nếu bạn muốn tạo ra một danh mục điện thoại, có lẽ là hữu dụng nếu bạn đưa ra dãy được sắp thứ tự (tên cuối, tên đầu, kí tự đầu của tên đệm) theo ba bước:
Sắp xếp theo tên cuối.
Trong các tên cuối, sắp xếp theo tên đầu.
Trong các tên được sắp theo bước 2, sắp xếp theo kí tự đầu của tên đệm.
Dãy được sắp đa mức như vậy được gọi là dãy được sắp theo tầng, nó được tạo ra một cách dễ dàng bởi việc liệt kê danh sách thuộc tính, cách nhau bởi dấu phảy, sau mệnh đề ORDER BY:
ORDER BY
(Khái niệm tầng được dùng để mô tả điều kiện theo đó phép sắp xếp lôgic được thực hiện theo bước.) Chẳng hạn, lệnh
SELECT C_LNAME, C_FNAME, C_I, V_PHONE
FROM VENDOR
ORDER BY C_LNAME, C_FNAME, C_I;
sẽ đưa ra kết quả dưới đây:
C_LNAME
|
C_FNAME
|
C_I
|
V_PHONE
|
Cavazos
|
Maria
|
D.
|
800-333-9011
|
Fielding
|
Anne
|
K.
|
666-233-1281
|
Smith
|
Sally
|
K.
|
800-234-1200
|
Smith
|
Stanley
|
G.
|
800-213-9999
|
Smithson
|
Ronald
|
W.
|
212-667-0090
|
Mệnh đề ORDER BY hữu dụng trong nhiều ứng dụng, đặc biệt khi điều kiện DESC được sử dụng. Hãy xem xét khả năng khi kiểm tra ngày đến hạn hoá đơn theo thứ tự giảm dần, kiểm tra các hạng mục ngân sách các cơ quan chính phủ theo số lượng, hoặc khảo sát một số bất kỳ các giao dịch tài chính.
Chúng ta cũng có thể dùng mệnh đề ORDER BY kết hợp với các lệnh SQL khác. Chẳng hạn, để ý cách dùng các hạn chế trong dãy lệnh dưới đây:
SELECT P_DESCRIPT, V_CODE, STOCK_DATE, PRICE
FROM INVENTRY
WHERE STOCK_DATE < ‘07/15/91’
AND PRICE <= 50.00
ORDER BY V_CODE, PRICE DESC;
Kết quả đưa ra sẽ là danh sách dưới đây:
P_DESCRIPT
|
V_CODE
|
STOCK_DATE
|
PRICE
|
Sledge hammer, 12lb
|
21231
|
02/15/1991
|
14.40
|
2.5in, wood screw, 100
|
21231
|
06/25/1991
|
8.45
|
PVC pipe, 3.5in, 8ft
|
21344
|
07/02/1991
|
5.87
|
Rat-tail file, 1/8in fine
|
21344
|
12/03/1990
|
4.99
|
Nhận xét rằng bên trong V_CODE đầu tiên các giá được liệt kê theo thứ tự giảm dần, theo ngay sau bởi V_CODE thứ hai, cũng với các giá được liệt kê theo thứ tự giảm dần.
Chia sẻ với bạn bè của bạn: |