Язык структурных запросов sql введение
Скачать 58.6 Kb.
|
Select номер_детали, название, вес from P where вес in (12, 16, 17)
Подготовьте запрос и проверьте полученный результат. 11. Выбор по шаблону. Для запросов с поиском по шаблону, основанных на поиске подстрок в полях типа CHARACTER, по стандарту ANSI используется ключевое слово LIKE. Включение в выражение ключевого слова NOT порождает условие c обратным смыслом.
Примеры. а) Выбрать список деталей, начинающихся с буквы "Б" Select номер_детали, название, вес from P where название like 'Б%'
б) Выдать список фамилий поставщиков, третья буква имени которых "а". Select фамилия from S where name like '__а%'
Подготовьте запросы и проверьте полученный результат. II. Использование функций 1. Агрегатные функции. Среди наиболее часто используемых функций отметим: Sum - сумма значений по столбцу; Avg - среднее значение в столбце; Max - максимальное значение в столбце; Min - минимальное значение в столбце. Примеры. а) Выдать общее количество поставщиков. Select count (*) from S Результат: 5 Подготовьте запрос и проверьте полученный результат. б) Выдать общее количество поставщиков, поставляющих в настоящее время детали. Select count (distinct номер_поставщика ) from SP Результат: 4 Подготовьте запрос и проверьте полученный результат. в) Выдать количество поставок для детали 'P2'. Select count (*) from SP where номер_детали='P2' Результат: 4 Подготовьте запрос и проверьте полученный результат. г) Выдать общее количество поставляемых деталей 'P2'. Select sum (количество) from SP where номер_детали='P2' Результат: 1000 Подготовьте запрос и проверьте полученный результат. д) Выдать средний, минимальный и максимальный объем поставок для поставщика S1 с соответствующим заголовком. Select avg(количество) as average, min(количество) as minimum, max(количество) as maximum from SP where номер_поставщика='S1'
Подготовьте запрос и проверьте полученный результат. 2. Строковые функции. Ниже перечислено несколько функций, относящихся к указанной группе. Общий их перечень достаточно широк. Substr(s,n,[l]) - функция возвращает подстроку s, начинающуюся с n длиной l; Lower(s) - функция возвращает строку s, преобразованную к нижнему регистру; Length(s) - функция возвращает длину строки s. Пример. Выдать два первых символа имен поставщиков, преобразованных к нижнему регистру. Select Substr(lower(фамилия), 1, 2) from s
Подготовьте запрос и проверьте полученный результат. III. Группирование 1. Оператор group by группирует таблицу, представленную фразой from в группы т.о., чтобы в каждой группе все строки имели одно и тоже значение поля, указанного во фразе group by. Далее, к каждой группе перекомпанованной таблицы (а не к каждой строке исходной таблицы) применяется фраза select, в результате чего, каждое выражение во фразе select принимает единственное значение для группы. Пример. Выдать для каждой поставляемой детали ее номер и общий объем поставок, за исключением поставок поставщика 'S1'. Select номер_детали, sum(количество) from SP where номер_поставщика <>'S1' group by номер_детали
Подготовьте запрос и проверьте полученный результат. 2. Фраза having. Фраза having играет ту же роль для групп, что и фраза where для строк и используется для того, чтобы исключать группы, точно так же, как where используется для исключения строк. Выражение во фразе having должно принимать единственное значение для группы. Пример. Выдать номера деталей, поставляемых более чем одним поставщиком. Select номер_детали from SP group by номер_детали having count(*) > 1
Подготовьте запрос и проверьте полученный результат. IV. Соединения таблиц. Классическая реляционная алгебра Кодда включает девять реляционных операций, последовательное применение которых позволяет реализовать выборку любых данных. Три из этих операции так или иначе связаны с соединением таблиц: операция взятия декартова произведения; операция соединение (соответствующая ей в стандарте ANSI операция носит название операции внутреннегосоединение); операция эквисоединения. Операция взятия декартово произведение содержит все возможные комбинации конкатенаций кортежей (строк) из соединяемых таблиц. Операция соединения представляет собой соединение кортежей соединяемых таблиц по указанному условию соединения. Строки, которые не удовлетворяют условиям соединения, отбрасываются. Операция эквисоединения является частным случаем операции соединение по условию равенства атрибутов. Кроме этого существует практически важное расширение операции эквисоединения – естественное (внешнее) соединение. Внешнее соединение может сохранить строки, для которых не находится соответствия в другой таблице. В этом случае недостающие поля заполняются значениями NULL. Решение о том, войдет ли такая строка в результирующий набор, зависит от того, в какой из соединяемых таблиц отсутствуют данные, и от типа внешнего соединения. Существуют три разновидности внешних соединений. Левое внешнее соединение. Всегда содержит как минимум один экземпляр каждой строки из таблицы, указанной слева от ключевого слова JOIN. Отсутствующие поля из правой таблицы заполняются значениями NULL. Правое внешнее соединение. Всегда содержит как минимум один экземпляр каждой строки из таблицы, указанной справа от ключевого слова JOIN. Отсутствующие поля из левой таблицы заполняются значениями NULL. Полное внешнее содинение. Всегда содержит как минимум один экземпляр каждой строки каждой из соединяемых таблиц. Отсутствующие поля в записях результирующего набора заполняются значениями NULL. Для построения соединений стандарт ANSI предусматривает следующую конструкцию cпецификаторов from и join: FROM источник1 [Nutural] тип соединения JOIN источник2 [on условие [,...] | Using (поле1 [,...])] Источник1. Первый из соединяемых наборов данных (имя таблицы или подзапрос). [Nutural] Два набора данных соединяются по равным значениям одноименных полей. Конструкции Оn и Using в этом случае недопустимы. Тип соединения Возможные виды соединений: [Inner] - внутреннее соединение; Left [Outer] - левое внешнее соединение; Right [Outer] - правое внешнее соединение; Full [Outer] - полное внешнее соединение; Cross – декартово произведение ; Источник2. Второй из соединяемых наборов данных (имя таблицы или подзапрос). On условие [,...] Отношение между источниками - критерий, аналогичный тому, который задается в конструкции Where. Using (поле1 [,...]) Одноименные поля источников, по совпадающим значениям которых производится соединение. В отличии от Nutural позволяет ограничиться некоторыми одноименными полями, тогда как Nutural производит соединение по всем одноименным полям. 1. Простое декартово произведение. Пример. Выдать информацию обо всех возможных парах поставщик - деталь. Select S.*, P.* from S Cross Join P Результат:
Всего 30 строк. Подготовьте запрос и проверьте полученный результат. Замечание: тот же результат может быть получен запросом Select * from S, P В отличие от предыдущего запроса этот запрос написан с отклонением от стандарта ANSI, но он более точно отражает смысл операции взятия декартова произведения. При написании запросов следует придерживаться стандарта ANSI, позволяющего формировать более читабельные запросы. 2. Простое эквисоединение. Пример. Выдать все комбинации информации о поставщиках и деталях, расположенных в одном городе. Select S.номер_поставщика, p.номер_детали, рейтинг from S Cross Join P where S.город=P.город Результат:
Всего 10 строк. Подготовьте запрос и проверьте полученный результат. Замечание: тот же результат может быть получен запросом с использованием конструкции операции внутреннего соединения в стандарте ANSI |