- Основные методы выборки данных
- Использование оператора SELECT
- Выборка всех столбцов из таблицы
- Выборка определённых столбцов
- Использование WHERE для фильтрации данных
- Сортировка данных
- Примеры сложных запросов
- Использование JOIN для объединения таблиц
- Фильтрация данных с помощью условий WHERE
- Сортировка результатов с помощью ORDER BY
- Советы для эффективного выбора данных
- Избегайте использования символов подстановки в WHERE
- Видео:
- SQL за 13 минут
Основные методы выборки данных
При работе с базами данных необходимо уметь извлекать нужную информацию из различных таблиц. Различные операторы и конструкции позволяют выполнять фильтрацию, объединение и сортировку данных по заданным критериям. Ниже рассмотрены основные способы выполнения выборки с примерами использования в реальных запросах.
Для выполнения сложных запросов часто используются операторы JOIN, позволяющие объединять данные из нескольких таблиц. В зависимости от случая, можно применять такие виды объединений, как INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN. Рассмотрим пример запроса с использованием INNER JOIN:
SELECT e.lastname, p.productsummary, s.subtotal
FROM humanresourcesemployee e
INNER JOIN nondiscountsales s ON e.id_author = s.id_author
INNER JOIN productsummary p ON s.product_id = p.product_id
WHERE e.hiredate > '2023-01-01'; Для получения уникальных записей в выборке часто используется оператор DISTINCT. Он позволяет исключить дублирующиеся строки. Пример применения:
SELECT DISTINCT productsummary
FROM dbonewproducts; При фильтрации данных по конкретным критериям применяется оператор WHERE. С его помощью можно задать условия, такие как диапазон дат, значения столбца и другие параметры:
SELECT *
FROM tempdb
WHERE hiredate BETWEEN '2022-01-01' AND '2023-01-01'; Для ограничения количества возвращаемых строк используется оператор LIMIT. Это полезно при работе с большими наборами данных:
SELECT lastname, hiredate
FROM humanresourcesemployee
LIMIT 10; Объединяя данные из разных источников, можно также использовать подзапросы. Они позволяют выполнять вложенные запросы для получения данных по сложным критериям:
SELECT lastname, (SELECT COUNT(*) FROM purchasesclientid WHERE client_id = e.client_id) AS purchase_count
FROM clientsclientid e; Применение различных методов выборки данных делает работу с базами данных гибкой и мощной, позволяя быстро находить нужную информацию и выполнять сложные аналитические задачи.
| Метод | Описание | Пример |
|---|---|---|
| JOIN | Объединение данных из нескольких таблиц | INNER JOIN, LEFT JOIN |
| DISTINCT | Выборка уникальных записей | SELECT DISTINCT |
| WHERE | Фильтрация данных по критериям | WHERE hiredate BETWEEN |
| LIMIT | Ограничение количества строк в результате | LIMIT 10 |
| Подзапросы | Вложенные запросы | (SELECT COUNT(*) FROM ...) |
Использование оператора SELECT
Основной синтаксис оператора SELECT включает следующие ключевые элементы:
- SELECT: Указывает, какие столбцы должны быть возвращены в результате запроса.
- FROM: Указывает, из каких таблиц должны быть извлечены данные.
- WHERE: Определяет условия для фильтрации записей.
- ORDER BY: Указывает порядок сортировки возвращаемых данных.
Рассмотрим основные примеры использования оператора SELECT.
Выборка всех столбцов из таблицы
Для получения всех столбцов из таблицы используется символ «*»:
SELECT * FROM dbo.NewProducts; Выборка определённых столбцов

Для выборки конкретных столбцов необходимо указать их названия после оператора SELECT:
SELECT ProductName, ProductNumber, OrderQty FROM dbo.NewProducts; Использование WHERE для фильтрации данных
Оператор WHERE позволяет фильтровать записи по заданным условиям. Например, можно выбрать все продукты с идентификатором, большим 100:
SELECT ProductName, ProductNumber FROM dbo.NewProducts WHERE ProductID > 100; Сортировка данных
С помощью оператора ORDER BY можно отсортировать результаты запроса по одному или нескольким столбцам. Например, для сортировки по имени продукта:
SELECT ProductName, ProductNumber FROM dbo.NewProducts ORDER BY ProductName; Примеры сложных запросов
Также можно использовать более сложные запросы с объединением таблиц, фильтрацией и сортировкой. Например, запрос для получения сведений о продажах, в которых учитывается скидка:
SELECT p.ProductName, s.SalesAmount, s.UnitPriceDiscount
FROM Sales s
INNER JOIN Products p ON s.ProductID = p.ProductID
WHERE s.UnitPriceDiscount > 0
ORDER BY s.SalesAmount DESC; Этот запрос вернет названия продуктов и сумму продаж с учётом скидки, отсортированные по убыванию суммы продаж.
Использование JOIN для объединения таблиц

Операторы INNER JOIN, LEFT JOIN и другие позволяют объединять данные из нескольких таблиц. Рассмотрим пример с использованием LEFT JOIN для получения всех продуктов и их продаж, если таковые имеются:
SELECT p.ProductName, s.SalesAmount
FROM Products p
LEFT JOIN Sales s ON p.ProductID = s.ProductID; Этот запрос вернет все продукты, включая те, для которых нет записей о продажах.
Применение оператора SELECT в запросах, в которых задействованы сложные выражения и условия, позволяет получать точные и структурированные данные, необходимые для аналитики и принятия решений.
Фильтрация данных с помощью условий WHERE
Для применения фильтрации, используйте ключевое слово WHERE после указания таблицы FROM. Например, в запросе, который обращается к таблице humanresourcesemployee, можно отфильтровать сотрудников по их division:
SELECT * FROM humanresourcesemployee WHERE division = 'Sales'; Вы также можете фильтровать записи по нескольким условиям, используя операторы AND и OR. Например, чтобы выбрать всех сотрудников, работающих в отделе продаж и имеющих больше 10 vacationhours, используйте следующий запрос:
SELECT * FROM humanresourcesemployee WHERE division = 'Sales' AND vacationhours > 10; Для работы с датами можно применять условия WHERE с датой. Например, чтобы найти все продажи, совершенные после определенной даты, используйте следующий запрос:
SELECT * FROM sales WHERE sale_date > '2023-01-01'; Иногда фильтрация по отдельному столбцу недостаточна. В таких случаях можно воспользоваться подзапросами. Например, чтобы выбрать всех авторов, у которых есть опубликованные книги:
SELECT * FROM authors WHERE id_author IN (SELECT id_author FROM books); Условия WHERE можно также применять в запросах с объединением таблиц. Например, чтобы выбрать всех клиентов, совершивших покупки продуктов марки Samsung, используйте:
SELECT clients.* FROM clients
JOIN orders ON clients.clientid = orders.clientid
JOIN products ON orders.productid = products.productid
WHERE products.brand = 'Samsung'; Не забывайте, что для фильтрации агрегированных данных используется HAVING. Например, чтобы выбрать продукты, общая сумма продаж которых превышает 1000:
SELECT productid, SUM(subtotal) as total_sales
FROM sales
GROUP BY productid
HAVING total_sales > 1000; Используя условия WHERE, вы можете эффективно управлять выборкой данных, улучшая производительность запросов и делая результаты более точными и релевантными. Научись использовать эти возможности, чтобы повысить свои навыки работы с базами данных.
Сортировка результатов с помощью ORDER BY

При выполнении запросов, сортировка может быть произведена по одному или нескольким столбцам. Например, вы можете отсортировать продажи по полю unitprice, чтобы увидеть сначала товары с наименьшей стоимостью. Используйте выражение ORDER BY unitprice, чтобы достичь этого.
Если необходимо отсортировать данные по нескольким критериям, добавляйте дополнительные столбцы через запятую. Например, для сортировки сначала по lastname, а затем по firstname, используйте запрос: ORDER BY lastname, firstname. Это позволит сгруппировать записи по фамилиям и упорядочить по именам внутри каждой группы.
В случае использования сложных условий, таких как HAVING или WHERE, сортировка также может быть применена. Например, при отборе записей о продажах, где скидка (unitpricediscount) составляет более 10%, можно отсортировать результирующую выборку по полю salesperson, чтобы выявить наиболее активных сотрудников.
Оператор ORDER BY поддерживает сортировку как по возрастанию (по умолчанию), так и по убыванию. Для сортировки по убыванию используется ключевое слово DESC. Например, чтобы отсортировать продукцию по productnumber в обратном порядке, используйте запрос: ORDER BY productnumber DESC.
Когда необходимо ограничить количество возвращаемых записей, совместно с оператором ORDER BY применяйте LIMIT. Например, для получения топ-10 продаж по стоимости, используйте запрос: ORDER BY unitprice DESC LIMIT 10. Это позволит увидеть только записи с самыми высокими значениями.
В случаях, когда данные извлекаются из нескольких таблиц с использованием оператора JOIN, сортировка может быть применена к любому столбцу из любой таблицы. Например, при объединении таблиц clients и sales по идентификатору клиента (clientsclientid), можно отсортировать данные по полю nondiscountsales, чтобы увидеть наибольшие продажи без учета скидок.
Таким образом, умение правильно использовать ORDER BY позволяет более эффективно анализировать и интерпретировать данные в любых запросах, делая их упорядоченными и удобными для дальнейшего анализа.
Советы для эффективного выбора данных

Эффективное извлечение информации из баз данных требует внимательного подхода и знания нескольких важных аспектов. В данном разделе мы рассмотрим ключевые рекомендации, которые помогут вам максимально эффективно работать с запросами, избегая типичных ошибок и добиваясь оптимальных результатов.
Во-первых, старайтесь минимизировать нагрузку на server, используя только необходимые столбцы в ваших запросах. Например, если требуется только столбец unitpricediscount из таблицы production, не следует запрашивать все столбцы, так как это делает выборку данных медленнее и увеличивает нагрузку на систему.
Старайтесь избегать временных таблиц в tempdb, если можно обойтись без них. Временные таблицы могут замедлить выполнение запросов и увеличить потребление ресурсов сервера. Вместо этого, если возможно, используйте подзапросы или общие табличные выражения (CTE).
Оптимизируйте запросы с использованием индексов. Проверяйте, есть ли индексы на столбцах, используемых в условиях фильтрации и сортировки. Например, для условий, связанных с ejobtitle или unitprice, индексы помогут значительно ускорить выполнение запросов.
Научитесь правильно использовать агрегатные функции и операторы. Например, для определения суммарной стоимости продаж, в которых нет скидок, используйте SUM(unitprice) AS nondiscountsales с соответствующими условиями. Это позволит не только получить необходимые данные, но и сделать это эффективно.
Всегда проверяйте свои запросы перед выполнением на больших наборах данных. Используйте команду EXPLAIN, чтобы понять, как будет выполняться запрос и какие индексы будут задействованы. Это поможет обнаружить потенциальные узкие места и оптимизировать запрос до его выполнения.
Избегайте использования символов подстановки в WHERE

Предположим, что у нас есть таблица salesperson, в которой хранятся данные о продажах. Использование символов подстановки, таких как ‘%’ и ‘_’, в запросах может сделать выполнение запросов медленнее, особенно если таблица содержит большое количество записей. Например, запрос SELECT * FROM salesperson WHERE name LIKE '%johnson%' заставляет базу данных проверять каждую запись на наличие строки ‘johnson’, что может значительно замедлить процесс.
Вместо этого, рассмотрим использование более специфичных условий фильтрации. Например, если мы ищем информацию о продажах определенного продукта, таких как iphone или samsung, лучше использовать точные значения, а не подстановочные символы. Это позволяет базе данных использовать индексы и выполнять запросы быстрее. Запрос SELECT * FROM salesperson WHERE product = 'iphone' будет выполнен значительно быстрее, чем использование подстановочного символа.
Рассмотрим таблицу productionproductmodel, где хранятся данные о моделях продукции. Использование подстановочных символов в условиях WHERE, например, SELECT * FROM productionproductmodel WHERE model LIKE '%black%', может замедлить процесс выборки данных. Вместо этого лучше использовать точные наименования или идентификаторы, такие как model = 'black edition'.
Символы подстановки также могут создавать проблемы при работе с большими и сложными таблицами, такими как humanresourcesemployee или dbonewproducts. В этих случаях, использование точных критериев отбора, таких как идентификаторы или конкретные значения столбцов, позволяет существенно улучшить производительность запросов.
В таблице productsummary может быть полезно использовать операторы сравнения для выбора записей, соответствующих определённым критериям. Например, запрос SELECT * FROM productsummary WHERE unitprice > 100 выполняется быстрее и эффективнее, чем использование символов подстановки.
Для объединения таблиц, таких как purchasesclientid и ejobtitle, лучше использовать операторы INNER JOIN или OUTER JOIN вместо символов подстановки. Это делает запросы более читаемыми и позволяет базе данных лучше оптимизировать выполнение запросов.
Ниже приведен пример запроса, который избегает использования символов подстановки и является более эффективным:
SELECT DISTINCT p.product_id, p.product_name, s.sales_amount
FROM dbonewproducts p
INNER JOIN salesperson s ON p.product_id = s.product_id
WHERE s.sales_amount > 1000 AND p.category = 'advertising'
ORDER BY p.product_name;
Избегая использования подстановочных символов и применяя точные критерии отбора, вы можете значительно улучшить производительность ваших запросов и обеспечить более быстрый доступ к данным. Это особенно важно при работе с большими базами данных и сложными структурами.








