Thí dụ
Trải qua các điều kiện và trả về một giá trị khi điều kiện đầu tiên được đáp ứng:
Chọn orderID, số lượng, trường hợp & nbsp; & nbsp; & nbsp; Khi số lượng> 30 thì "Số lượng lớn hơn 30" & nbsp; & nbsp; & nbsp; Khi số lượng = 30 thì "Số lượng là 30" & nbsp; & nbsp; & nbsp; Khác "Số lượng dưới 30" endFrom orderDetails;
CASE
WHEN Quantity > 30 THEN "The quantity is greater than 30"
WHEN Quantity = 30 THEN "The quantity is 30"
ELSE "The quantity is under 30"
END
FROM OrderDetails;
Hãy tự mình thử »
Định nghĩa và cách sử dụng
Tuyên bố trường hợp trải qua các điều kiện và trả về một giá trị khi điều kiện đầu tiên được đáp ứng [như một câu lệnh if-then-else]. Vì vậy, một khi một điều kiện là đúng, nó sẽ ngừng đọc và trả về kết quả.
Nếu không có điều kiện nào là đúng, nó sẽ trả về giá trị trong mệnh đề khác.
Nếu không có phần khác và không có điều kiện nào là đúng, nó sẽ trả lại null.
Cú pháp
Trường hợp & nbsp; & nbsp; & nbsp; Khi điều kiện1 thì kết quả1 & nbsp; & nbsp; & nbsp; Khi điều kiện2 thì result2 & nbsp; & nbsp; & nbsp; Khi điều kiện sau đó kết quả & nbsp; & nbsp; & nbsp; Kết quả khác;
WHEN condition1 THEN
result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
Giá trị tham số
điều kiện1, điều kiện2, ... điều kiện | Yêu cầu. Điều kiện. Chúng được đánh giá theo thứ tự giống như chúng được liệt kê |
Kết quả1, kết quả2, ... kết quả | Yêu cầu. Giá trị để trả lại sau khi một điều kiện là đúng |
Chi tiết kỹ thuật
Từ MySQL 4.0 |
Nhiều ví dụ hơn
SQL sau đây sẽ đặt hàng khách hàng theo thành phố. Tuy nhiên, nếu City là NULL, thì hãy đặt hàng theo quốc gia:
Thí dụ
Chọn Tên tùy chỉnh, Thành phố, CountryFrom Khách hàng theo [Case & NBSP; & NBSP; & NBSP; Khi Thành phố là NULL sau đó là Quốc gia & NBSP; & NBSP; & NBSP; khác CityEnd];
FROM Customers
ORDER BY
[CASE
WHEN City IS NULL THEN Country
ELSE City
END];
Hãy tự mình thử »
Giả sử ta có bảng dữ liệu như sau:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Bây giờ cần lấy những sinh viên có năm sinh trong khoảng từ 1970 đến 1990 thì ta sử lệnh SELECT và ở
field_name BETWEEN begin AND end3 sử dụng toán tử
field_name BETWEEN begin AND end4:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Bài viết này được đăng tại [free tuts .net]
Thay vì sử dụng toán tử
field_name BETWEEN begin AND end5 thì ta sử dụng toán tử
field_name BETWEEN begin AND end6 với cú pháp:
Trong đó:
field_name: tên field cần kiểm tra
begin: giá trị bắt đầuCase not found for CASE statement error results.
Each
DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 consists of one or more SQL statements; an empty DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 is not permitted. To handle situations where no value is matched by any
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
7 clause, use an DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
2 containing an empty field_name BETWEEN begin AND end1 block, as shown in this example. [The indentation used here in the
DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
2 clause is for purposes of clarity only, and is not otherwise significant.] DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
Trong bài này chúng ta tìm hiểu cách sử dụng toán tử BETWEEN trong MySQL để xác định dữ liệu trong một khoảng nào đó. Để select trong khoảng thì ngoài BETWEEN ra ta có thể sử dụng toán tử AND để thay thế, chi tiết thế nào thì chúng ta cùng tìm hiểu nhé.BETWEEN trong MySQL để xác định dữ liệu trong một khoảng nào đó. Để select trong khoảng thì ngoài BETWEEN ra ta có thể sử dụng toán tử AND để thay thế, chi tiết thế nào thì chúng ta cùng tìm hiểu nhé.
Nội dung chính
- 1. Select trong khoảng với BETWEEN trong MySQL
- 2. Select ngoài khoảng với BETWEEN trong MySQL
- 3. Sử dụng BETWEEN với các kiểu dữ liệu khác
- 4. Lời kết
Vậy, để select trong khoảng nào đó thì ta thường sử dụng
field_name BETWEEN begin AND end6, tuy nhiên cũng phụ thuộc vào thói quen của mỗi người mà chọn giữa
field_name BETWEEN begin AND end4 với
field_name BETWEEN begin AND end6,
field_name BETWEEN begin AND end5 với
SELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 19902.freetuts.net, không được copy dưới mọi hình thức.
1. Select trong khoảng với BETWEEN trong MySQL
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
Giả sử ta có bảng dữ liệu như sau:sử lệnh SELECT và ở field_name BETWEEN begin AND end
3 sử dụng toán tử field_name BETWEEN begin AND end
4:
Bây giờ cần lấy những sinh viên có năm sinh trong khoảng từ 1970 đến 1990 thì ta sử lệnh SELECT và ở
field_name BETWEEN begin AND end3 sử dụng toán tử
field_name BETWEEN begin AND end4:
SELECT * FROM SINHVIEN WHERE NamSinh >= 1970 AND NamSinh 1990
Cách 2: Sử dụng SELECT * FROM SINHVIEN
WHERE NamSinh BETWEEN 1970 AND 1990
2: Sử dụng
SELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 19902
SELECT * FROM SINHVIEN WHERE NamSinh NOT BETWEEN 1970 AND 1990
Cả hai ví dụ đều có kết quả như sau:
3. Sử dụng BETWEEN với các kiểu dữ liệu khác
field_name BETWEEN begin AND end6 thường sử dụng với dữ liệu kiểu
SELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 19904, tuy nhiên bạn vẫn sử dụng được với các kiểu dữ liệu khác như:
SELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 1990
5: Tuân theo thứ tự trong bảng mãSELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 1990
6SELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 1990
7: Bạn nên sử dụng thêm hàm
4 chuyển dữ liệu sang dạngCASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE
SELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 1990
7 để có kết quả chính xác nhất.
Ví dụ 1: Lấy danh sách sinh viên có tên gồm các ký tự trong khoảng 'A' đến 'B': Lấy danh sách sinh viên có tên gồm các ký tự trong khoảng 'A' đến 'B'
SELECT * FROM SINHVIEN WHERE TenSV BETWEEN 'A' AND 'B'
Ví dụ 2: Giả sử bảng sinh viên thêm cột ngày nhập học. Bây giờ viết câu truy vấn lấy danh sách sinh viên nhập học từ ngày 01/01/2003 đến ngày 01/01/2014 thì ta làm như sau:: Giả sử bảng sinh viên thêm cột ngày nhập học. Bây giờ viết câu truy vấn lấy danh sách sinh viên nhập học từ ngày 01/01/2003 đến ngày 01/01/2014 thì ta làm như sau:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
04. Lời kết
Vậy, để select trong khoảng nào đó thì ta thường sử dụng
field_name BETWEEN begin AND end6, tuy nhiên cũng phụ thuộc vào thói quen của mỗi người mà chọn giữa
field_name BETWEEN begin AND end4 với
field_name BETWEEN begin AND end6,
field_name BETWEEN begin AND end5 với
SELECT * FROM SINHVIEN WHERE NamSinh BETWEEN 1970 AND 19902.
13.6.5.1 CASE Statement
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Or:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
The
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
4 statement for stored programs implements a complex conditional construct. For the first syntax,
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
5 is an expression. This value is compared to the CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
6 expression in each CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
7 clause until one of them is equal. When an equal CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
6 is found, the corresponding CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
9 clause DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 executes. If no CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
6 is equal, the DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
2 clause DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 executes, if there is one. This syntax cannot be used to test for equality with
DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
4 because DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
5 is false. See Section 3.3.4.6, “Working with NULL Values”. For the second syntax, each
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
7 clause DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
7 expression is evaluated until one is true, at which point its corresponding CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
9 clause DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 executes. If no DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
7 is equal, the DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
2 clause DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 executes, if there is one. If no
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
6 or DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
7 matches the value tested and the CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
4 statement contains no DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
2 clause, a Case not found for CASE statement error results. Case not found for CASE statement error results. Each
DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 consists of one or more SQL statements; an empty DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
0 is not permitted. To handle situations where no value is matched by any
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
7 clause, use an DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
2 containing an empty SELECT * FROM SINHVIEN WHERE TenSV BETWEEN 'A' AND 'B'2 block, as shown in this example. [The indentation used here in the
DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
2 clause is for purposes of clarity only, and is not otherwise significant.] DELIMITER |
CREATE PROCEDURE p[]
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|