Читайте также:
|
|
Общая структура запроса SELECT
SELECT [DISTINCT] <список столбцов>
FROM <таблица(-ы) источников>
[WHERE <ограничения>]
[GROUP BY <столбцы из раздела SELECT или операция над этими столбцами>]
[HAVING <ограничения на результаты GROUP BY>]
[ORDER BY <список столбцов>]
Разделы SELECT и FROM обязательно должны присутствовать в каждом запросе; остальные разделы могут присутствовать частично или отсутствовать вовсе.
Примеры запросов
--2.1. Выбрать название и вес деталей
SELECT detail_name, weight
FROM detail
--2.2. Выбрать всю информацию из таблицы материалов
SELECT *
FROM material
----------------------------------------------------DISTINCT----------------------------------------------------------
--2.3. Выбрать уникальные коды поставщиков из таблицы поставок
SELECT DISTINCT supplier_id
FROM supply
----------------------------------------------------WHERE-------------------------------------------------------------
--2.4. Выбрать количество и даты поставки детали с кодом 2
SELECT supply_quantity, supply_date
FROM supply
WHERE detail_id = 2
--2.5. Выбрать названия поставщиков с кодами 1, 2 и 6
SELECT supplier_name
FROM supplier
WHERE supplier_id = 1 OR supplier_id = 2 OR supplier_id = 6
--или
SELECT supplier_name
FROM supplier
WHERE supplier_id in (1, 2, 6)
--2.6. Выбрать всю информацию о поставках, сделанных до 1.10.2008
SELECT *
FROM supply
WHERE supply_date <= '1.10.2006'
--2.7. Выбрать всю информацию о деталях, не начинающихся на букву «В» (в любом регистре) и чей вес меньше 50
SELECT *
FROM detail
WHERE UPPER (detail_name) NOT LIKE 'В%' AND weight < 50
--2.8. Выбрать название и код материала для деталей с весом между 5 и 10 или имеющих в названии букву «н» в третьей позиции
SELECT detail_name, material_id
FROM detail
WHERE (weight BETWEEN 5 AND 10) OR (detail_name LIKE '__н%')
--2.9. Выбрать названия поставщиков длиной не больше 15-и символов
SELECT supplier_name
FROM supplier
WHERE LEN (supplier_name) <= 15
--2.10. Выбрать месяца и годы поставок деталей
SELECT MONTH (supply_date) AS 'Месяц', YEAR (supply_date) AS 'Год'
FROM supply
------------------------------------------ORDER BY-------------------------------------------------------------------
--2.11. Упорядочить поставки сначала по коду поставщика, а затем по дате поставки
SELECT *
FROM supply
ORDER BY supplier_id, supply_date
--2.12. Выбрать названия поставщиков с кодами 2, 3 и 6, упорядоченных по алфавиту в обратном порядке
SELECT supplier_name
FROM supplier
WHERE supplier_id in (2, 3, 6)
ORDER BY supplier_name DESC
---------------------------------------Агрегация, GROUP BY-------------------------------------------------------
--2.13. Посчитать количество деталей, для которых задан вес
SELECT COUNT (*) AS 'Количество'
FROM detail
WHERE weight IS NOT NULL
--или
SELECT COUNT (weight) AS 'Количество'
FROM detail
--2.14. Определить средний вес деталей из материала с кодом 2
SELECT AVG (weight) AS 'Средний вес'
FROM detail
WHERE material_id = 2
--2.15. Из поставок, совершенных до 1.10.2008, выбрать самую крупную поставку и самую мелкую
SELECT MAX (supply_quantity) AS 'Крупная поставка', MIN (supply_quantity) AS 'Мелкая поставка'
FROM supply
WHERE supply_date < '1/10/2008'
--2.16. Для поставщиков с кодами 1 и 2 посчитать суммарное количество поставленных ими деталей
SELECT supplier_id, SUM (supply_quantity) AS 'Всего поставлено деталей'
FROM supply
WHERE supplier_id BETWEEN 1 AND 2
GROUP BY supplier_id
--2.17. Посчитать количество поставленных деталей в каждом месяце каждого года; результаты упорядочить в порядке убывания года и месяца
SELECT MONTH (supply_date) AS 'Месяц', YEAR (supply_date) AS 'Год',
COUNT (detail_id) AS 'Количество'
FROM supply
GROUP BY YEAR (supply_date), MONTH (supply_date)
ORDER BY 2, 1
---------------------------------------------------HAVING-------------------------------------------------------------
--2.18. Выбрать материалы, для которых суммарный вес выполненных из них деталей не больше 20
SELECT material_id, SUM (weight) AS 'Вес'
FROM detail
GROUP BY material_id
HAVING SUM (weight)!> 20
--2.19. Из поставок 2008-го года выбрать детали, поставлявшиеся более одного раза
SELECT detail_id, COUNT (*)
FROM supply
WHERE supply_date >= '1.01.2008'
GROUP BY detail_id
HAVING COUNT (*) >1
------------------------------------------Преобразование типов (CAST)----------------------------------------------
--2.20. Получить сведения о датах поставок в текстовом виде
SELECT CAST (supply_date AS varchar) AS 'Дата поставки'
FROM supply
--2.21. Получить сведения из таблицы деталей в виде строк «Деталь X имеет вес Y»
SELECT 'Деталь ' + detail_name + ' имеет вес ' + CAST (weight AS varchar)
FROM detail
----------------------------------------------Функция CASE-------------------------------------------------------------
--2.22. Разделить детали на легкие (весом до 20), средние (между 20 и 50) и тяжелые
SELECT detail_name, CASE WHEN weight < 20 THEN 'Легкая деталь'
WHEN weight >= 20 AND weight <50 THEN 'Средняя деталь'
ELSE 'Тяжелая деталь'
END AS weight
FROM detail
---------------------------------------Обработка NULL-значений-----------------------------------------------------
-- 2.23. Получить сведения о деталях и их весах, причем если у некоторой детали вес не задан, то вместо NULL-значения написать -100
SELECT detail_name, CASE WHEN weight IS NULL THEN -100
ELSE weight
END AS weight
FROM detail
--или
SELECT detail_name, ISNULL (weight, -100)
FROM detail
--------------------------------------------------------EXISTS-------------------------------------------------------------
--2.24. Выбрать название и код материала только тех деталей, которые когда-либо поставлялись
SELECT detail_name, material_id
FROM detail d
WHERE EXISTS (SELECT *
FROM supply s
WHERE s.detail_id = d.detail_id)
--2.25. Выбрать названия тех материалов, из которых не изготовлена ни одна деталь
SELECT material_name
FROM material m
WHERE NOT EXISTS (SELECT material_id
FROM detail d
WHERE d.material_id = m.material_id)
--------------------------------------------------------Подзапросы-------------------------------------------------------
--2.26. Получить сведения о самой последней (по дате) поставке
SELECT *
FROM supply
WHERE supply_date = (SELECT MAX (supply_date) FROM supply)
--2.27. Получить все поставки деталей из материала с кодом 2
SELECT *
FROM supply
WHERE detail_id IN (SELECT detail_id from detail WHERE material_id = 2)
--2.28. Для каждого поставщика получить сведения о самой первой (по дате) его поставке
SELECT *
FROM supply s1
WHERE s1.supply_date = (SELECT MIN (s2.supply_date)
FROM supply s2
WHERE s1.supplier_id = s2.supplier_id)
--2.29. Для каждого поставщика получить его имя и дату последнего заказа
SELECT supplier_name, (SELECT MAX (supply_date)
FROM supply
WHERE supply.supplier_id = supplier.supplier_id)
FROM supplier
---------------------------------------------Объединения таблиц-------------------------------------------------------
--2.30. Получить таблицу вида: название детали, название материала, из которого выполнена эта деталь
SELECT detail_name, material_name
FROM detail INNER JOIN material
ON detail.material_id = material.material_id
--или
SELECT detail_name, material_name
FROM detail CROSS JOIN material
WHERE detail.material_id = material.material_id
--или
SELECT detail_name, material_name
FROM detail, material
WHERE detail.material_id = material.material_id
--2.31. Получить таблицу вида: название поставщика, название детали, количество и дата поставки для деталей, у которых задан вес
SELECT supplier_name, detail_name, supply_quantity, supply_date
FROM supplier sr JOIN supply s
ON sr.supplier_id = s.supplier_id
JOIN detail d
ON d.detail_id = s.detail_id
WHERE weight IS NOT NULL
--2.32. Выбрать всю информацию о тех деталях, которые когда-либо поставлялись
SELECT DISTINCT d.detail_id, detail_name, weight, material_id
FROM detail d JOIN supply s ON d.detail_id = s.detail_id
--2.33. Для каждого поставщика посчитать суммарную величину его поставок
SELECT supplier_name, SUM (supply_quantity)
FROM supplier LEFT JOIN supply
ON supplier.supplier_id = supply.supplier_id
GROUP BY supplier_name
--2.34. Получить названия всех материалов и выполненных из них деталей
SELECT material_name, detail_name
FROM detail d RIGHT JOIN material m
ON d.material_id = m.material_id
--2.35. Получить все данные о поставщиках, поставках и деталях
SELECT *
FROM supplier s1 FULL JOIN supply s2
ON s1.supplier_id = s2.supplier_id
FULL JOIN detail d
ON s2.detail_id = d.detail_id
--2.36. Получить таблицу названий и весов деталей, причем последняя строка таблицы должна содержать итоги в виде суммарного веса всех деталей
SELECT detail_name, weight
FROM detail
UNION
SELECT 'Итого', SUM (weight)
FROM detail
ORDER BY weight
--2.37. Получить таблицу из двух полей, где первое поле – название детали, материала, поставщика или дата поставки, а второе поле – длина строки из первого поля
SELECT material_name, LEN (material_name)
FROM material
UNION
SELECT detail_name, LEN (detail_name)
FROM detail
UNION
SELECT supplier_name, LEN (supplier_name)
FROM supplier
UNION
SELECT CAST (supply_date AS varchar), LEN (supply_date)
FROM supply
Дата добавления: 2015-07-08; просмотров: 78 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Лазертаг | | | Виды анализа массовой информации |