Hướng dẫn SQL & XQuery cho IBM DB2, Phần 2: Các
truy vấn cơ sở
Cơ bản về truy vấn SQL
Pat Moffatt, Giám đốc Chương trình quản lý thông tin, Sáng kiến học đường, IBM
Bruce Creighton, Chuyên viên lập kế hoạch các phần kỹ năng, IBM
Jessica Cao, Chuyên viên phát triển các công cụ đào tạo, IBM
Tóm tắt: Thông qua một loạt các ví dụ đơn giản, hướng dẫn này minh họa làm
thế nào để lấy ra từ một cơ sở dữ liệu IBM® DB2® bằng các lệnh SELECT của
SQL chuẩn. Hướng dẫn này mô tả cách lấy ra các hàng từ một bảng cơ sở dữ liệu
quan hệ, lấy ra những cột cụ thể, lấy ra những hàng cụ thể, thực hiện các phép toán
lôgic trên dữ liệu đã lấy ra và sử dụng các ký tự đại diện trong các điều kiện tìm
kiếm. Hướng dẫn này là Phần 2 của loạt bài hướng dẫn SQL & XQuery cho loạt
bài IBM DB2 .
Trước khi bạn bắt đầu
Về loạt bài này
Loạt bài hướng dẫn này dạy các chủ đề SQL từ cơ bản đến nâng cao và các chủ đề
XQuery cơ bản. Nó cũng chỉ ra cách diễn đạt các câu hỏi nghiệp vụ thường gặp
bằng các truy vấn cơ sở dữ liệu sử dụng các câu truy vấn SQL hay các câu truy
vấn XQuery. Những người phát triển ứng dụng và những người quản trị cơ sở dữ
liệu có thể sử dụng hướng dẫn này để nâng cao các kỹ năng truy vấn cơ sở dữ liệu
của mình. Các thành viên tham gia sáng kiến học đường IBM có thể sử dụng loạt
hướng dẫn này như một phần trong chương trình giảng dạy cơ sở dữ liệu của họ.
Tất cả các ví dụ trong bài này là dựa trên Aroma, một cơ sở dữ liệu mẫu chứa các
dữ liệu doanh thu về các sản phẩm cà phê và chè đã bán trong các cửa hàng trên
khắp nước Mỹ. Mỗi ví dụ gồm có ba phần:
Một câu hỏi kinh doanh dưới dạng ngôn ngữ thường ngày
Một hoặc nhiều Ví dụ truy vấn, được biểu diễn bằng SQL hay Xquery
Một bảng các kết quả trả về từ cơ sở dữ liệu
Hướng dẫn này được thiết kế để cho phép các học viên học tập ngôn ngữ SQL và
XQuery. Cũng như học bất cứ cái gì khác, việc bổ sung thêm các bài tập thực hành
là rất quan trọng. Dữ liệu và các định nghĩa bảng sẽ tạo điều kiện thuận lợi cho các
bài tập thực hành này.
Đối với các sinh viên sử dụng tài liệu này như một phần của khoá học, hãy nhận từ
thầy hướng dẫn của mình các chỉ dẫn để kết nối tới cơ sở dữ liệu Aroma và tìm
hiểu mọi sự khác biệt giữa hướng dẫn và cài đặt tại máy cục bộ của mình.
Hướng dẫn này được viết cho DB2 9 Express-C trên nền UNIX®, Linux® và
Windows® (trước đây gọi là Viper).
Về hướng dẫn này
Sử dụng một loạt các ví dụ đơn giản, hướng dẫn này minh họa cách lấy ra dữ liệu
từ một cơ sở dữ liệu DB2 IBM bằng các lệnh SELECT của SQL tiêu chuẩn.
Hướng dẫn này mô tả cách để:
Lấy ra các hàng từ một bảng cơ sở dữ liệu quan hệ
Lấy ra các cột cụ thể từ một bảng cơ sở dữ liệu quan hệ
Lấy ra các hàng cụ thể từ một bảng cơ sở dữ liệu quan hệ
Thực hiện các phép toán lôgic trên dữ liệu được lấy ra
Sử dụng các ký tự đại diện trong các điều kiện tìm kiếm
Kết nối tới một cơ sở dữ liệu
Bạn cần kết nối tới một cơ sở dữ liệu trước khi có thể sử dụng các câu lệnh SQL
để truy vấnhay xử lý dữ liệu. Lệnh CONNECT kết hợp một kết nối cơ sở dữ liệu
với một tên người sử dụng.
Thông qua người hướng dẫn tìm ra tên cơ sở dữ liệu bạn cần nối tới. Đối với loạt
bài này, tên cơ sở dữ liệu là aromadb.
Để kết nối tới cơ sở dữ liệu aromadb, gõ lệnh sau đây vào trong bộ xử lý dòng
lệnh DB2:
CONNECT TO aromadb USER userid USING
password
Thay thế "userid" và "password" bằng số ID và mật khẩu của người sử dụng mà
bạn đã nhận được từ thầy hướng dẫn. Nếu máy không hỏi userid và password thì
chỉ cần gõ vào lệnh sau đây:
CONNECT TO aromadb
Thông điệp sau báo cho bạn biết rằng đã tạo kết nối thành công:
Database Connection Information
Database server = DB2/NT 9.0.0
SQL authorization ID = USERID
Local database alias = AROMADB
Khi đã kết nối được, bạn có thể bắt đầu sử dụng cơ sở dữ liệu.
Sáu mệnh đề của lệnh SELECT
Có sáu mệnh đề có thể được sử dụng trong một câu lệnh SQL. Sáu mệnh đề này là
SELECT, FROM, WHERE, GROUP BY, HAVING, và ORDER BY. Phải viết
mã lệnh các mệnh đề trên theo một tuần tự cụ thể. Ở đây ta sẽ chỉ nói tóm tắt về
từng mệnh đề. Bạn sẽ học về chúng kỹ hơn mỗi khi bắt gặp chúng sau này.
1.
SELECT
>(các) tên cột *
2. FROM
bảng hoặc các
khung cảnh
3.
WHERE
các điều kiện
hoặc thuộc tính
được đáp ứng
4. GROUP
BY
các tập con các
hàng
5.
HAVING
một điều kiện
chung như một
nhóm
6. ORDER
BY
một ph
ương pháp
xếp loại
Chú ý: (Các) tên cột đúng hơn nên được gọi là các phần tử, bởi vì lệnh SELECT
hiển thị cả các cột có trong bảng lẫn các cột có thể do SQL tạo ra như một kết quả
thực hiện truy vấn.
Ví dụ truy vấn
SELECT perkey, sum(dollars)
FROM aroma.sales
WHERE perkey < 50
GROUP BY perkey
HAVING sum(dollars) > 8000
ORDER BY perkey;
Về truy vấn
Mệnh đề SELECT là nơi liệt kê các cột mà bạn quan tâm. SELECT hiển thị những
gì bạn đưa vào đây. Có thể đặt vào mệnh đề SELECT một số các mục khác sẽ
được giải thích sau. Trong ví dụ này, cột perkey và tổng của cột dollar được chọn.
Mệnh đề FROM chỉ rõ bảng nơi bạn lấy thông tin từ đó. Có thể liệt kê nhiều hơn
một bảng. Số lượng các bảng mà bạn có thể liệt kê tùy thuộc riêng từng hệ điều
hành. Trong ví dụ này, cả hai cột được chọn ra từ bảng Sales.
Hai mệnh đề SELECT và FROM là bắt buộc phải có; các mệnh đề còn lại là tuỳ
chọn và dùng để lọc hay hạn chế, gộp nhóm hay kết hợp các mục dữ liệu và điều
khiển việc sắp xếp kết quả.
Mệnh đề WHERE là nơi chỉ rõ một điều kiện để lọc dữ liệu. Nó giúp bạn lọc dữ
liệu không mong muốn ra khỏi kết quả cuối cùng. WHERE đưa ra một tập con các
hàng trong bảng. Trong ví dụ này, chỉ các hàng có giá trị perkey thấp hơn 50 được
chọn .
GROUP BY cho phép nhóm dữ liệu để đạt được các kết quả có ý nghĩa hơn. Thay
vì nhận được một số là tổng doanh thu tính bằng đôla của tất cả các hàng được
chọn, bạn có thể phân chia thành từng nhóm theo perkey tđể nhận được các tổng
doanh thu từng ngày. Trong ví dụ trên, việc này được thực hiện bằng chỉ thị
GROUP BY perkey.
HAVING đặt một điều kiện đối với các nhóm. Trong ví dụ này, truy vấn sẽ chỉ trả
về những ngày có tổng doanh thu lớn hơn 8.000.
ORDER BY sắp xếp thứ tự các hàng kết quả. Bạn có thể chọn sắp xếp các hàng
kết quả bằng chỉ thị ASC (sắp theo thứ tự tăng dần) hay DESC (sắp theo thứ tự
giảm dần). Giá trị mặc định là ASC.
Lệnh SELECT là lệnh thường được dùng nhất của ngôn ngữ xử lý dữ liệu (DML).
Các lệnh xử lý dữ liệu khác (UPDATE, INSERT, và DELETE) và hai thành phần
nữa của SQL (ngôn ngữ định nghĩa dữ liệu và ngôn ngữ điều khiển dữ liệu) sẽ
được bàn đến trong phần 6 của loạt bài này.
Sử dụng lệnh SELECT để lấy ra dữ liệu
Câu hỏi
Những vùng nào, những hạt nào, những thị trường nào được định nghĩa trong cơ
sở dữ liệu Aroma?
Giải đáp
Bước đầu tiên là xác định bảng có chứa các hàng và các cột có thể trả lời câu hỏi
này. Trong phần 1, có một sơ đồ của các bảng trong AROMADB. Nhìn vào phần
dưới, bên trái của sơ đồ, có một bảng gọi là Market. Bảng này có chứa các cột
mktkey, hq_city, hq_state, district và region. Việc liệt kê nội dung của bảng này sẽ
trả lời câu hỏi của chúng ta và có thể được thực hiện bằng lệnh SELECT của SQL.
Ví dụ truy vấn
SELECT * FROM aroma.market;
Kết quả
Mktkey
Hq_city Hq_state
District Region
1 Atlanta GA Atlanta South
2 Miami FL Atlanta South
3
New Orleans
LA
New Orleans
South
4 Houston TX
New Orleans
South
5
New York
NY
New York
North
6 Philadelphia PA
New York
North
7 Boston MA Boston
North
8 Hartford CT Boston
North
9 Chicago IL Chicago Central
10 Detroit MI Chicago Central
11 Minneapolis MN Minneapolis Central
12 Milwaukee WI Minneapolis Central
14 San Jose CA San Francisco West
15 San Francisco CA San Francisco West
16 Oakland CA San Francisco West
17 Los Angeles CA Los Angeles West
19 Phoenix AZ Los Angeles West
Lấy ra dữ liệu: Lệnh SELECT
Bạn sử dụng lệnh SELECT để lấy ra các cột và các hàng dữ liệu từ các bảng cơ sở
dữ liệu; để thực hiện các phép toán số học đối với dữ liệu; để nhóm, để xếp thứ tự
hay để đồng thời nhóm và xếp thứ tự dữ liệu. Trong đa số các trường hợp, lệnh
SELECT gồm có một biểu thức truy vấn đơn giản bắt đầu bằng từ khóa SELECT
và tiếp theo là một hoặc nhiều mệnh đề hay các mệnh đề con.
Lệnh SELECT cơ bản nhất gồm có hai từ khóa, SELECT và FROM:
SELECT column name(s)
FROM table name(s)
column
name(s)
Các tên cột hoặc biểu thức SQL được phân tách bằng các dấu phẩy. Một
dấu sao (*) có thể được dùng để liệt kê tất cả các tên cột xuất hiện trong
danh sách (các) tên bảng
table
name(s)
Các tên bảng có thể là danh sách các bảng hay là một lệnh
SELECT. Các
tên bảng được phân tách bằng các dấu phẩy. (Các) bảng đư
ợc tham chiếu
phải chứa (các) tên cột xuất hiện sau từ khóa SELECT. Trong ví dụ này,
lệnh FROM tham chiếu đến AROMA.MARKET. Sau này trong phần 3
sẽ thảo luận chi tiết hơn về quy ước đặt tên, Table Names and Schemas
(Các tên bảng và lược đồ). Trong trường hợp này, mệnh đề FROM tham
chiếu đến tên bảng đầy đủ. Phần đầu tiên là tên lược đồ và phần thứ hai
là tên bảng. Các lược đồ rất có ích khi nhóm các bảng tương tự và các
đối tượng DB2 khác. Trong cơ sở dữ liệu AROMADB, tất cả các bảng
được thiết lập với lược đồ chung là AROMA .
Dạng khác của lệnh SELECT
SELECT mktkey, hq_city, hq_state, district, region FROM
aroma.market
Truy vấn trên sinh ra cùng một kết quả giống như SELECT * FROM
aroma.market; tuy nhiên, thay cho việc sử dụng dấu sao (*) để liệt kê tất cả các
cột, ở đây các tên cột đều được nêu ra.
Chú ý: SELECT và FROM (và tất cả các từ khác viết bằng chữ hoa) là các
từ khóa dành riêng của SQL. Các từ này phải được sử dụng chính xác
đúng như đã định nghĩa trong SQL chuẩn. Chúng ta dùng định dạng chữ
hoa trong bài này để làm cho các từ khóa dễ thấy hơn; SQL không phân
biệt chữ hoa chữ thường, vì vậy các từ khóa có thể viết theo chữ hoa hay
chữ thường đều được.
Các lưu ý về cách dùng
Dấu chấm phẩy (;) ở cuối của mỗi ví dụ trong hướng dẫn này không phải là một
phần bắt buộc của cú pháp SQL. Theo quy ước, ngôn ngữ SQL bỏ qua các khoảng
trống thừa, các dấu tab và các dấu hết dòng. Thế thì, vì dấu chấm phẩy là một dấu
kết thúc câu lệnh, do đó không cần phải có nếu bạn chỉ thực hiện một lệnh đơn.
Trong trường hợp bạn tạo ra một loạt các câu lệnh SQL thành kịch bản, dấu chấm
phẩy sẽ là dấu kết thúc rõ ràng cho mỗi lệnh. Tuỳ thuộc vào công cụ SQL tương
tác mà bạn sử dụng để nhập vào các truy vấn, có thể cần hay không cần một dấu
kết thúc lệnh như thế. Khi sử dụng Bộ xử lý dòng lệnh để thực hiện nhiều lệnh
SQL, dấu chấm phẩy là bắt buộc phải có để báo hiệu kết thúc của từng lệnh.
Sử dụng danh sách SELECT để lấy ra các cột cụ thể
Câu hỏi
Những hạt nào và những vùng nào được định nghĩa trong cơ sở dữ liệu Aroma?
Ví dụ truy vấn
SELECT district, region
FROM aroma.market;
Kết quả
District Region
Atlanta South
Atlanta South
New Orleans South
New Orleans South
New York
North
New York
North
Boston
North
Boston
North
Chicago Central
Chicago Central
Minneapolis Central
Minneapolis Central
San Francisco West
San Francisco West
San Francisco West
Los Angeles West
Los Angeles West
Lấy ra các cột cụ thể
Bằng cách đặt tên cho các cột trong danh sách SELECT của lệnh SELECT, bạn có
thể lấy ra một nhóm cột cụ thể từ bất kỳ bảng nào. Các cột được trả về theo thứ tự
mà bạn liệt kê trong danh sách SELECT.
Về truy vấn
Ví dụ truy vấn yêu cầu một danh sách các hạt và các vùng tương ứng của chúng
lấy từ bảng Market .
Các lưu ý về cách dùng
Mặc dù các tên cột trong danh sách SELECT phải được định nghĩa trong các bảng
được tham chiếu trong mệnh đề FROM, các biểu thức khác cũng có thể xuất hiện
trong danh sách SELECT. Một vài ví dụ về các biểu thức như vậy sẽ được thảo
luận sau trong loạt bài này.
Khi danh sách SELECT không bao gồm tất cả các cột trong một bảng, một truy
vấn có thể trả về các hàng trùng nhau, giống như trong Ví dụ truy vấn trước đây.
Bạn có thể loại trừ các hàng trùng nhau bằng cách sử dụng từ khóa DISTINCT. Ví
dụ, truy vấn sau đây chỉ trả về các tên hạt và các tên vùng phân biệt trong bảng
Market:
SELECT DISTINCT district, region
FROM aroma.market;
District Region
Chicago Central
Minneapolis Central
Boston
North
New York
North
Atlanta South
New Orleans South
Los Angeles West
San Francisco West
Sử dụng mệnh đề WHERE để lấy ra các hàng cụ thể
Câu hỏi
Các sản phẩm nào được bán mà không cần đóng gói?
Ví dụ truy vấn
SELECT prod_name, pkg_type
FROM aroma.product
WHERE pkg_type = 'No pkg';
Kết quả
Prod_Name Pkg_Type
Veracruzano
No pkg
Xalapa Lapa
No pkg
Colombiano
No pkg
Expresso XO
No pkg
La Antigua
No pkg
Lotta Latte
No pkg
Cafe Au Lait
No pkg
NA Lite
No
pkg
Aroma Roma
No pkg
Demitasse Ms
No pkg
Darjeeling Number 1
No pkg
Darjeeling Special
No pkg
Assam Grade A
No pkg
Assam Gold Blend
No pkg
Earl Grey
No pkg
English Breakfast
No pkg
Irish Breakfast
No pkg
Special Tips
No pkg
Gold Tips
No pkg
Breakfast Blend
No pkg
Ruby's Allspice
No pkg
Coffee Mug
No pkg
Travel Mug
No pkg
Aroma t-shirt
No pkg
Aroma baseball cap
No pkg
Lấy ra các hàng cụ thể: Mệnh đề WHERE
Bằng cách thêm vào một tập hợp các điều kiện lôgíc trong truy vấn, bạn có thể lấy
ra một nhóm các hàng cụ thể từ một bảng. Các điều kiện lôgíc được khai báo trong
mệnh đề WHERE. Nếu một hàng thỏa mãn các điều kiện này, truy vấn sẽ trả về
hàng đó; nếu không thỏa mãn, hàng sẽ bị loại bỏ. Các điều kiện lôgíc cũng được
gọi là các điều kiện tìm kiếm, các thuộc tính, các ràng buộc, hay các hạn chế.
Mệnh đề WHERE
SELECT column name(s) FROM table name(s) [WHERE search_condition];
search_condition Điều kiện này sẽ được tính ra là đúng hay là sai.
Các dấu móc vuông ([ ]) nói rằng mệnh đề WHERE là tuỳ chọn.
Về truy vấn
Ví dụ truy vấn lấy ra và hiển thị tên của các sản phẩm không đóng gói sẵn. DB2 9
IBM đánh giá điều kiện sau đây cho mỗi hàng của bảng Product trả về những
hàng nào thoả mãn điều kiện:
pkg_type = 'No pkg'
Các lưu ý về cách dùng
Một chữ là một chuỗi ký tự được bao trong cặp dấu nháy đơn. Vì thế, để thể hiện
một dấu nháy đơn nằm trong chữ, phải sử dụng hai dấu nháy đơn (''). Ví dụ:
'Scarlet O''Hara'
Các chữ phải được biểu diễn chính xác như đã được lưu trong cơ sở dữ liệu, là chữ
hoa hay chữ thường. Ví dụ, điều kiện sau đây:
class_type = 'Bulk_beans'
là sai khi cột được tham chiếu chứa chuỗi sau đây:
'BULK_beans'
Các hàm tập hợp không được phép dùng trong mệnh đề WHERE. Để biết chi tiết
hơn về các hàm tập hợp, tham khảo Phần 3, Using the ORDER BY clause (Cách
dùng mệnh đề ORDER BY).
Sử dụng các từ nối AND, NOT, và OR để tạo ra các điều kiện phức hợp
Câu hỏi
Những thành phố nào và những hạt nào nằm trong các vùng phía Nam hoặc phía
Tây?
Ví dụ truy vấn
SELECT hq_city, district, region
FROM aroma.market
WHERE region = 'South' OR region = 'West';
Kết quả
Hq_city District Region
Atlanta Atlanta South
Miami Atlanta South
New Orleans
New Orleans
South
Houston
New Orleans
South
San Jose San Francisco West
San Francisco San Francisco West
Oakland San Francisco West
Los Angeles Los Angeles West
Phoenix Los Angeles West
Xác lập các điều kiện hỗn hợp: AND, OR, NOT và các dấu ngoặc
Để lựa chọn các hàng một cách tinh tế hơn, có thể nối các điều kiện tìm kiếm với
nhau và quy định một trình tự đánh giá chúng (bằng các cặp dấu ngoặc thích hợp).
Một điều kiện tìm kiếm xác lập một điều kiện là “đúng", "sai", hay "không rõ" đối
với một hàng đã cho. Ta tính ra kết quả của một điều kiện tìm kiếm phức hợp bằng
cách áp dụng các toán tử lôgic (AND, OR, NOT) đã định lên các kết quả của các
thuộc tính đã xác lập. Nếu các toán tử lôgic không có mặt, kết quả của điều kiện
tìm kiếm là kết quả của thuộc tính đã xác lập. AND và OR được định nghĩa trong
bảng sau đây, với P và Q là các thuộc tính bất kỳ:
Các bảng chân lý cho AND và OR
P Q P AND Q P OR Q
True True True True
True False False True
True Unknown Unknown True
False True False True
False False False False
False Unknown False Unknown
Unknown True Unknown True
Unknown False False Unknown
Unknown Unknown Unknown Unknown
Phủ định (đúng) là sai, Phủ định (sai) là đúng và Phủ định (không rõ) vẫn là không
rõ.
Các điều kiện tìm kiếm bên trong cặp dấu ngoặc đơn được đánh giá đầu tiên. Nếu
trình tự đánh giá không được xác lập bằng các dấu ngoặc thì NOT được áp dụng
trước AND, AND được áp dụng trước OR. Nếu các phép toán lôgic có cùng mức
ưu tiên thì trình tự đánh giá là không xác định. Điều này cho phép tối ưu hóa các
điều kiện tìm kiếm.
Sử dụng AND, OR và các dấu ngoặc trong một mệnh đề WHERE
Câu hỏi
Những cửa hàng lớn hay nhỏ nào của công ty Cà phê và Chè Aroma được đặt tại
Los Angeles hoặc San Jose?
Ví dụ truy vấn
SELECT store_type, store_name, city
FROM aroma.store
WHERE (store_type = 'Large' OR
store_type = 'Small')
AND (city = 'Los Angeles' OR city = 'San
Jose');
Kết quả
Store_Type Store_Name City
Large San Jose Roasting Company San Jose
Large Beaches Brew Los Angeles
Small Instant Coffee San Jose
Xác lập các điều kiện tìm kiếm phức tạp
Các điều kiện tìm kiếm, đặc biệt là các điều kiện được lập ra để phân tích hỗ trợ ra
quyết định, có thể trở nên phức tạp. Tuy được xây dựng từ các điều kiện đơn giản
và sử dụng các từ nối AND, OR và NOT, các điều kiện phức tạp có thể thành khó
hiểu. May thay, SQL là tự do về định dạng, vì thế cấu trúc lôgíc của các điều kiện
này có thể được làm rõ ra bằng cách sử dụng các ký tự tab, các khoảng trống và
các ký tự xuống dòng để định nghĩa quan hệ lôgíc.
Về truy vấn
Ví dụ truy vấn lấy ra và hiển thị tên các cửa hàng của Công ty Cà phê và Chè
Aroma cả lớn và nhỏ đặt tại Los Angeles hay San Jose.
Dấu ngoặc trong truy vấn này là thiết yếu vì từ nối AND có mức ưu tiên cao hơn
hơn so với từ nối OR. Nếu loại bỏ dấu ngoặc, truy vấn trả về một bảng kết quả
khác.
Ví dụ truy vấn (không có dấu ngoặc đơn)
SELECT store_type, store_name, city
FROM aroma.store
WHERE store_type = 'Large' OR store_type = 'Small'
AND city = 'Los Angeles' OR city = 'San Jose';
Kết quả
Store_Type Store_Name City
Large San Jose Roasting Company San Jose
Large Beaches Brew Los Angeles
Small Instant Coffee San Jose
Large Miami Espresso Miami
Large Olympic Coffee Company Atlanta
Các lưu ý về cách dùng
Một truy vấn lấy ra và hiển thị bất kỳ dữ liệu nào mà không rõ ràng bị loại bỏ bởi
điều kiện tìm kiếm của nó. Một truy vấn chỉ có vài điều kiện chung chung có thể
trả về một số lượng khổng lồ các hàng.
Bất cứ khi nào mà bạn còn hồ nghi về cách thức máy chủ đánh giá một điều kiện
hỗn hợp, hãy dùng các dấu ngoặc để nhóm các điều kiện một cách rõ ràng nhằm
áp đặt một trình tự đánh giá mong muốn.
Sử dụng các toán tử lớn hơn (>) và nhỏ hơn hoặc bằng nhau (<=) operators
Câu hỏi
Những thành phố và những hạt nào có mã định danh Mktkey lớn hơn 4 và nhỏ
hơn hay bằng 12?
Ví dụ truy vấn
SELECT mktkey, hq_city, hq_state,
district
FROM aroma.market
WHERE mktkey > 4
AND mktkey <= 12;
Kết quả
Mktkey Hq_City Hq_State District
5
New York
NY
New York
6 Philadelphia PA
New York
7 Boston MA Boston
8 Hartford CT Boston
9 Chicago IL Chicago
10 Detroit MI Chicago
11 Minneapolis MN Minneapolis
12 Milwaukee WI Minneapolis
Sử dụng các toán tử so sánh
Các điều kiện đánh giá đúng hay sai và có thể được biểu diễn bằng các toán tử so
sánh hay các thuộc tính so sánh. SQL gồm có các toán tử so sánh sau đây:
Toán tử Tên
= Bằng
<
Nh
ỏ hơn
> Lớn hơn
<> Không bằng
>= Lớn hơn hoặc bằng
<=
Nh
ỏ hơn hoặc bằng
Về truy vấn
Ví dụ truy vấn lấy ra và hiển thị tất cả các thành phố và các hạt có Mktkey tương
ứng lớn hơn 4 nhưng nhỏ hơn hoặc bằng 12.
Cột Mktkey chứa các giá trị số nguyên có thể so sánh được với các giá trị số khác.
Tuy nhiên, nếu bạn so sánh một số nguyên với một ký tự thì máy chủ sẽ gửi về
một thông báo lỗi:
SELECT mktkey, hq_city, hq_state, district
FROM aroma.market
WHERE mktkey > '4';
[IBM][CLI Driver][DB2/LINUX] SQL0401N Kiểu dữ liệu của các toán
hạng trong phép toán ">" là không tương thích. SQLSTATE=42818
Bạn có thể nhận được trợ giúp trong diễn giải các thông báo lỗi và xác định hành
động sửa lỗi cần thực hiện bằng cách sử dụng Trung tâm thông tin DB2. Trung
tâm này được giới thiệu trong phần 1 của loạt bài này.
Các lưu ý về cách dùng
Các biểu thức điều kiện phải so sánh các giá trị của các kiểu dữ liệu có thể so sánh
được. Nếu bạn cố so sánh các loại dữ liệu không giống nhau, máy chủ sẽ trả về
hoặc một thông báo lỗi hoặc một kết quả sai. Có thể dùng các toán tử so sánh để
so sánh một chuỗi ký tự với chuỗi khác như minh họa trong biểu thức điều kiện
hợp lệ sau đây:
(city > 'L')
Để có thêm nhiều thông tin hơn về các kiểu dữ liệu có thể so sánh được, hãy tham
khảo SQL Reference Guide .
Sử dụng thuộc tính so sánh IN
Câu hỏi
Các thành phố nào nằm trong các hạt Chicago, New York, và New Orleans?
Ví dụ truy vấn
SELECT hq_city, hq_state, district
FROM aroma.market
WHERE district IN
('Chicago', 'New York', 'New Orleans');
Kết quả
Hq_City Hq_State District
New Orleans LA
New Orleans
Houston TX
New Orleans
New York
NY
New York
Philadelphia PA
New York
Chicago IL Chicago
Detroit MI Chicago
Sử dụng các thuộc tính so sánh
Một điều kiện đơn giản có thể được biểu diễn bằng các thuộc tính so sánh SQL
sau đây:
Thuộc tính
BETWEEN expression1 AND expression2
LIKE pattern
IN (list)
IS NULL
IS NOT NULL
ALL
SOME or ANY
EXISTS
Các ví dụ về các thuộc tính ALL, SOME hay ANY và EXISTS được trình bày
trong phần 5 của loại bài này.
Để biết các mô tả cú pháp và các ví dụ về tất cả các thuộc tính này cũng như các
định nghĩa chi tiết về các biểu thức đơn giản và phức tạp, hãy tham khảo SQL
Reference Guide .
Về truy vấn
Ví dụ truy vấn liệt kê tất cả các thành phố trong các hạt Chicago, New York và
New Orleans. Nó có thể cũng được viết với toán tử so sánh bằng (=) và một tập
hợp của các điều kiện OR.