Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

SELECT p.Цвет, p.Город




FROM p

WHERE (((p.Город)<>"Киев")

And ((p.Вес)>10));

 

9. Сохраните запрос под именем Запрос_6, и затем выполните запрос.

 

Обратите внимание на то, что в полученной таблице будет четыре записи, а не две, несмотря на то, что три из них идентичны. Язык SQL не удаляет лишние дублирующие строки из результата оператора SELECT, пока пользователь явно не потребует этого с помощью оператора DISTINCT.

10. Измените инструкцию запроса, добавив после оператора SELECT слово DISTINCT.

11. Выполните измененный запрос и просмотрите результат, который вернет теперь только две строки.

 

Пример _7. Для всех деталей получите номера детали и ее вес в килограммах.

12. Для выполнения этого примера введите следующую инструкцию:

 

SELECT P.Д, P.ВЕС/1000 AS КГ

FROM P;

 

13. Сохраните запрос под именем Запрос_7 и выполните запрос.

 

Обратите внимание, что в результирующей таблице появится новый столбец под названием КГ. Если бы оператор As кг был опущен, то столбец был бы безымянным.

Пример _8. Получить информацию о всех поставщиках.

14. Для выполнения этого примера введите следующую инструкцию:

SELECT *

FROM S;

15. Сохраните запрос под именем Запрос_8 и выполните запрос.

 

Результат запроса будет таблица S, так как звездочка - сокращение для списка всех имен столбцов таблицы, на которую делается ссылка в инструкции FROM.

Пример _8. Получить информацию обо всех парах поставщиков и деталей, совмещенных в одном городе:

16. Для выполнения этого примера введите следующую инструкцию:

SELECT s.п, S.имя, S.статус, S.город, P.Д, P.город

FROM s, p

WHERE s.город=p.город;

 

Результатом этого запроса будет естественное соединение таблиц S и P (по городам). Реализация этого запроса происходит следующим образом.

Во-первых, после выполнения инструкции FROM получается декартово произведение S TIMES P.

Далее, после выполнения WHERE получается выборка из этого произведения, в которой два значения ГОРОД в каждой строке равны (иначе говоря, построено соединение поставщиков и деталей по эквивалентности городов).

И, наконец, после выполнения оператора SELECT получается проекция выборки по столбцам, указанным в инструкции SELECT. Конечным результатом будет естественное соединение.

Следовательно, можно сказать, что инструкция FROM в SQL соответствует декартову произведению, инструкция WHERE – выборке, а совместная инструкция SELECT – FROM – WHERE представляет проекцию выборки произведения.

17. Сохраните запрос под именем Запрос_8 и выполните запрос. Просмотрите результаты запроса.

 

Пример _9: Получить все пары номеров поставщиков, таких, что оба поставщика в каждой паре размещаются в одном и том же городе:

18. Для выполнения этого примера введите следующую инструкцию:

SELECT first.П AS ПA, second.П AS ПB, second.Город

FROM s AS first, s AS second

WHERE (((first.П)<second.П)

AND ((first.Город)=second.город));

Обратите внимание на явные переменные области значений FIRST и SECOND, и также следует заметить, что вводимые имена столбцов ПА и ПВ относятся к столбцам результирующей таблицы.

19. Сохраните запрос под именем Запрос_9. Выполните запрос и просмотрите результаты.

Пример _10: Получить общее число поставщиков.

20. Для выполнения этого примера введите следующую инструкцию:

SELECT COUNT(*) AS N

FROM S;

Результатом этого запроса будет таблица с одним столбцом с именем N и одной строкой, содержащей значение 5. Язык SQL поддерживает обычный набор итоговых функций (count, sum, avg, max, min). Следует отметить, что функция COUNT (*) подсчитывает все строки в таблице без удаления дублирующих строк и не допускает применения слова DISTINCT.

21. Сохраните запрос под именем Запрос_10. Выполните запрос и просмотрите результаты.

Пример _11: Получить максимальное и минимальное количество для детали P2.

 

 

22. Для выполнения этого примера введите следующую инструкцию:

SELECT MAX(SP.КОЛИЧЕСТВО) AS MAXQ, MIN(SP.КОЛИЧЕСТВО) AS MINQ

FROM SP

WHERE SP.Д='P2';

Здесь обе инструкции From и Where фактически являются аргументами для двух итоговых функций.

23. Сохраните запрос под именем Запрос_11. Выполните запрос и просмотрите результаты.

Пример _12: Для каждой поставляемой детали получить номер детали и общее количество поставки.

24. Для выполнения этого примера введите следующую инструкцию:

SELECT SP.Д, SUM(SP.КОЛИЧЕСТВО) AS ОБЩЕЕ_КОЛИЧЕСТВО

FROM SP

GROUP BY SP.Д;

Следует отметить, что если указана инструкция GROUP BY, то выражение в инструкции SELECT должно быть однозначным; в группе (выделяется одна запись).

Этот же запрос можно оформить и так:

SELECT P.Д, (SELECT SUM (SP.КОЛИЧЕСТВО)

FROM SP

WHERE SP.Д = P.Д) AS ОБЩЕЕ_КОЛИЧЕСТВО

FROM P;

 

В этой записи приводится возможность использования вложенных выражений выборки для представления скалярных элементов.

25. Сохраните запрос под именем Запрос_12. Выполните запрос и просмотрите результаты.

Пример _13: Получить поставщиков, статус которых меньше текущего максимального статуса в таблице S.

 

26. Для выполнения этого примера введите следующую инструкцию:

SELECT S.П

FROM S

WHERE S.СТАТУС < (SELECT MAX (S.СТАТУС)

FROM S);

27. Сохраните запрос под именем Запрос_13. Выполните запрос и просмотрите результаты.

 

Пример _14: Получить имена поставщиков, поставляющих деталь P2.

28. Для выполнения этого примера введите следующую инструкцию:

 

SELECT DISTINCT S.ИМЯ

FROM S

WHERE EXISTS (SELECT *

FROM SP

WHERE SP.П = S.П AND SP.Д = 'P2');

 

Выражение SQLEXISTS (SELECT....FROM...)” будет истинным тогда и только тогда, когда результат вычисления выражения “ SELECT...FROM..” будет непустым. Другими словами, в SQL функция EXISTS соответствует квантору существования реляционного исчисления. Квантор – логический оператор, переводящий одну высказывательную форму в другую. Различают квантор всеобщности (FORALL) и квантор существования (EXISTS). Оператор EXISTS служит аналогом операции MINUS в реляционной алгебре.

29. Сохраните запрос под именем Запрос_14. Выполните запрос и просмотрите результаты.

 

Пример _15: Получить имена поставщиков, которые не поставляют деталь P2.

30. Для выполнения этого примера введите следующую инструкцию:

SELECT DISTINCT S.ИМЯ

FROM S

WHERE NOT EXISTS

(SELECT *

FROM SP

WHERE SP.П = S.П

AND SP.Д = 'P2');

31. Сохраните запрос под именем Запрос_15. Выполните запрос и просмотрите результаты.

 

 

Пример _16: Получить имена поставщиков, поставляющих все детали.

 

32. Для выполнения этого примера введите следующую инструкцию:

SELECT DISTINCT S.ИМЯ

FROM S

WHERE NOT EXISTS

(SELECT *

FROM P

WHERE NOT EXISTS

(SELECT *

FROM SP

WHERE SP.П =S.П AND SP.Д =P.Д));

 

Язык SQL не включает какой-либо непосредственной поддержки универсального квантора FORALL, следовательно, запросы типа FORALL обычно выражаются через отрицание кванторов существования, как в этом примере.

Можно немного упростить выражение запроса («имена поставщиков, для которых количество поставляемых деталей равно количеству всех деталей»).

 

SELECT DISTINCT S.ИМЯ

FROM S

WHERE

(SELECT COUNT (SP.П)

FROM SP

WHERE SP.П=S.П) = (SELECT COUNT (P.Д) FROM P);

 

В последней формулировке предполагается, что нет номеров деталей в отношении SP, которые не содержатся в отношении P.

33. Сохраните запрос под именем Запрос_16. Выполните запрос и просмотрите результаты.

Пример _17: Получить номера деталей, которые или весят более 16 граммов, или поставляются поставщиком S2, или то и другое.

34. Для выполнения этого примера введите следующую инструкцию:

 

SELECT P.Д

FROM P

WHERE P.ВЕС >16

UNION

SELECT SP.Д

FROM SP

WHERE SP.П='S2';

Лишние повторяющиеся строки всегда исключаются из результата безусловных операторов UNION, INTERSECT, EXCEPT, однако можно уточнить результаты, например, оператором UNION ALL.

35. Сохраните запрос под именем Запрос_17. Выполните запрос и просмотрите результаты.

36. Продемонстрируйте результаты работы преподавателю.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...