3.1 Сравняване на стойности: <, >, =, <>

Една от най-често срещаните ключови думи, които се използват при писане на SQL заявки, е WHERE. Именно с негова помощ казваме на MySQL кои редове от tableта искаме да филтрираме (селектираме).

След ключовата дума WHEREможете да напишете много сложни и трудни условия. И така, Howви операции може да съдържа това condition?

Оператор Описание Пример
< По-малко заплата < 40000
> | Повече ▼ заплата > 100 000
<= По-малко or равно възраст <= 25
>= Повече or равно възраст >= 18
= Равно на професия = 'Програмист'
<>, != Не е равно Година (дата_на_присъединяване) != 2015

За разлика от езика Java, за стриктно equalsство тук се използва знак за equals на едно, а не на две .

Ако искате да проверите дали стойностите не са равни, тогава това може да стане по два начина: <>or !=Първият подход се използва в езици като Pascal, вторият е типичен за езици като C ++ и Java.

За присвояване в SQL се използва :=като в Pascal, но самото присвояване се използва много рядко.

Нека напишем заявка, в която да покажем всички служители, които не са бor наети през 2015 г.


SELECT * FROM employee WHERE YEAR(join_date) != 2015
        

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
1 Ivanов Ivan Програмист 100 000 25 2012-06-30
2 Peterов Петър Програмист 80 000 23 2013-08-12
3 Ivanов Сергей Тестер 40 000 тридесет 2014-01-01
6 Васка котка 1000 3 2018-01-01

3.2 Логически операции И, ИЛИ, НЕ

Можете също да WHEREизползвате логическите операции ANDи OR. NOTИ те са написани точно Howто ги описах тук. Нито един &&, ||or!

Нека напишем SQL заявка, където избираме служители, които са на възраст над 20 години и получават заплата под 50K.


SELECT * FROM employee WHERE age > 20 AND salary < 50000
        

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
3 Ivanов Сергей Тестер 40 000 тридесет 2014-01-01
5 Кириенко Анастасия Офис мениджър 40 000 25 2015-10-10

Твърде лесно. Нека напишем заявка, в която избираме служители, които получават повече от 100K и не работят като директор:


SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
        

Тук конкретно !=използвахме оператора instead of символа NOT.

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
1 Ivanов Ivan Програмист 100 000 25 2012-06-30

3.3 МЕЖДУ: диапазон на стойността

Също така в SQL има специален оператор, BETWEENс който можете да проверите дали дадена променлива се намира между две стойности. Този оператор се използва в булеви изрази. Общата форма на такъв оператор е:


variable BETWEEN bottom line AND top_bound
        

В този случай, за разлика от езика Java, Howто долната, така и горната граница са включени в разрешения интервал.

Нека напишем пример, в който избираме всички служители със заплата от 40K до 100K. Искането ще изглежда така:

SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
1 Ivanов Ivan Програмист 100 000 25 2012-06-30
2 Peterов Петър Програмист 80 000 23 2013-08-12
3 Ivanов Сергей Тестер 40 000 тридесет 2014-01-01
5 Кириенко Анастасия Офис мениджър 40 000 25 2015-10-10

Операторът BETWEENподдържа не само числови типове, но и дати и дори типове низове . В случай на работа с низове се използва лексикографският ред: aaba идва преди aabb

3.4 IN: списък със стойности

В допълнение, SQL има специален оператор, INс който можете да проверите дали дадена променлива се съдържа в посочения списък. Този оператор се използва в булеви изрази. Общата форма на такъв оператор е:

variable IN (value 1 , value 2 , ... value N)

Нека напишем заявка, в която избираме служители на 20, 25 or 30 години. Искането ще изглежда така:

SELECT * FROM employee WHERE age IN (20, 25, 30)

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
1 Ivanов Ivan Програмист 100 000 25 2012-06-30
3 Ivanов Сергей Тестер 40 000 тридесет 2014-01-01
5 Кириенко Анастасия Офис мениджър 40 000 25 2015-10-10

А сега нека напишем заявка, където, напротив, избираме служители на възраст not20, 25 or 30 години. Заявката ще изглежда така:

SELECT * FROM employee WHERE age NOT IN (20, 25, 30)

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
2 Peterов Петър Програмист 80 000 23 2013-08-12
4 Рабинович Мойша Директор 200 000 35 2015-05-12
6 Васка котка 1000 3 2018-01-01

Всичко работи според очакванията. красота.

3.5 LIKE: стринг модел

И накрая, още един важен и много често използван оператор - LIKE. Използва се при сравняване на низове. Може да се използва за задаване на модел на низ. Този оператор се използва в булеви изрази. Общата форма на такъв оператор е:

variable LIKE 'sample'

В шаблона могат да се използват специални знаци: %и _.

  • Долна черта означава произволен знак, винаги 1 бр.
  • Процент означава произволен знак и произволен брой пъти (включително 0 пъти).

Нека напишем заявка, която ще избере всички хора, чието фамилно име започва с буквата "I". Искането ще изглежда така:

SELECT * FROM employee WHERE name LIKE 'I%'

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
1 Ivanов Ivan Програмист 100 000 25 2012-06-30
3 Ivanов Сергей Тестер 40 000 тридесет 2014-01-01

Сега да усложним задачата - името трябва да съдържа "о" и името да завършва с "а". Искането ще изглежда така:

SELECT * FROM employee WHERE name LIKE '%o%a'

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
4 Рабинович Мойша Директор 200 000 35 2015-05-12

Добре, нека го направим малко по-трудно. Нека филтрираме всички служители, чиято възраст започва с цифрата "3". Искането ще изглежда така:

SELECT * FROM employee WHERE age LIKE '3%'

И получаваме следния резултат от заявката:

document за самоличност име професия заплата възраст дата на присъединяване
3 Ivanов Сергей Тестер 40 000 тридесет 2014-01-01
4 Рабинович Мойша Директор 200 000 35 2015-05-12
6 Васка котка 1000 3 2018-01-01

Между другото, нашата възрастова колона е от тип int, така че LIKEработи не само с низове. Какво не може да не радва.