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

3.Các toán tử đặc biệt


SQL chuẩn ANSI cho phép dùng các toán tử đặc biệt chung với mệnh đề WHERE. Các toán tử đặc biệt này bao gồm

BETWEEN, được dùng để định nghĩa các giới hạn thay đổi

IS NULL, được dùng để kiểm tra xem một giá trị thuộc tính có là null hay không.

LIKE, được dùng để kiểm tra đối với các xâu kí tự giống nhau.

IN, được dùng để kiểm tra xem giá trị thuộc tính có phù hợp một giá trị trong một tập các giá trị được liệt kê hay không.

EXIST, được dùng để kiểm tra một thuộc tính có giá trị hay không. Thực tế là EXIST là ngược của IS NULL.

Chúng ta hãy khảo sát cách sử dụng các toán tử này.

Nếu bạn dùng phần mềm cài đặt SQL chuẩn, điều kiện

BETWEEN

có thể được dùng để định nghĩa các giới hạn thuộc tính. Chẳng hạn, nếu bạn muốn biết một danh sách tất cả các sản phẩm mà giá của nó nằm giữa 50.00USD và 100.00USD, dãy lệnh dưới đây sẽ làm việc đó:



SELECT *
FROM INVENTRY
WHERE PRICE BETWEEN 50.00 AND 100.00;

Cài đặt SQL dBASE IV không hỗ trợ BETWEEN, nhưng bạn có thể nhận được cùng một kết quả với

SELECT *
FROM INVENTRY
WHERE PRICE > 50.00
PRICE < 100.00;

SQL chuẩn cho phép sử dụng IS NULL để kiểm tra đối với giá trị thuộc tính rồng (hay null). Chẳng hạn, giả sử rằng giá trị MIN_QUANT chưa được


mô tả cho một hoặc nhiều sản phẩm trong bảng INVENTRY. Mục null như vậy có thể được tìm thấy bởi dãy lệnh

SELECT P_CODE, P_DESCRIPT


FROM INVENTRY
WHERE MIN_QUANT IS NULL;

Tương tự, nếu mục ngày null được kiểm tra, dãy lệnh

SELECT P_CODE, P_DESCRIPT
FROM INVENTRY
WHERE STOCK_DATE IS NULL;

sẽ làm việc trong môi trường SQL chuẩn.

SQL cho phép bạn dùng các kí tự thay thế % và _ để tạo ra xâu tương xứng khi toàn bộ xâu không được biết. Các kí tự thay thế % và _ được dùng như các kí tự thay thế * và ? trong DOS. Tức là,

% muốn nói rằng mọi kí tự bất kì theo sau đều hợp lệ

_ muốn nói một kí tự bất kì có thể được thay thế cho dấu gạch dưới.

LIKE phải được dùng kết hợp với kí tự thay thế. Chẳng hạn, câu vấn tin dưới dây có thể tìm tất cả các hàng VENDOR ứng với các hợp đồng có tên cuối bắt đầu bằng ‘Smith’.

SELECT V_COMPANY, C_LNAME, V_PHONE
FROM VENDOR
WHERE C_LNAME LIKE ‘Smith%’;

Kết quả đưa ra là:



V_COMPANY

C_LNAME

V_PHONE

Harding Super Wholesale
Charlie’s Wholesale
Rather’s Building, Inc.

Smith
Smithson
Smith

800-213-9999
212-667-0090
800-234-1200

Nhưng giả sử bạn đã gõ vào câu vấn tin dưới đây:

SELECT V_COMPANY, C_LNAME, V_PHONE


FROM VENDOR
WHERE C_LNAME LIKE ‘SMITH%’;

Không có hàng nào được in ra. Điều gì đã xảy ra?

Điều xảy ra là câu vấn tin dựa trên kí tự có thể nhạy cảm với dạng chữ. Tức là, kí tự hoa có mã ASCII khác kí tự thường, do đó làm cho ‘SMITH’, ‘Smith’ và ‘smith’ được đánh giá là các xâu khác nhau (không bằng). Vì trong bảng không có ai với tên cuối bắt đầu bằng ‘SMITH’ nên ‘SMITH%’ (các kí tự in hoa) được dùng trong vấn tin không thể tạo ra xâu tương xứng. Các xâu tương xứng chỉ có thể được tạo ra nếu xâu vấn tin được viết chính xác như xâu trong bảng.

Một số RDBMS, chẳng hạn XDB, tự động tạo ra các quy ước cần thiết để loại bỏ tính nhạy cảm dạng chữ. Số khác, như ORACLE và dBASE IV, cung cấp một hàm UPPER đặc biệt để chuyển cả hai xâu kí tự bảng và vấn tin về dạng chữ in hoa. (Quy ước được hoàn thành chỉ trong bộ nhớ máy tính; nó không làm ảnh hưởng tới giá trị thực tế lưu trong bảng.) Chính vì vậy, nếu bạn muốn tránh kết quả không tương xứng dựa trên tính nhạy cảm dạng chữ, và nếu bạn RDBMS của bạn cho phép sử dụng hàm UPPER, bạn có thể tạo ra các kết quả giống nhau với câu vấn tin

SELECT V_COMPANY, C_LNAME, V_PHONE
FROM VENDOR
WHERE UPPER(C_LNAME) LIKE ‘SMITH%’;

Câu vấn tin trên có thể đưa ra một danh sách gồm tất cả các hàng có tên cuối bắt đầu với ‘Smith’, cho dù đó là xâu kí tự hoa hay thường như ‘Smith’, ‘SMith’, ‘smith’, ‘SMITH’,...

Một cách tự nhiên, các toán tử lôgic có thể dùng kết hợp với các kí tự thay thế. Chẳng hạn, câu vấn tin

SELECT V_COMPANY, C_LNAME, V_PHONE


FROM VENDOR
WHERE C_LNAME NOT LIKE ‘Smith%’;

sẽ cho kết quả



V_COMPANY

C_LNAME

V_PHONE

J.I. Supplies, Inc
Q&D Building Supplies

Fielding
Cavazos

666-233-1281
800-333-9011

Giả sử bạn không biết tên của một người nào đó được đánh vần là ‘Johnson’ hay ‘Johnsen’. Kí tự thay thế _ sẽ cho phép bạn tìm xâu tương ứng cho cả hai cách đánh vần. Tìm kiếm thích hợp được lập lên bởi câu vấn tin

SELECT *
FROM VENDOR


WHERE C_LNAME LIKE ‘Johns_n’;

Như vậy các kí tự thay thế cho phép chúng ta tạo ra xâu tương xứng khi chỉ biết gần đúng về xâu đó.

Nhiều câu vấn tin dùng với OR lôgic có thể xử lý dễ dàng hơn với sự giúp đowx của toán tử đặc biệt N. Chẳng hạn, câu vấn tin

SELECT *
FROM INVENTRY


WHERE V_CODE = 21344
ORV_CODE = 24288;

có thể được xử lý hiệu quả hơn với

SELECT *
FROM INVENTRY
WHERE V_CODE IN (21344, 24288);

Nếu thuộc tính định tập kí tự, các dấu nháy phải được sử để định nghĩa tập con. Chẳng hạn, nếu V_CODE đã được định nghĩa là CHAR(5) trong bước tạo bảng, câu vấn tin trên đây có thể viết lại

SELECT *
FROM INVENTRY
WHERE V_CODE IN (‘21344’, ‘24288’);

EXIST có thể được sử dụng bất cứ khi nào có yêu cầu thực hiện lệnh trên các giá trị thuộc tính không phải là null. Chẳng hạn, các hàng INVENTRY có thể được xoá với

DELETE FROM INVENTRY
WHERE P_CODE EXIST;

hoặc, nếu bạn muốn liệt kê tất cả các hàng ứng với các mã nhà cung cấp hiện có (khác null), bạn có thể dùng

SELECT *
FROM INVENTRY
WHERE V_CODE EXIST;



tải về 1.04 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   19   20   21   22   23   24   25   26   ...   29




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

    Quê hương