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

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

Оператор Опис Приклад
< Менше 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< /td> 2018-01-01

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< /th> occupation salary age join_date
1 Шевченко Ігор Програміст 100,000 25 2012-06-30

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 підтримує не тільки числові типи, але також дати і навіть рядкові типи. У разі роботи з рядками використовується лексикографічний порядок: ааба йде перед аабб

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< /td> 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

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

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%'

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

th> td>
id name occupation salary agejoin_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 працює не лише з рядками. Що не може не тішити.