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работи не само с низове. Какво не може да не радва.
GO TO FULL VERSION