Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Как выбрать данные в SQL

Мария Богомаз
Мария Богомаз
Технический писатель
21 февраля 2024 г.
388
13 минут чтения
Средний рейтинг статьи: 5

В современном мире, где информация становится все более ценным ресурсом, базы данных (БД) остаются неотъемлемым элементом любых информационных систем, а способность извлекать из них данные с максимальной эффективностью становится решающим фактором в успешной работе с этими системами. SQL (Structured Query Language) — специализированный язык программирования, который применяется для управления записями, хранящимися в реляционных базах данных. В рамках SQL существует множество операторов и методов, которые позволяют разработчикам получать нужную информацию из БД. 

Эта статья служит практическим руководством для тех, кто хочет узнать, как выбрать данные из таблицы SQL. В рамках данного руководства мы познакомимся с синтаксисом оператора SELECT, изучим возможности фильтрации данных с помощью WHERE, а также рассмотрим объединение данных с помощью GROUP BY и HAVING

Основы оператора SELECT

SQL, являясь удивительно гибким языком для управления данными, обладает множеством инструментов для работы с информацией, хранящейся в базах данных. Одним из важных и широко используемых инструментов является оператор SELECT, который предоставляет пользователю возможность извлекать информацию из БД. С помощью этого оператора мы можем выбирать необходимые нам столбцы из таблицы, а также применять к данным разнообразные операции. 

Синтаксис рассматриваемого оператора достаточно прост и легок для понимания. Он начинается с ключевого слова SELECT, за которым следует перечень столбцов, данные из которых предстоит извлечь. После этого необходимо указать имя таблицы, из которой будут извлекаться данные. Вот как это выглядит на практике:

SELECT field1, field2
FROM data_table;

В данном примере field1 и field2 — это конкретные столбцы, которые мы планируем получить, а data_table — имя таблицы, из которой мы хотим получить данные. 

Применение оператора SELECT может быть разнообразным. К примеру, если перед нами стоит задача выбора всех столбцов из определенной таблицы, мы можем использовать символ *, который служит универсальным обозначением для всех столбцов:

SELECT * FROM StaffMembers;

Такой запрос вернет весь набор данных, содержащихся в таблице StaffMembers.

Кроме того, мы можем использовать SELECT для выбора лишь уникальных значений определенного столбца, исключая повторяющиеся записи, что особенно полезно при анализе данных:

SELECT DISTINCT DivisionID 
FROM StaffMembers;

В этом примере запрос возвращает список уникальных значений DivisionID из таблицы StaffMembers, то есть устраняются все дублирующиеся элементы.

Оператор SELECT также позволяет применять различные функции агрегирования, такие как COUNT, SUM, AVG и другие. Эти функции являются ключевыми для проведения агрегатных операций, которые позволяют анализировать большие объемы данных с целью получения суммарных, средних значений или других типов агрегатной статистики. Например, мы можем использовать функцию COUNT для подсчета числа строк в таблице:

SELECT COUNT(StaffID)
FROM StaffMembers;

Этот запрос вернет общее количество сотрудников. Аналогично, мы можем использовать другие функции агрегирования для вычисления суммы, среднего значения и других агрегатных статистик по данным. 

Еще один полезный оператор — ORDER BY, который упорядочивает результаты запроса в соответствии с определенными критериями. Этот оператор позволяет нам сортировать данные, как по возрастанию (ASC), так и по убыванию (DESC). Если мы не укажем направление сортировки явно, по умолчанию будет использоваться порядок возрастания. Вот как это выглядит на практике:

SELECT *
FROM StaffMembers
ORDER BY Surname DESC;

В этом примере результаты запроса будут представлены в упорядоченном виде, где данные будут отсортированы по фамилии сотрудников в обратном порядке, начиная с последнего в алфавите и заканчивая первым. 

SELECT играет важную роль в SQL, поскольку он определяет, какие конкретные данные будут включены в результаты запроса. Он может быть использован совместно с другими операторами, поэтому перейдем к обсуждению следующего ключевого компонента запроса SQL — оператора WHERE, который позволяет задать конкретные условия для отбора данных. 

Использование WHERE для фильтрации данных

Оператор WHERE в SQL обеспечивает фильтрацию данных на основе заданных условий, что позволяет извлекать, обновлять или удалять именно те данные, которые соответствуют определенным критериям. 

Если бы оператора WHERE не существовало, мы были бы вынуждены извлекать все данные из таблицы и затем вручную, например, в приложении, фильтровать их для выполнения определенных задач. Это было бы очень неэффективно, особенно для больших баз данных. 

WHERE можно использовать с различными операторами, такими как равно (=), не равно (<>), больше (>), меньше (<), больше или равно (>=), меньше или равно (<=), а также более специализированными, вроде, BETWEEN, который позволяет указать диапазон значений, LIKE, предназначенный для поиска по шаблону, и IN, который дает возможность выбрать данные из определенного набора.

Рассмотрим несколько примеров использования WHERE для фильтрации данных.

Применение оператора WHERE с использованием условия равенства (=):

SELECT * 
FROM StaffMembers WHERE StaffID = 123456;

В этом случае оператор равенства используется для выбора записи, где идентификатор сотрудника точно соответствует числу 123456. Это простой эквивалент оператора равенства в математике.

Использование WHERE с операторами больше (>) или меньше (<):

SELECT * 
FROM StaffMembers WHERE Wage > 60000;

Здесь используется оператор >, благодаря которому запрос отсеивает ненужное и возвращает нам данные о сотрудниках, чья заработная плата превышает 60000. Этот оператор может быть полезным, если вы ищете записи, которые обладают каким-то значением выше или ниже определенного порога.

Пример использования оператор WHERE с BETWEEN:

SELECT * 
FROM StaffMembers WHERE Wage BETWEEN 60000 AND 80000;

BETWEEN позволяет выбрать записи, попадающие в определенный диапазон значений. В нашем случае, это все сотрудники, чья зарплата находится в интервале от 60000 до 80000 включительно. Это полезно, когда у вас есть четкий диапазон значений, которые вы хотите извлечь.

Оператор WHERE с использованием LIKE и символов подстановки:

SELECT * 
FROM StaffMembers WHERE StaffName LIKE '%ль%';

Оператор LIKE используется для поиска данных по шаблонам. В базе данных SQL для обозначения шаблонов применяются два символа подстановки: % заменяет ноль или больше символов, _ — заменяет ровно один символ. Так, в нашем конкретном случае, запрос вернет все записи из таблицы StaffMembers, где имена сотрудников содержат ль. Этот подход часто используется, когда требуется найти данные, точное значение которых не известно, или когда необходимо найти несколько совпадений.

Это лишь несколько примеров возможностей WHERE в SQL. Разнообразие сочетаний и операторов делает его мощным инструментом при работе с данными. 

Следующим шагом мы рассмотрим операторы AND, OR и NOT, которые зачастую применяются совместно с WHERE для создания более сложных запросов к базам данных.

Использование операторов AND, OR и NOT

AND, OR и NOT являются ключевыми логическими операторами в SQL. Они используются для комбинирования или инвертирования условий в операторах SQL, таких как WHERE, HAVING и др.

  1. Оператор AND используется для создания запроса, который возвращает true (истину), только когда оба сравниваемых условия являются истинными. Давайте рассмотрим пример:

SELECT * FROM StaffMembers WHERE Wage > 60000 and ExperienceYears > 3;

В данном случае оператор AND связывает вместе два критерия отбора: размер заработной платы, превышающий 60000, и опыт работы более трех лет. Результатом выполнения такого запроса станут записи из таблицы, которые удовлетворяют обоим условиям одновременно. 

  1. Оператор OR возвращает true, если хотя бы одно из условий оказывается истинным:

SELECT * FROM StaffMembers WHERE Division = 'Production' OR Division = 'Advertising';

Здесь оператор OR соединяет два условия отбора. Запрос выведет те записи из таблицы StaffMembers, в которых указано, что сотрудник принадлежит к отделу Production или Advertising

  1. Оператор NOT меняет логическое значение условия на противоположное, возвращая true, если условие неверно, и false (ложь), если условие верно. 

SELECT * FROM StaffMembers WHERE NOT (Division = 'HR');

В этом запросе оператор NOT инвертирует условие Division = 'HR'. Запрос вернет все строки из таблицы StaffMembers, где отдел не является HR. Это позволяет формировать запросы, исключающие определенные категории данных. 

Эти операторы можно использовать в любых комбинациях для создания сложных условий, например:

SELECT * FROM StaffMembers WHERE (Division = 'Production' OR Division = 'Advertising') AND ExperienceYears > 5;

Здесь комбинируются операторы AND и OR для создания сложного условия отбора. Запрос вернет только те строки из таблицы StaffMembers, где отдел это Production ИЛИ Advertising И сотрудники имеют более пяти лет опыта работы. 

Агрегирование данных с помощью GROUP BY и HAVING

В SQL GROUP BY и HAVING часто используются вместе для агрегации данных и вычисления разнообразных статистических показателей на основе группировки данных по заранее определенным критериям. 

Рассмотрим более подробно оператор GROUP BY. Он используется для группировки строк в результирующем наборе по значениям определенного столбца или группе столбцов. После выполнения группировки можно использовать функции агрегирования, такие как COUNT, SUM, AVG и другие для вычисления статистических данных для каждой отдельной группы. 

Пример: 

SELECT ClientID, COUNT(PurchaseID)
FROM Purchases
GROUP BY ClientID;

В этом примере мы считаем общее количество покупок (PurchaseID), сделанных каждым отдельным клиентом (ClientID). 

Оператор HAVING имеет много общего с WHERE, однако ключевое отличие состоит в том, что HAVING применяется уже после того, как была выполнена группировка с помощью GROUP BY. Основная функция HAVING — фильтрация групп на основе уже вычисленных агрегатных значений. Благодаря этому, мы можем отбирать для отображения только те группы, которые удовлетворяют установленным нами критериям. 

Пример:

SELECT ClientID, COUNT(PurchaseID)
FROM Purchases
GROUP BY ClientID
HAVING COUNT(PurchaseID) > 3;

В этом примере мы видим только тех клиентов (ClientID), у которых количество совершенных ими заказов превышает три. 

Заметьте, что HAVING применяется в SQL-запросах исключительно после использования GROUP BY. Нельзя использовать HAVING без предварительной группировки данных с помощью GROUP BY

В общем, порядок операций в SQL выглядит так: 

  • Начинаем с FROM, где указываем источник данных. 

  • Затем следует WHERE, позволяющий отфильтровать данные до их группировки.

  • После фильтрации данных применяется оператор GROUP BY, который объединяет строки в группы. 

  • Непосредственно после группировки мы используем HAVING для фильтрации групп. 

  • Далее идет SELECT, который определяет, какие столбцы будут отображаться в результате запроса.

  • И, наконец, ORDER BY, который сортирует эти результаты в нужном порядке.  

Этот порядок операций отражает логику обработки запросов в SQL. Применение условий фильтрации через WHERE происходит до группировки, что позволяет сократить объем обрабатываемых данных. Условия, определенные в HAVING, применяются к уже сформированным группам данных, что дает возможность провести более детальный анализ. 

Операторы GROUP BY и HAVING являются неотъемлемыми инструментами для агрегации данных в SQL. Их использование дает возможности для широкого анализа данных, позволяя не только собирать статистические данные, но и выявлять в них определенные закономерности, тренды и паттерны. 

Применение JOIN для объединения таблиц

Часто разработчику необходимо выбрать данные из двух таблиц SQL. Для выполнения этой задачи применяется оператор JOIN, позволяющий совмещать данные из двух и более источников, основываясь на совпадении значений в определенных столбцах. 

Таблицы в БД обычно имеют столбцы-связки, которые коррелируют с ключами в других таблицах, обеспечивая тем самым возможность связывания данных. Это позволяет автоматически синхронизировать изменения в связанных таблицах, что является неоценимым плюсом при работе с обширными базами данных, где информация разделена между множеством таблиц. 

Структура запроса с использованием JOIN выглядит так:

SELECT dataField(s)
FROM tableA
JOIN tableB
ON tableA.dataField = tableB.dataField;

В данном случае JOIN применяется для объединения двух таблиц (tableA и tableB). Соединение осуществляется по общему столбцу (dataField). Кроме того, в запросе присутствует выборка определенных столбцов (dataField(s)), которые разработчик хочет увидеть в итоговом результате. 

Стоит отметить, что в мире SQL существуют разнообразные виды объединения таблиц, среди которых:

  1. INNER JOIN: позволяет нам извлекать исключительно те строки, которые обладают соответствующими записями в обеих таблицах, то есть там, где условия совпадения выполнены:

SELECT Purchases.PurchaseID, Clients.ClientName
FROM Purchases
INNER JOIN Clients
ON Purchases.ClientID = Clients.ClientID;
  1. LEFT (OUTER) JOIN: применяется тогда, когда требуется извлечь все строки из таблицы, расположенной слева (то есть из той, что указана первой в запросе), и соответственно, те строки из таблицы справа, которые имеют совпадения. В случае отсутствия пар в правой таблице, результаты для этих строк будут содержать значение NULL

SELECT Clients.ClientName, Purchases.PurchaseID
FROM Clients
LEFT JOIN Purchases
ON Clients.ClientID = Purchases.ClientID;
  1. RIGHT (OUTER) JOIN: действует аналогично LEFT JOIN, но наоборот. Здесь мы получаем все записи из правой таблицы, дополняемые соответствующими данными из левой таблицы. Если совпадений для записей из правой таблицы не обнаружено, то вместо данных из левой таблицы ставится NULL:

SELECT Clients.ClientName, Purchases.PurchaseID
FROM Clients
RIGHT JOIN Purchases
ON Clients.ClientID = Purchases.ClientID;
  1. FULL (OUTER) JOIN: этот тип объединения предоставляет нам все строки из обеих таблиц, для которых есть соответствующие записи. Другими словами, он объединяет LEFT и RIGHT JOIN. Если в первой таблице есть строки, для которых не найдено пары во второй таблицы, то соответствующие поля второй таблицы в этих строках будут содержать NULL. Аналогично, если записи из второй таблицы не имеют совпадений в первой, то для этих записей столбцы, принадлежащие первой таблице, будут содержать NULL:

SELECT Clients.ClientName, Purchases.PurchaseID
FROM Clients
FULL OUTER JOIN Purchases
ON Clients.ClientID = Purchases.ClientID;

Стоит отметить, что хотя FULL (OUTER) JOIN является стандартной функцией SQL, он не поддерживается во всех SQL-системах. Например, в MySQL нет встроенной поддержки FULL (OUTER) JOIN, поскольку их можно эмулировать с помощью комбинации LEFT JOIN и UNION:

SELECT Clients.ClientName, Purchases.PurchaseID
FROM Clients
LEFT JOIN Purchases
ON Clients.ClientID = Purchases.ClientID

UNION 

SELECT Clients.ClientName, Purchases.PurchaseID
FROM Purchases
LEFT JOIN Clients
ON Clients.ClientID = Purchases.ClientID
WHERE Clients.ClientID IS NULL;

Этот запрос сначала выполняет внешнее левое соединение, присоединяя записи из Purchases к Clients. Затем присоединяются записи из Clients к Purchases, которые не были выбраны в первом запросе (т.е. те, где ClientID является NULL). Наконец, он объединяет результаты этих двух запросов. 

В этом разделе мы обсудили разные типы JOIN в SQL. Каждый из этих объединений позволяет нам с гибкостью управлять тем, какие именно данные из связанных таблиц мы хотим увидеть в результирующем наборе.

Заключение

В данном руководстве мы на практических примерах изучили использование таких операторов в SQL, как SELECT, WHERE, ORDER BY, JOIN, GROUP BY и HAVING. Эти операторы предоставляют пользователям обширные возможности для обработки информации, позволяя проводить сложные аналитические запросы и извлекать максимальную пользу из хранимых данных. Надеемся, что теперь вы понимаете, как использовать SQL для выборки данных из БД! 

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону