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%'
І отримаємо такий результат запиту:
id | name | occupation | salary | age | th>join_date |
---|---|---|---|---|---|
3 | Шевченко Данило | Тестувальник | 40,000 | 30 | 2014-01-01 |
4 | Мельник Степан | Директор | td>200,000 | 35 | 2015-05-12 |
6 | Пончик | кіт | 1,000 | 3 | 2018-01-01 |
До речі, колонка age у нас має тип int
, так що LIKE
працює не лише з рядками. Що не може не тішити.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ