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
працює не лише з рядками. Що не може не тішити.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ