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, WHEREbạ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ể WHEREsử dụng các phép toán logic ANDOR. NOTVà 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 BETWEENmà 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ử BETWEENhỗ 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 INmà 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à not20, 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: %_.

  • 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 LIKEnó không chỉ hoạt động với các chuỗi. Những gì không thể nhưng vui mừng.