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 |
А сега нека напишем заявка, където, напротив, избираме служители на възраст not
20, 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
работи не само с низове. Какво не може да не радва.