# Chương 3. BIỂU THỨC
# 3.1. CASE
**CASE** thực hiện việc thêm giá trị cho một cột mới dựa trên điều kiện.
**a) Cú pháp:**

**b) Ví dụ:**
Thêm giá trị theo điều kiện của cột i:
```mysql
-- i[1,2,3]
SELECT i, CASE WHEN i > 2 THEN 1 ELSE 0 END AS test
FROM integers;
```
Phần **WHEN THEN** của biểu thức điều kiện **CASE** có thể được nối tiếp, bất cứ khi nào bất kỳ điều kiện nào trả về giá trị true cho một bộ đơn lẻ, biểu thức tương ứng sẽ được đánh giá và trả về.
```mysql
SELECT i, CASE WHEN i = 1 THEN 10 WHEN i = 2 THEN 20 ELSE 0 END AS test
FROM integers;
```
# 3.2. So sánh
**Toán tử so sánh:**
SQL\_Lab cung cấp 6 toán tử so sánh tiêu chuẩn. Bất cứ khi nào một trong hai đối số đầu vào là **NULL** thì đầu ra của phép so sánh là **NULL**.
**Cú pháp:**

**Toán tử so sánh:**
**Toán tử**
| **Mô tả**
| **Ví dụ**
| **Kết quả**
|
<
| Bé hơn
| 2 < 3
| True
|
>
| Lớn hơn
| 2 > 3
| False
|
<=
| Bé hơn hoặc bằng
| 2 <= 3
| True
|
>=
| Lớn hơn hoặc bằng
| 4 >= Null
| Null
|
=
| Bằng
| Null = Null
| Null
|
< > hoặc
| Không bằng
| 2 < > 2
| False
|
**BEETWEEN và IS \[NOT\] NULL**
Bên cạnh các toán tử so sánh chuẩn, còn có các toán tử **BETWEEN** và **IS (NOT) NULL**. Các toán tử này hoạt động rất giống các toán tử, nhưng có cú pháp đặc biệt theo chuẩn SQL. Chúng được hiển thị trong bảng bên dưới.
**Cú pháp:**

**BEETWEEN và IS \[NOT\] NULL**
**Thuộc tính**
| **Mô tả**
|
a BETWEEN x AND y
| x < a và a < y
|
a NOT BETWEEN x AND y
| x > a và a > y
|
IS NULL
| true nếu biểu thức NULL, false nếu ngược lại
|
IS NOT NULL
| false nếu biểu thức NULL, true nếu ngược lại
|
**Lưu ý: BETWEEN** và **NOT BETWEEN** chỉ tương đương với các ví dụ bên dưới trong trường hợp cả a, x và y đều cùng kiểu, vì **BETWEEN** sẽ ép kiểu tất cả các đầu vào của nó thành cùng kiểu.
# 3.3. Toán tử IN
**a) Cú pháp**

** **
**b) Toán tử**
**IN**
Toán tử **IN** kiểm tra sự chứa đựng của biểu thức bên trái bên trong tập hợp các biểu thức ở phía bên phải (P). Toán tử **IN** trả về true nếu biểu thức có trong P, false nếu biểu thức không có trong P và P không có giá trị NULL hoặc NULL nếu biểu thức không có trong P và P có giá trị NULL.
```mysql
SELECT 'Toán' IN ('Toán', 'Văn');
-- true
```
```mysql
SELECT 'Toán' IN ('Văn', 'Anh');
-- false
```
```mysql
SELECT 'Toán' IN ('Văn', Toán', NULL);
-- true
```
```mysql
SELECT 'Toán' IN ('Văn', 'Anh', NULL);
-- NULL
```
**NOT IN**
**NOT IN** có thể được sử dụng để kiểm tra xem một phần tử có tồn tại trong tập hợp hay không. x **NOT IN** y tương đương với **NOT**(x **IN** y)
##
# 3.4. Toán tử logic
**a) Cú pháp:**

** b) Toán từ:**
**Toán tử nhị phân:**
a
| b
| a AND b
| a OR b
|
true
| true
| true
| True
|
true
| false
| false
| false
|
true
| NULL
| NULL
| true
|
false
| false
| false
| false
|
false
| NULL
| false
| NULL
|
NULL
| NULL
| NULL
| NULL
|
**Lưu ý:** Các toán tử logic liên quan đến NULL không phải lúc nào cũng có giá trị là NULL.
Ví dụ: NULL AND false sẽ đánh giá là sai và NULL OR true sẽ đánh giá là đúng. Dưới đây là các bảng sự thật đầy đủ.
**Toán tử một ngôi:**
a
| NOT a
|
true
| false
|
false
| true
|
NULL
| NULL
|