Примеры запросов SQL могут использованы для изучения и практикума написания запросов в MS SQL Server.
Один запрос SQL можно вкладывать в другой. Подзапрос - есть не что иное, как запрос внутри запроса. Обычно, подзапрос используется в конструкции WHERE. Но возможны и другие способы использования подзапросов.
Запрос Q011. Выводится информация о товарах из таблицы m_product, коды которых есть и в таблице m_income:
SELECT *
FROM m_product
WHERE id IN (SELECT product_id FROM m_income);
Запрос Q012. Выводится список товаров из таблицы m_product, кодов которых нет в таблице m_outcome:
SELECT *
FROM m_product
WHERE id NOT IN (SELECT product_id FROM m_outcome);
Запрос Q013. В этом запросе SQL выводится уникальный список кодов и названий товаров, коды которых есть в таблице m_income, но которых нет в таблице m_outcome:
SELECT DISTINCT product_id, title
FROM m_income INNER JOIN m_product
ON m_income.product_id=m_product.id
WHERE product_id NOT IN (SELECT product_id FROM m_outcome);
Запрос Q014. Выводится из таблицы m_category уникальный список категорий, названия которых начинаются на букву М:
SELECT DISTINCT title
FROM m_product
WHERE title LIKE 'М%';
Запрос Q015. Пример выполнения арифметических операций над полями в запросе и переименования полей в запросе (alias). В этом примере для каждой записи о расходе товара подсчитываются сумма расхода = количество*цена и размер прибыли, при предположении, что прибыль составляет 7 процентов от суммы продаж:
SELECT dt, product_id, amount, price, amount*price AS outcome_sum,
amount*price/100*7 AS profit
FROM m_outcome;
Запрос Q016. В MS SQL Server вместо AS можно воспользоваться знаком =. Только в этом случае надо сперва написать имя алиаса. Проанализировав и упростив арифметические операции, можно увеличить скорость выполнения запроса:
SELECT dt, product_id, amount, price, outcome_sum=amount*price, profit=amount*price*0.07 FROM m_outcome;
Запрос Q017. При помощи инструкции INNER JOIN можно объединить данные нескольких таблиц. В следующем примере, в зависимости от значения ctgry_id, каждой записи таблицы m_income, сопоставляется название категории из таблицы m_category, к которой принадлежит товар:
SELECT c.title, b.title, dt, amount, price, amount*price AS income_sum
FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
ORDER BY c.title, b.title;
Запрос Q018. Такие функции как SUM - сумма, COUNT - количество, AVG – среднее арифметическое значение, MAX – максимальное значение, MIN – минимальное значение называются агрегатными функциями. Они принимают множество значений, и после их обработки возвращают единственное значение. Пример подсчета суммы произведения полей amount и price при помощи агрегатной функции SUM:
SELECT SUM(amount*price) AS Total_Sum
FROM m_income;
Запрос Q019. Пример использования нескольких агрегатных функций:
SELECT Sum(amount) AS Amount_Sum, AVG(amount) AS Amount_AVG,
MAX(amount) AS Amount_Max, Min(amount) AS Amount_Min,
Count(*) AS Total_Number
FROM m_income;
Запрос Q020. В этом примере подсчитана сумма всех товаров с кодом 1, оприходованных в июне 2011 года:
SELECT Sum(amount*price) AS income_sum FROM m_income WHERE product_id=1 AND dt BETWEEN '2011-06-01' AND '2011-06-30';