3.1 Порівняння значень: <, >, =, <>

Одне з найчастіших ключових слів, які використовуються при написанні SQL-запитів, – це ключове слово WHERE. Саме з його допомогою ми вказуємо MySQL, які рядки таблиці ми хочемо відфільтрувати (відібрати).

Після ключового слова WHEREможна писати дуже складні та хитромудрі умови. Тож які операції може містити ця умова?

Оператор Опис приклад
< Менше salary < 40000
> Більше salary > 100000
<= Менше або дорівнює age <= 25
>= Більше або дорівнює age >= 18
= Рівно occupation = 'Програміст'
<>, != Не дорівнює Year(join_date) != 2015

На відміну від мови Java для суворої рівності тут використовується один символ одно, а не два .

Якщо ж ви хочете перевірити, що значення не рівні, це можна зробити двома способами: <>або !=Перший підхід використовується в мовах типу Паскаль, другий характерний для таких мов, як C++ і Java.

Для присвоєння SQL використовується :=як у Паскалі, проте саме присвоєння використовується дуже рідко.

Давай напишемо запит, де відобразимо всіх співробітників, які не були найняті у 2015 році.


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

І отримаємо такий результат запиту:

id name occupation salary age join_date
1 Іванов Іван Програміст 100,000 25 2012-06-30
2 Петроов Петроо Програміст 80,000 23 2013-08-12
3 Іванов Сергій Тестувальник 40,000 30 2014-01-01
6 Васько Кіт 1,000 3 2018-01-01

3.2 Логічні операції AND, OR, NOT

Також WHEREможна використовувати логічні операції AND, ORі NOT. І пишуться вони саме тому, що я їх тут описав. Ніяких &&, ||або!

Давай напишемо SQL-запит, де відберемо співробітників, які старші 20 років і отримують зарплату менше 50К.


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

І отримаємо такий результат запиту:

id name occupation salary age join_date
3 Іванов Сергій Тестувальник 40,000 30 2014-01-01
5 Кирієнко Анастасія Офіс менеджер 40,000 25 2015-10-10

Занадто просто. Давай напишемо запит, де відберемо співробітників, які отримують більше 100К і не працюють директором:


SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Директор'
        

Тут ми спеціально замість символу !=використовували оператор NOT.

І отримаємо такий результат запиту:

id name occupation salary age join_date
1 Іванов Іван Програміст 100,000 25 2012-06-30

3.3 BETWEEN: діапазон значень

Також у SQL є спеціальний оператор, BETWEENза допомогою якого можна перевірити, чи лежить змінна між двома значеннями. Цей оператор використовується усередині логічних виразів. Загальний вигляд такого оператора має вигляд:


змінна BETWEEN Нижня границя AND верхня межа
        

При цьому на відміну від мови Java, нижня і верхня межі входять у дозволений інтервал.

Давай напишемо приклад, де відберемо всіх співробітників із зарплатою від 40К до 100К. Запит матиме вигляд:

SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000

І отримаємо такий результат запиту:

id name occupation salary age join_date
1 Іванов Іван Програміст 100,000 25 2012-06-30
2 Петроов Петроо Програміст 80,000 23 2013-08-12
3 Іванов Сергій Тестувальник 40,000 30 2014-01-01
5 Кирієнко Анастасія Офіс менеджер 40,000 25 2015-10-10

Оператор BETWEENпідтримує не тільки числові типи, але також дати і рядкові типи . У разі роботи з рядками використовується лексикографічний порядок: ааба йде перед аабб

3.4 IN: перелік значень

Крім того, в SQL є спеціальний оператор INза допомогою якого можна перевірити, чи міститься змінна у зазначеному списку. Цей оператор використовується усередині логічних виразів. Загальний вигляд такого оператора має вигляд:

змінна IN (значення 1 , значення 2 , … значення N)

Давай напишемо запит, у якому відберемо співробітників, яким 20, 25 чи 30 років. Запит матиме вигляд:

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

І отримаємо такий результат запиту:

id name occupation salary age join_date
1 Іванов Іван Програміст 100,000 25 2012-06-30
3 Іванов Сергій Тестувальник 40,000 30 2014-01-01
5 Кирієнко Анастасія Офіс менеджер 40,000 25 2015-10-10

А тепер давай напишемо запит, де навпаки відберемо співробітників віком не20, 25 або 30. Запит матиме вигляд:

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

І отримаємо такий результат запиту:

id name occupation salary age join_date
2 Петроов Петроо Програміст 80,000 23 2013-08-12
4 Рабінович Мойша Директор 200,000 35 2015-05-12
6 Васько Кіт 1,000 3 2018-01-01

Все спрацювало, як і очікувалося. Краса.

3.5 LIKE: шаблон рядків

І нарешті ще один важливий оператор, який дуже часто використовується LIKE. Він використовується для порівняння рядків. З його допомогою можна встановити шаблон рядка. Цей оператор використовується усередині логічних виразів. Загальний вигляд такого оператора має вигляд:

змінна LIKE 'шаблон'

У шаблоні можуть використовуватись спеціальні символи: %і _.

  • Підкреслення означає будь-який символ завжди 1 шт.
  • Відсоток означає будь-який символ та будь-яку кількість разів (включаючи 0 разів).

Давай напишемо запит, за допомогою якого відберемо всіх людей, у яких прізвище починається на букву "І". Запит матиме вигляд:

SELECT * FROM employee WHERE name LIKE 'И%'

І отримаємо такий результат запиту:

id name occupation salary age join_date
1 Іванов Іван Програміст 100,000 25 2012-06-30
3 Іванов Сергій Тестувальник 40,000 30 2014-01-01

Тепер ускладнимо завдання – в імені має бути "о" і ім'я має закінчуватися на "а". Запит матиме вигляд:

SELECT * FROM employee WHERE name LIKE '%о%а'

І отримаємо такий результат запиту:

id name occupation salary age join_date
4 Рабінович Мойша Директор 200,000 35 2015-05-12

Гаразд, ускладнимо ще трохи. Давай відфільтруємо всіх працівників, у яких вік починається з цифри "3". Запит матиме вигляд:

SELECT * FROM employee WHERE age LIKE '3%'

І отримаємо такий результат запиту:

id name occupation salary age join_date
3 Іванов Сергій Тестувальник 40,000 30 2014-01-01
4 Рабінович Мойша Директор 200,000 35 2015-05-12
6 Васько Кіт 1,000 3 2018-01-01

До речі, колонка age у нас має тип int, так що LIKEпрацює не лише з рядками. Що не може не тішити.