September 22, 2024

SQL для начинающих. Условия и фильтрация данных.

В данной статье мы рассмотрим основы работы с условиями и фильтрацией данных в SQL.

Что такое фильтрация данных?

Фильтрация данных — это процесс выборки из базы данных только тех записей, которые соответствуют определённым критериям. Эта операция предоставляет возможность извлекать нужные данные и исключать лишние, что особенно важно при работе с большими объёмами информации.

Основные конструкции для фильтрации

  1. Команда SELECT: Это основная команда для извлечения данных из таблицы.
  2. Оператор WHERE: Используется для указания условий, которым должны соответствовать извлекаемые записи.
  3. Логические операторы: Такие как 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. Что такое сущности и отношения?

Сущности: человек, место или объект в реальном мире, данные о которых могут храниться в базе данных. В таблицах хранятся данные, которые представляют один тип сущности. Например — база данных банка имеет таблицу клиентов для хранения информации о клиентах. Таблица клиентов хранит эту информацию в виде набора атрибутов (столбцы в таблице) для каждого клиента.

Отношения: отношения или связи между сущностями, которые имеют какое-то отношение друг к другу. Например — имя клиента связано с номером учетной записи клиента и контактной информацией, которая может быть в той же таблице. Также могут быть отношения между отдельными таблицами (например, клиент к счетам).