3.1 So sánh các giá trị: <, >, =, <>
Một trong những từ khóa phổ biến nhất được sử dụng khi viết truy vấn SQL là từ khóa WHERE
. Với sự trợ giúp của nó, chúng tôi cho MySQL biết những hàng nào trong bảng mà chúng tôi muốn lọc (chọn).
Sau từ khóa, WHERE
bạn có thể viết các điều kiện rất phức tạp và lắt léo. Vậy điều kiện này có thể chứa những phép toán nào?
Nhà điều hành | Sự miêu tả | Ví dụ |
---|---|---|
< | Ít hơn | lương < 40000 |
> | Hơn | lương > 100000 |
<= | Ít hơn hoặc bằng | tuổi <= 25 |
>= | Hơn hoặc bằng | tuổi >= 18 |
= | bằng | nghề nghiệp = 'Lập trình viên' |
<>, != | Không công bằng | Năm(join_date) != 2015 |
Không giống như ngôn ngữ Java, đối với sự bình đẳng nghiêm ngặt, một ký tự bằng được sử dụng ở đây chứ không phải hai ký tự .
Nếu bạn muốn kiểm tra xem các giá trị có khác nhau không, thì điều này có thể được thực hiện theo hai cách: Cách tiếp cận đầu <>
tiên !=
được sử dụng trong các ngôn ngữ như Pascal, cách thứ hai là điển hình cho các ngôn ngữ như C ++ và Java.
Đối với phép gán trong SQL, nó được sử dụng :=
như trong Pascal, nhưng bản thân phép gán rất hiếm khi được sử dụng.
Hãy viết một truy vấn trong đó chúng tôi hiển thị tất cả những nhân viên không được thuê vào năm 2015.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
1 | Ivanov Ivan | lập trình viên | 100.000 | 25 | 30-06-2012 |
2 | Petrov Petr | lập trình viên | 80.000 | 23 | 2013-08-12 |
3 | Ivanov Serge | Kiểm thử | 40.000 | ba mươi | 2014-01-01 |
6 | Vaska | con mèo | 1.000 | 3 | 2018-01-01 |
3.2 Các phép toán logic AND, OR, NOT
Bạn cũng có thể WHERE
sử dụng các phép toán logic AND
và OR
. NOT
Và chúng được viết chính xác như tôi đã mô tả chúng ở đây. Không &&
, ||
hoặc!
Hãy viết một truy vấn SQL trong đó chúng tôi chọn những nhân viên trên 20 tuổi và nhận mức lương dưới 50K.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
3 | Ivanov Serge | Kiểm thử | 40.000 | ba mươi | 2014-01-01 |
5 | kirienko anastasia | Quản lý văn phòng | 40.000 | 25 | 2015-10-10 |
Quá dễ dàng. Hãy viết một truy vấn trong đó chúng tôi chọn những nhân viên nhận được hơn 100 nghìn và không làm giám đốc:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
Ở đây chúng tôi đặc biệt !=
sử dụng toán tử thay vì ký hiệu NOT
.
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
1 | Ivanov Ivan | lập trình viên | 100.000 | 25 | 30-06-2012 |
3.3 GIỮA: phạm vi giá trị
Ngoài ra trong SQL còn có một toán tử đặc biệt BETWEEN
mà bạn có thể dùng nó để kiểm tra xem một biến có nằm giữa hai giá trị hay không. Toán tử này được sử dụng bên trong các biểu thức boolean. Hình thức chung của một toán tử như vậy là:
variable BETWEEN bottom line AND top_bound
Trong trường hợp này, không giống như ngôn ngữ Java, cả ranh giới dưới và trên đều được đưa vào khoảng cho phép.
Hãy viết một ví dụ trong đó chúng tôi chọn tất cả nhân viên có mức lương từ 40K đến 100K. Yêu cầu sẽ giống như:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
1 | Ivanov Ivan | lập trình viên | 100.000 | 25 | 30-06-2012 |
2 | Petrov Petr | lập trình viên | 80.000 | 23 | 2013-08-12 |
3 | Ivanov Serge | Kiểm thử | 40.000 | ba mươi | 2014-01-01 |
5 | kirienko anastasia | Quản lý văn phòng | 40.000 | 25 | 2015-10-10 |
Toán tử BETWEEN
hỗ trợ không chỉ các loại số mà còn cả ngày tháng và thậm chí cả các loại chuỗi . Trong trường hợp làm việc với chuỗi, thứ tự từ điển được sử dụng: aaba đến trước aabb
3.4 IN: danh sách các giá trị
Ngoài ra, SQL có một toán tử đặc biệt IN
mà bạn có thể kiểm tra xem một biến có được chứa trong danh sách đã chỉ định hay không. Toán tử này được sử dụng bên trong các biểu thức boolean. Hình thức chung của một toán tử như vậy là:
variable IN (value 1 , value 2 , ... value N)
Hãy viết một truy vấn trong đó chúng tôi chọn những nhân viên 20, 25 hoặc 30 tuổi. Yêu cầu sẽ giống như:
SELECT * FROM employee WHERE age IN (20, 25, 30)
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
1 | Ivanov Ivan | lập trình viên | 100.000 | 25 | 30-06-2012 |
3 | Ivanov Serge | Kiểm thử | 40.000 | ba mươi | 2014-01-01 |
5 | kirienko anastasia | Quản lý văn phòng | 40.000 | 25 | 2015-10-10 |
Và bây giờ, hãy viết một truy vấn, ngược lại, chúng tôi chọn những nhân viên có độ tuổi là not
20, 25 hoặc 30. Truy vấn sẽ như sau:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
2 | Petrov Petr | lập trình viên | 80.000 | 23 | 2013-08-12 |
4 | Rabinovich Moisha | Giám đốc | 200.000 | 35 | 2015-05-12 |
6 | Vaska | con mèo | 1.000 | 3 | 2018-01-01 |
Mọi thứ hoạt động như mong đợi. Sắc đẹp.
3.5 THÍCH: mẫu chuỗi
Và cuối cùng, một toán tử quan trọng và thường được sử dụng khác - LIKE
. Nó được sử dụng khi so sánh các chuỗi. Nó có thể được sử dụng để thiết lập một mẫu chuỗi. Toán tử này được sử dụng bên trong các biểu thức boolean. Hình thức chung của một toán tử như vậy là:
variable LIKE 'sample'
Các ký tự đặc biệt có thể được sử dụng trong mẫu: %
và _
.
- Dấu gạch dưới có nghĩa là ký tự bất kỳ, luôn luôn là 1 ký tự.
- Phần trăm có nghĩa là bất kỳ ký tự nào và số lần bất kỳ (kể cả 0 lần).
Hãy viết một truy vấn sẽ chọn tất cả những người có họ bắt đầu bằng chữ "I". Yêu cầu sẽ giống như:
SELECT * FROM employee WHERE name LIKE 'I%'
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
1 | Ivanov Ivan | lập trình viên | 100.000 | 25 | 30-06-2012 |
3 | Ivanov Serge | Kiểm thử | 40.000 | ba mươi | 2014-01-01 |
Bây giờ hãy làm phức tạp nhiệm vụ - tên phải chứa "o" và tên phải kết thúc bằng "a". Yêu cầu sẽ giống như:
SELECT * FROM employee WHERE name LIKE '%o%a'
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
4 | Rabinovich Moisha | Giám đốc | 200.000 | 35 | 2015-05-12 |
Được rồi, hãy làm cho nó khó khăn hơn một chút. Hãy lọc ra tất cả nhân viên có tuổi bắt đầu bằng số "3". Yêu cầu sẽ giống như:
SELECT * FROM employee WHERE age LIKE '3%'
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | nghề nghiệp | lương | tuổi | ngày tham gia |
---|---|---|---|---|---|
3 | Ivanov Serge | Kiểm thử | 40.000 | ba mươi | 2014-01-01 |
4 | Rabinovich Moisha | Giám đốc | 200.000 | 35 | 2015-05-12 |
6 | Vaska | con mèo | 1.000 | 3 | 2018-01-01 |
Nhân tiện, cột tuổi của chúng ta thuộc loại int
, vì vậy LIKE
nó không chỉ hoạt động với các chuỗi. Những gì không thể nhưng vui mừng.
GO TO FULL VERSION