Базовые SQL запросы

 

Для создания базовых отчетов необходимы базовое понимание как работают sql запросы. Сегодня существует несколько диалектов SQL, в документации детально будут рассмотрены запросы на диалекте T-SQL, который используется в СУБД MS SQL Server.

Ниже будут приведены главные sql команды, которые необходимы для базовой работы с sql скриптами - SELECT, FROM, WHERE, JOIN, GROUP BY, ORDER BY.

Отличный мануал по SQL с примерами и возможностью попробовать разные команды приведен по ссылке. Мануал предоставлен на английском языке, но есть возможность перевести сайт, нажав на 🌎 на сайте и выбрав нужный язык.

SELECT

SELECT - это базовая команда, которая используется для выбора данных из базы. Эта команда обычно используется с командой FROM, которая указывает с какой таблицы нужно выбрать данные. Также возможна выборка из нескольких таблиц - это будет описано в секции JOIN. Стандартно запрос SELECT выглядит следующим образом:

SELECT column1, column2, ...
FROM table_name;

column1, column2, ... в этом запросе - это названия полей (колонок) в таблице, из которых вы хотите получить данные. В случае, если нужно выбрать все данные, используется * :

SELECT * FROM table_name;

Например результатом запроса SELECT sku_id, article_name FROM products; будут две колонки с кодом ску и названием с таблицы PRODUCTS:

А результатом запроса SELECT * FROM products; будут все колонки с таблицы PRODUCTS:

Создавая SELECT запросы желательно присваивать колонкам так называемые aliases (условно название):
SELECT column_1 SKU, column_2 STORE FROM table_name;.
В этом примере SKU и STORE - это aliases колонок column_1 и column_2 - они будут дальше использоваться в работе с конструктором отчетов.

Ознакомится ближе с SELECT и попробовать как работают можно по ссылке. Ознакомится ближе с понятием aliases можно по ссылке.

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

  • SELECT DISTINCT - используется для выбора уникальных значений поля. Например:
    SELECT DISTINCT column_1 FROM table_name;.
    Этот запрос выведет только уникальные значения в колонке column_1.
    Ознакомится ближе с SELECT DISTINCT и попробовать как работают можно по ссылке.

  • SELECT TOP - используется для выбора первых N значений из поля. Например:
    SELECT TOP 100 column_1 FROM table_name;.
    Этот запрос выведет только первые 100 значений в колонке column_1.
    Ознакомится ближе с SELECT TOP и попробовать как работают можно по ссылке.

  • MIN/MAX - используется для вывода наименьшего или наибольшего значений в колонке. Например:
    SELECT MIN(column_1) FROM table_name;.
    Этот запрос выведет наименьшее значение в колонке column_1.
    Ознакомится ближе с MIN/MAX и попробовать как работают можно по ссылке.

  • COUNT, AVG, SUM - COUNT() считает количество строк в колонке; AVG() выводит среднее значение колонки; SUM() - выводит сумму всех значений.
    * SELECT COUNT(column_1) FROM table_name;.
    Этот запрос выведет количество строк в колонке column_1.
    * SELECT AVG(column_1) FROM table_name;.
    Этот запрос выведет среднее значение в колонке column_1.
    * SELECT SUM(column_1) FROM table_name;.
    Этот запрос выведет сумму всех значений в колонке column_1.
    Ознакомится ближе с COUNT, AVG, SUM и попробовать как работают можно по ссылке.

WHERE

Команда WHERE используется для создания условия выборки:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

Например если вам нужно выбрать все значение, которые больше 10, то в условии WHERE должно быть указано:
SELECT column1
FROM table_name
WHERE column1 > 10;

Также у команды WHERE есть математические операторы, такие как больше, меньше, не равно и тд. Они используются при задании условия.

Ознакомится ближе с WHERE, доступными операторами и попробовать как работают можно по ссылке.

Условий в WHERE может быть несколько, для их задания используются логические операторы "AND", "OR", "NOT".
Если необходимо, чтобы выполнялось и одно и другое условия - используется AND.
Если необходимо, чтобы выполнялось одно из нескольких условий - используется OR.
Если необходимо, чтобы данные выводились, когда условие не выполняется - используется NOT.

Ознакомится ближе с AND, OR, NOT и попробовать как работают можно по ссылке.

Операторы IN и LIKE - это операторы сравнения в условии WHERE.

  • IN позволяет делать выборку, когда есть несколько значений, например:
    SELECT SKU_ID, ITEM_CODE FROM PRODUCTS WHERE SKU_ID in (2,4,8)
    Этот запрос выведет только те SKU, SKU_ID которых равен 2, 4 или 8.
    Ознакомится ближе с IN и попробовать как работает можно по ссылке.

  • LIKE позволяет искать заданный шаблон в данных из колонки, например:
    SELECT SKU_ID, ARTICLE_NAME FROM PRODUCTS WHERE ARTICLE_NAME like (%Коньяк%)
    Этот запрос выведет те SKU, в названии которых есть слово "Коньяк".
    Ознакомится ближе с LIKE и попробовать как работает можно по ссылке.

Также в WHERE можно работать с колонками, у которых есть значения NULL (поле в котором нету значения). При работе с NULL не работают стандартные операторы WHERE. Нужно использовать операторы IS NULL и IS NOT NULL. Ознакомится ближе с IS NULL и IS NOT NULL и попробовать как работает можно по ссылке.

ORDER BY

Команда ORDER BY позволяет сортировать вывод данных по определенным правилам.

SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER_BY column1 asc/desc

Ознакомится ближе с ORDER BY и попробовать как работает можно по ссылке.

JOIN

Команда JOIN используется после команды FROM и применяется для вывода в запросе колонок из разных таблиц, которые связаны между собой. Так например, если есть таблица PRODUCTS с колонками SKU_ID, GROUP_ID и есть таблица GROUPS из колонками GROUP_ID и GROUP_NAME, JOIN позволит нам выбрать данные SKU_ID и GROUP_NAME из разных таблиц, при этом связать их по GROUP_ID.

Существует несколько видов JOIN:

  • (INNER) JOIN - можно использовать как с приставкой INNER так и без - выводит только те записи, которые имеют совпадающие значения в обеих таблицах;

  • LEFT JOIN - выводит все записи из левой таблицы (которая указана в FROM) и соответствующие записи из правой таблицы (которая указана в JOIN);

  • RIGHT JOIN - выводит все записи из левой таблицы (которая указана в JOIN) и соответствующие записи из правой таблицы (которая указана в FROM);

  • FULL JOIN - выводит все записи, если есть совпадение в левой или правой таблице;

Ознакомится ближе с понятием JOIN и попробовать как работает можно по ссылке.

Более детально изучить и попробовать каждый тип из JOIN можно по ссылкам: (INNER) JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN.

GROUP BY

Команда GROUP BY используется после команды WHERE и применяется для группирования данных по похожести. Так например можно сгруппировать все товары, у которых одинаковый код. Используется, если в запросе после SELECT есть агрегирующие функции - такие как COUNT, MAX, MIN, SUM, AVG и тд.

SELECT column1, sum(column2)
FROM table_name
WHERE condition
GROUP BY column1
ORDER_BY column1 asc/desc

Хороший пример использования GROUP BY в случае, если необходимо вывести например продажи за 4 недели (c 10 по 13 неделю 2019 года) в разрезе выбранного СКУ для двух Магазинов.
В таблице SALES_SKU продажи разбиты по неделям, нам нужно просуммировать продажи за 4 недели, чтобы получить продажи за 4 недели. Для такого случая запрос будет выглядеть следующим образом:

SELECT sku_id, store_id, sum(sales_volume) vol
FROM sales_sku
WHERE sku_id = 93 and week between 201910 and 201913 and store_id in (1,2)
GROUP BY sku_id, store_id
ORDER_BY vol asc

Результат выполнения такого запроса следующий:

Важно, что GROUP BY нужно указывать не только по SKU_ID, но также и по STORE_ID, так как эти два поля не используются в функции агрегации. И если выбрать только GROUP BY SKU_ID, то система выдаст ошибку, что STORE_ID не применен ни в GROUP BY ни в любой другой агрегирующей функции.

Ознакомится ближе с GROUP_BY и попробовать как работает можно по ссылке.

 

(c) MySales Labs Ltd
Единственным и исключительным владельцем программного обеспечения MySales, данной документации и других связанных с MySales сопроводительных материалов, является MySales Labs Ltd