11546

Общая структура запроса SELECT

Лабораторная работа

Информатика, кибернетика и программирование

Разделы SELECT и FROM обязательно должны присутствовать в каждом запросе; остальные разделы могут присутствовать частично или отсутствовать вовсе...

Русский

2013-04-08

70 KB

6 чел.

1. Общая структура запроса SELECT

SELECT [DISTINCT] <список столбцов>

FROM <таблица(-ы) источников>

[WHERE <ограничения>]

[GROUP BY <столбцы из раздела SELECT или операция над этими столбцами>]

[HAVING <ограничения на результаты GROUP BY>]

[ORDER BY <список столбцов>]

[FOR XML …]

Разделы SELECT и FROM обязательно должны присутствовать в каждом запросе; остальные разделы могут присутствовать частично или отсутствовать вовсе.

2. Примеры запросов

--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.2008'

--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


 

А также другие работы, которые могут Вас заинтересовать

6640. Атаксия-телеангиоэктазия (болезнь Луи-Бар) 19.52 KB
  Атаксия-телеангиоэктазия (болезнь Луи-Бар) Атаксия-телеангиоэктазия - это наследственное нарушение васкуляризации кожи, конъюктивы и мозжечка. Синдром описан в 1941 г. D. Luis-Bar. Заболевание встречается с частотой 2-3 на 100.000 рождений и передае...
6641. Туберозный склероз (болезнь Бурневилля-Прингла) 20.11 KB
  Туберозный склероз (болезнь Бурневилля-Прингла) Туберозный склероз - семейное заболевание эктодермальных тканей, относящееся к группе факоматозов. Заболевание было впервые описано F. Recklinghausen в 1862 году. В 1880 году D. Bourneville детали...
6642. Бластоматозы. Нейрофиброматоз (БОЛЕЗНЬ Реклингхаузена) 25.01 KB
  Бластоматозы. Нейрофиброматоз (болезнь Реклингхаузена) Болезнь Реклингхаузена - заболевание из группы наследственных бластоматозов, характеризующееся сочетанным поражением кожи, центральной и периферической нервной системы, а в некоторых случаях - в...
6643. Болезнь Паркинсона. Хроническое прогрессирующее заболевание головного мозга 33.13 KB
  Болезнь Паркинсона Болезнь Паркинсона (БП) - хроническое прогрессирующее заболевание головного мозга, в основе которого лежит дегенерация нигростриарных нейронов и возникающий в связи с этим дисбаланс нейромедиаторов: дофамина, ацетилхолина, се...
6644. Гепатолентикулярная дегенерация. Гепатоцеребральная дистрофия, болезнь Вильсона-Вестфаля-Коновалова 32.79 KB
  Гепатолентикулярная дегенерация Гепатолентикулярная дегенерация (гепатоцеребральная дистрофия, болезнь Вильсона-Вестфаля-Коновалова) - наследственное заболевание, характеризующееся поражением паренхиматозных органов, в первую очередь – гол...
6645. Хорея Гентингтона - хроническое прогрессирующее наследственно-дегенеративное заболевание 32.99 KB
  Хорея Гентингтона Хорея Гентингтона - хроническое прогрессирующее наследственно-дегенеративное заболевание, характеризующееся хореическим гиперкинезом и другими экстрапирамидными нарушениями, расстройствами психики и деменцией. Частота встречаемости...
6646. Нервно-мышечные заболевания. Х - сцепленные прогрессирующие мышечные дистрофии Дюшенна и Беккера 25.58 KB
  Нервно-мышечные заболевания Наследственные нервно-мышечные заболевания - гетерогенная группа болезней, в основе которых лежит генетически детерминированное поражение нервно-мышечного аппарата. Прогрессирующие мышечные дистрофии. Прогрессирующие мыше...
6647. Прогрессирующая мышечная дистрофия Эмери-Дрейфуса 19.07 KB
  Прогрессирующая мышечная дистрофия Эмери-Дрейфуса. Заболевание описано Дрейфусом в 1961 г. Наследуется по рецессивному, сцепленному с Х-хромосомой типу, реже по аутосомно-доминантному типу с локализацией дефекта на 1 хромосоме (1q11- q23). Первичный...
6648. Лице-лопаточно-плечевая прогрессирующая мышечная дистрофия (Ландузи-Дежерина) 19.57 KB
  Лице-лопаточно-плечевая прогрессирующая мышечная дистрофия (Ландузи-Дежерина) Заболевание описано Ландузи и Дежерином в 1884 г. Частота 3-4 на 100.000 населения. Наследуется по аутосомно-доминантному типу. До 20-30% случаев заболевания рассматривают...