SQL для начинающих. Условия и фильтрация данных.
В данной статье мы рассмотрим основы работы с условиями и фильтрацией данных в SQL.
Что такое фильтрация данных?
Фильтрация данных — это процесс выборки из базы данных только тех записей, которые соответствуют определённым критериям. Эта операция предоставляет возможность извлекать нужные данные и исключать лишние, что особенно важно при работе с большими объёмами информации.
Основные конструкции для фильтрации
- Команда SELECT: Это основная команда для извлечения данных из таблицы.
- Оператор WHERE: Используется для указания условий, которым должны соответствовать извлекаемые записи.
- Логические операторы: Такие как AND, OR и NOT, позволяют комбинировать несколько условий.
Использование оператора WHERE
Команда WHERE идет после команды SELECT и определяет условия фильтрации записей. Например, если у вас есть таблица customers
с полями id
, name
, age
, и city
, вы можете выбрать всех клиентов из определённого города:
SELECT * FROM customers WHERE city = 'Москва';
Условия сравнения
При использовании оператора WHERE вы можете применять различные условия сравнения:
Например, чтобы выбрать клиентов старше 30 лет, используйте следующий запрос:
SELECT * FROM customers WHERE age > 30;
Логические операторы
Для более сложных запросов вы можете комбинировать условия с помощью логических операторов:
1. AND
Оператор AND позволяет объединять несколько условий. Записи удовлетворяют запросу только если все условия истинны.
SELECT * FROM customers WHERE age > 30 AND city = 'Москва';
2. OR
Оператор OR выбирает записи, которые соответствуют хотя бы одному из нескольких условий.
SELECT * FROM customers WHERE city = 'Москва' OR city = 'Санкт-Петербург';
3. NOT
Оператор NOT используется для исключения записей, которые соответствуют условию.
SELECT * FROM customers WHERE NOT city = 'Москва';
Использование операторов сравнения
Кроме простых операторов равенства и неравенства, SQL также поддерживает специальные операторы для работы с текстовыми и числовыми данными:
1. BETWEEN
Оператор BETWEEN используется для выбора значений в определенном диапазоне.
SELECT * FROM customers WHERE age BETWEEN 18 AND 25;
2. IN
Оператор IN позволяет выбирать записи, где значение поля соответствует одному из заданных значений.
SELECT * FROM customers WHERE city IN ('Москва', 'Санкт-Петербург', 'Казань');
3. LIKE
Оператор LIKE используется для фильтрации текстовых данных по шаблону (подстановочным символам). Символы %
и _
представляют собой подстановочные знаки для множества символов и одного символа соответственно.
SELECT * FROM customers WHERE name LIKE 'А%'; -- выбирает всех клиентов, чьи имена начинаются на "А"
Все виды джоинов в SQL: подробное описание
Джоин (join) в SQL — это способ объединения строк из двух или более таблиц на основе связанных между собой полей. Использование джоинов позволяет вам извлекать данные, которые находятся в разных таблицах, и выводить их в одном запросе. Существует несколько типов джоинов, каждый из которых имеет свои особенности. Рассмотрим их подробнее.
1. INNER JOIN
INNER JOIN выбирает записи, у которых есть совпадения в обеих таблицах. Если в одной из таблиц нет совпадений, соответствующая строка не будет включена в результирующий набор.
Пример:
Допустим, у нас есть две таблицы: employees
(сотрудники) и departments
(отделы).
employees ------------- id | name | department_id 1 | Alice | 1 2 | Bob | 2 3 | Charlie | 3 departments ------------- id | department_name 1 | HR 2 | IT
Запрос, использующий INNER JOIN, выглядел бы так:
SELECT e.name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.id;
name | department_name --------------------------- Alice | HR Bob | IT
2. LEFT JOIN (или LEFT OUTER JOIN)
LEFT JOIN выбирает все записи из левой таблицы и только те записи из правой таблицы, которые имеют совпадения. Если в правой таблице нет совпадений, результат будет содержать NULL.
Пример:
SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id;
name | department_name --------------------------- Alice | HR Bob | IT Charlie | NULL
3. RIGHT JOIN (или RIGHT OUTER JOIN)
RIGHT JOIN работает аналогично LEFT JOIN, но выбирает все записи из правой таблицы и те записи из левой, которые имеют совпадения. Если записей из левой таблицы нет, результат будет содержать NULL.
Пример:
SELECT e.name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department_id = d.id;
name | department_name --------------------------- Alice | HR Bob | IT NULL | Sales
4. FULL JOIN (или FULL OUTER JOIN)
FULL JOIN возвращает все записи из обеих таблиц. Когда для одной из таблиц нет совпадений, будут возвращены NULL для недостающих значений.
Пример:
SELECT e.name, d.department_name FROM employees e FULL JOIN departments d ON e.department_id = d.id;
name | department_name --------------------------- Alice | HR Bob | IT Charlie | NULL NULL | Sales
5. CROSS JOIN
CROSS JOIN производит декартово произведение таблиц, то есть возвращает все возможные комбинации строк из обеих таблиц. Этот тип джоина не требует условия соединения.
Пример:
SELECT e.name, d.department_name FROM employees e CROSS JOIN departments d;
name | department_name --------------------------- Alice | HR Alice | IT Bob | HR Bob | IT Charlie | HR Charlie | IT
6. SELF JOIN
SELF JOIN — это соединение таблицы самой с собой. Этот тип может быть полезен, когда требуется сравнить строки в одной и той же таблице.
Пример:
Допустим, у нас есть таблица employees
, где некоторым сотрудникам назначены руководители, указанного в том же столбце manager_id
:
employees ------------- id | name | manager_id 1 | Alice | NULL 2 | Bob | 1 3 | Charlie | 1
Запрос для получения имен сотрудников и их руководителей:
SELECT e1.name AS employee_name, e2.name AS manager_name FROM employees e1 LEFT JOIN employees e2 ON e1.manager_id = e2.id;
employee_name | manager_name ----------------------------- Alice | NULL Bob | Alice Charlie | Alice
ТОП-5 вопросов на собеседовании по SQL:
1. Что такое свойство ACID в базе данных?
ACID означает атомарность (Atomicity), согласованность (Consistency), изолированность (Isolation), долговечность (Durability). Он используется для обеспечения надежной обработки транзакций данных в системе базы данных.
- Атомарность. Гарантирует, что транзакция будет полностью выполнена или потерпит неудачу, где транзакция представляет одну логическую операцию данных. Это означает, что при сбое одной части любой транзакции происходит сбой всей транзакции и состояние базы данных остается неизменным.
- Согласованность. Гарантирует, что данные должны соответствовать всем правилам валидации. Проще говоря, вы можете сказать, что ваша транзакция никогда не оставит вашу базу данных в недопустимом состоянии.
- Изолированность. Основной целью изолированности является контроль механизма параллельного изменения данных.
- Долговечность. Долговечность подразумевает, что если транзакция была подтверждена (COMMIT), произошедшие в рамках транзакции изменения сохранятся независимо от того, что может встать у них на пути (например, потеря питания, сбой или ошибки любого рода).
2. Что такое подзапрос в SQL?
Подзапрос — это запрос внутри другого запроса, в котором определен запрос для извлечения данных или информации из базы данных. В подзапросе внешний запрос называется основным запросом, тогда как внутренний запрос называется подзапросом. Подзапросы всегда выполняются первыми, а результат подзапроса передается в основной запрос. Он может быть вложен в SELECT, UPDATE или любой другой запрос. Подзапрос также может использовать любые операторы сравнения, такие как >, < или =.
3. Какие бывают типы подзапросов?
Существует два типа подзапросов, а именно: коррелированные и некоррелированные.
- Коррелированный подзапрос: это запрос, который выбирает данные из таблицы со ссылкой на внешний запрос. Он не считается независимым запросом, поскольку ссылается на другую таблицу или столбец в таблице.
- Некоррелированный подзапрос: этот запрос является независимым запросом, в котором выходные данные подзапроса подставляются в основной запрос.
4. Перечислите способы получить количество записей в таблице?
Для подсчета количества записей в таблице вы можете использовать следующие команды:
SELECT * FROM table1
SELECT COUNT(*) FROM table1
SELECT rows FROM sysindexes WHERE id = OBJECT_ID(table1) AND indid < 2
5. Что такое сущности и отношения?
Сущности: человек, место или объект в реальном мире, данные о которых могут храниться в базе данных. В таблицах хранятся данные, которые представляют один тип сущности. Например — база данных банка имеет таблицу клиентов для хранения информации о клиентах. Таблица клиентов хранит эту информацию в виде набора атрибутов (столбцы в таблице) для каждого клиента.
Отношения: отношения или связи между сущностями, которые имеют какое-то отношение друг к другу. Например — имя клиента связано с номером учетной записи клиента и контактной информацией, которая может быть в той же таблице. Также могут быть отношения между отдельными таблицами (например, клиент к счетам).