Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Операторы SQL (SQL Operators)
Операторы SQL — это специальные команды и символы, используемые в запросах SQL для выполнения различных операций над данными в базе данных. Это фундаментальная часть языка SQL, которая позволяет фильтровать, сравнивать, вычислять и трансформировать данные.
Классификация операторов SQL
1. Операторы сравнения (Comparison Operators)
Используются для сравнения значений:
= (равно)
- SELECT * FROM users WHERE age = 30
- Возвращает все записи, где возраст равен 30
!= или <> (не равно)
- SELECT * FROM products WHERE category != 'electronics'
- Возвращает все товары, которые не являются электроникой
> (больше), < (меньше)
- SELECT * FROM orders WHERE total > 1000
- Возвращает заказы на сумму более 1000
>= (больше или равно), <= (меньше или равно)
- SELECT * FROM employees WHERE salary >= 50000
- Возвращает сотрудников с зарплатой от 50000
2. Логические операторы (Logical Operators)
Сочетают несколько условий:
AND — И (логическое И)
- SELECT * FROM users WHERE age > 18 AND country = 'Russia'
- Возвращает пользователей старше 18 ИЗ России
OR — ИЛИ (логическое ИЛИ)
- SELECT * FROM products WHERE category = 'books' OR category = 'magazines'
- Возвращает книги ИЛИ журналы
NOT — НЕ (отрицание)
- SELECT * FROM orders WHERE NOT status = 'cancelled'
- Возвращает все заказы, кроме отменённых
3. Арифметические операторы (Arithmetic Operators)
Выполняют математические операции:
+ (сложение)
- SELECT price + tax AS total FROM items
- Складывает цену и налог
- (вычитание)
- SELECT salary - expenses FROM budget
- Вычитает расходы из зарплаты
*** (умножение)**
- SELECT quantity * price AS amount FROM orders
- Умножает количество на цену
/ (деление)
- SELECT total / quantity AS unit_price FROM orders
- Делит общую сумму на количество
% (остаток от деления)
- SELECT value % 10 FROM numbers
- Вычисляет остаток от деления
4. Операторы для работы со строками (String Operators)
LIKE — поиск по шаблону
- SELECT * FROM users WHERE name LIKE 'John%'
- Возвращает имена, начинающиеся на "John"
- % — любое количество символов
- _ — один символ
CONCAT — объединение строк
- SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users
- Объединяет имя и фамилию
IN — проверка на принадлежность к списку
- SELECT * FROM users WHERE country IN ('Russia', 'Ukraine', 'Belarus')
- Возвращает пользователей из трех стран
BETWEEN — проверка диапазона
- SELECT * FROM orders WHERE date BETWEEN '2024-01-01' AND '2024-12-31'
- Возвращает заказы за весь 2024 год
IS NULL — проверка на NULL
- SELECT * FROM users WHERE email IS NULL
- Возвращает пользователей без почты
IS NOT NULL — проверка на не NULL
- SELECT * FROM products WHERE description IS NOT NULL
- Возвращает товары с описанием
5. Битовые операторы (Bitwise Operators)
Работают с битами значений:
& (побитовое И)
- SELECT * FROM permissions WHERE flags & 4 = 4
- Проверяет, установлен ли определенный бит
| (побитовое ИЛИ)
- SELECT flags | 8 FROM permissions
- Устанавливает определенный бит
^ (побитовое исключающее ИЛИ)
- SELECT flags ^ 16 FROM permissions
- Инвертирует определенный бит
6. Операторы для NULL значений
<=> (безопасное сравнение)
- SELECT * FROM users WHERE email <=> NULL
- Сравнивает значения, учитывая NULL
ISNULL()
- SELECT ISNULL(phone, 'No phone') FROM users
- Заменяет NULL на значение по умолчанию
COALESCE()
- SELECT COALESCE(mobile, phone, 'No number') FROM users
- Возвращает первое не-NULL значение
7. Операторы для работы с диапазонами
BETWEEN AND — включающий диапазон
- SELECT * FROM sales WHERE amount BETWEEN 100 AND 1000
- Возвращает продажи от 100 до 1000 (включительно)
NOT BETWEEN AND
- SELECT * FROM prices WHERE price NOT BETWEEN 10 AND 100
- Исключает значения в диапазоне
8. Операторы в подзапросах (Subquery Operators)
EXISTS — проверка существования
- SELECT * FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = users.id)
- Возвращает пользователей, которые делали заказы
IN — проверка на наличие в наборе
- SELECT * FROM users WHERE id IN (SELECT user_id FROM orders)
- Возвращает пользователей, у которых есть заказы
ANY/ALL — сравнение с любым/всеми значениями
- SELECT * FROM products WHERE price > ANY (SELECT price FROM competitors)
- Возвращает товары, которые дешевле хотя бы одного конкурента
9. Операторы для работы со значениями CASE
CASE WHEN THEN
SELECT
name,
CASE
WHEN age < 18 THEN 'Minor'
WHEN age >= 18 AND age < 65 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM users
Примеры сложных операторов
Комбинирование операторов:
SELECT * FROM orders
WHERE
(status = 'pending' OR status = 'processing')
AND amount BETWEEN 100 AND 5000
AND customer_name LIKE 'J%'
AND created_date BETWEEN '2024-01-01' AND '2024-03-31'
Использование функций агрегирования:
SELECT
department,
COUNT(*) as employee_count,
AVG(salary) as avg_salary,
MAX(salary) as max_salary
FROM employees
WHERE salary > 50000
GROUP BY department
HAVING COUNT(*) > 5
ORDER BY avg_salary DESC
Приоритет операторов
- Скобки ()
- Умножение *, деление /, остаток %
- Сложение +, вычитание -
- Сравнение =, !=, <, >, <=, >=, LIKE, IN, BETWEEN
- NOT
- AND
- OR
Лучшие практики
1. Используй скобки для ясности:
- SELECT * FROM orders WHERE (status = 'paid' AND amount > 1000) OR (status = 'pending' AND amount > 5000)
2. Используй BETWEEN вместо двух условий:
- Правильно: WHERE amount BETWEEN 100 AND 1000
- Неправильно: WHERE amount >= 100 AND amount <= 1000
3. Используй IN для списков:
- Правильно: WHERE status IN ('active', 'pending')
- Неправильно: WHERE status = 'active' OR status = 'pending'
4. Осторожно с NULL:
- Помни, что NULL != NULL
- Используй IS NULL вместо = NULL
5. Индексы для операторов:
- Операторы сравнения =, <, >, <=, >= хорошо работают с индексами
- LIKE и IN могут быть медленнее без правильных индексов
6. Производительность:
- BETWEEN часто быстрее чем два условия с AND
- EXISTS может быть быстрее IN для больших наборов
- Избегай функций в WHERE (замедляют поиск)
Операторы SQL — это мощный инструмент для точного выбора и трансформации данных. Владение ими необходимо для написания эффективных и корректных SQL запросов.