Базовые 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 и попробовать как работает можно по ссылке.
Related content
(c) MySales Labs Ltd
Единственным и исключительным владельцем программного обеспечения MySales, данной документации и других связанных с MySales сопроводительных материалов, является MySales Labs Ltd