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');
Выражение SQL “ EXISTS (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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|