КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Примеры использования операторов
Операторы защиты и управления данными Операторы DML (Data Manipulation Language) - операторы манипулирования данными - SELECT - отобрать строки из таблиц - INSERT - добавить строки в таблицу - UPDATE - изменить строки в таблице - DELETE - удалить строки в таблице - COMMIT - зафиксировать внесенные изменения - ROLLBACK - откатить внесенные изменения - CREATE ASSERTION - создать ограничение - DROP ASSERTION - удалить ограничение - GRANT - предоставить привилегии пользователю или приложению на манипулирование объектами - REVOKE - отменить привилегии пользователя или приложения INSERT - вставка строк в таблицу Пример 1. Вставка одной строки в таблицу: Исх. Таблица P
Пример 2. Вставка в таблицу нескольких строк, выбранных из другой таблицы (в таблицу TMP_TABLE вставляются данные о поставщиках из таблицы P, имеющие номера, большие 2): Исх. Таблица P
UPDATE - обновление строк в таблице Пример 3. Обновление нескольких строк в таблице: Исх. Таблица P
DELETE - удаление строк в таблице Пример 4. Удаление нескольких строк в таблице: Исх. Таблица P
Пример 5. Удаление всех строк в таблице: Исх. Таблица P
6-7.3.3. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРА SELECT 6-7.3.3.1 ОТБОР ДАННЫХ ИЗ ОДНОЙ ТАБЛИЦЫ Пример 6. Выбрать все строки из таблицы поставщиков, удовлетворяющих некоторому условию (ключевое слово WHERE …): Исх. Таблица P
Замечание. В качестве условия в разделе WHERE можно использовать сложные логические выражения, использующие поля таблиц, константы, сравнения (>, <, = и т.д.), скобки, союзы AND и OR, отрицание NOT. Пример 7. Выбрать некоторые колонки из исходной таблицы, удалив из результата повторяющиеся строки (ключевое слово DISTINCT): Исх. Таблица P
Замечание. Использование ключевого слова DISTINCT приводит к тому, что в результирующей таблице будут удалены все повторяющиеся строки. Пример 8. Использование скалярных выражений и переименований колонок в запросах (ключевое слово AS …): Исх. Таблица TOVAR
В результате получим таблицу с колонками, которых не было в исходной таблице TOVAR: Рез. Таблица TOVAR
Пример 9. Упорядочение результатов запроса (ключевое слово ORDER BY …) по нескольким полям с возрастанием или убыванием (ключевые слова ASC, DESC): Исх. Таблица PD
В результате получим таблицу, в которой строки идут в порядке возрастания значения поля DNUM, а строки, с одинаковым значением DNUM идут в порядке убывания значения поля VOLUME:
6-7.3.3.2 ОТБОР ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ Пример 10. Естественное соединение таблиц: а) - явное указание условий соединения, б) - ключевые слова JOIN… USING… позволяют явно указать, по каким из общих колонок таблиц будет производиться соединение в) - ключевое слово NATURAL JOIN - автоматически соединяет по всем одинаковым полям в таблицах Таблица PD Таблица P
SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUMEа)FROM P, PD WHERE P.PNUM = PD.PNUM;б)FROM P JOIN PD USING PNUM;в)FROM P NATURAL JOIN PD;В результате получим новую таблицу, в которой строки с данными о поставщиках соединены со строками с данными о поставках деталей: Рез. Таблица
Замечания. а) Соединяемые таблицы перечислены в разделе FROM оператора, условие соединения приведено в разделе WHERE. Раздел WHERE, помимо условия соединения таблиц, может также содержать и условия отбора строк. б) Ключевое слово USING позволяет явно указать, по каким из общих колонок таблиц будет производиться соединение. в) В разделе FROM не указано, по каким полям производится соединение. NATURAL JOIN автоматически соединяет по всем одинаковым полям в таблицах. Пример 11. Прямое произведение таблиц: Исх. Таблица P Таблица D
В результате получим следующую таблицу: Рез. Таблица
Замечание. Т.к. не указано условие соединения таблиц, то каждая строка первой таблицы соединится с каждой строкой второй таблицы. Пример 12. Соединение таблиц по произвольному условию. Рассмотрим таблицы поставщиков и деталей, которыми присвоен некоторый статус: Исх. Таблица P Таблица D
Ответ на вопрос "какие поставщики имеют право поставлять какие детали?" дает следующий запрос: SELECT P.PNUM, P.PNAME, P.PSTATUS, D.DNUM, D.DNAME, D.DSTATUS FROM P, D WHERE P.PSTATUS >= D.DSTATUS;
В результате получим следующую таблицу: Рез. Таблица
6-7.3.3.3 ИСПОЛЬЗОВАНИЕ ИМЕН КОРРЕЛЯЦИИ (АЛИАСОВ, ПСЕВДОНИМОВ) Пример 13. Отобрать все пары поставщиков таким образом, чтобы первый поставщик в паре имел статус, больший статуса второго поставщика: Исх. Таблица P
В результате получим следующую таблицу: Рез. Таблица
6-7.3.3.4 ИСПОЛЬЗОВАНИЕ АГРЕГАТНЫХ ФУНКЦИЙ В ЗАПРОСАХ Пример 14. Получить общее количество поставщиков (ключевое слово COUNT): Исх. Таблица P
В результате получим таблицу с одним столбцом и одной строкой, содержащей количество строк из таблицы P:
Пример 15. Получить общее, максимальное, минимальное и среднее количества поставляемых деталей (ключевые слова SUM, MAX, MIN, AVG): Исх. Таблица PD
В результате получим следующую таблицу с одной строкой: Рез. Таблица
6-7.3.3.5 ИСПОЛЬЗОВАНИЕ АГРЕГАТНЫХ ФУНКЦИЙ С ГРУППИРОВКАМИ Пример 16. Для каждой детали получить суммарное поставляемое количество (ключевое слово GROUP BY …): Исх. Таблица PD
Этот запрос будет выполняться так. Сначала строки исходной таблицы будут сгруппированы так, чтобы в каждую группу попали строки с одинаковыми значениями DNUM. Потом внутри каждой группы будет просуммировано поле VOLUME. От каждой группы в результирующую таблицу будет включена одна строка: Рез. Таблица
Пример 17. Получить номера деталей, суммарное поставляемое количество которых превосходит 400 (ключевое слово HAVING …): Исх. Таблица PD
В результате получим следующую таблицу: Рез. Таблица
6-7.3.3.6 ИСПОЛЬЗОВАНИЕ ПОДЗАПРОСОВ Очень удобным средством, позволяющим формулировать запросы более понятным образом, является возможность использования подзапросов, вложенных в основной запрос. Пример 18. Получить список поставщиков, статус которых меньше максимального статуса в таблице поставщиков (сравнение с подзапросом): Исх. Таблица P
Замечание. Т.к. поле P.STATUS сравнивается с результатом подзапроса, то подзапрос должен быть сформулирован так, чтобы возвращать таблицу, состоящую ровно из одной строки и одной колонки. Замечание. Результат выполнения запроса будет эквивалентен результату следующей последовательности действий: 1. Выполнить один раз вложенный подзапрос и получить максимальное значение статуса. 2. Просканировать таблицу поставщиков P, каждый раз сравнивая значение статуса поставщика с результатом подзапроса, и отобрать только те строки, в которых статус меньше максимального. Рез. Таблица
Пример 19. Использование предиката IN. Получить список поставщиков, поставляющих деталь номер 2: Исх. Таблица PD Таблица P
Пример 20. Использование предиката (NOT) и EXIST. Получить список поставщиков, (не) поставляющих деталь номер 2: Исх. Таблица PD Таблица P
SELECT * FROM P WHERE (NOT) EXIST (SELECT * FROM PD WHERE PD.PNUM = P.PNUM AND PD.DNUM = 2); Замечание. Результат выполнения запроса будет эквивалентен результату следующей последовательности действий: 1. Просканировать таблицу поставщиков P, каждый раз выполняя подзапрос с новым значением номера поставщика, взятым из таблицы P. 2. В результат запроса включить только те строки из таблицы поставщиков, для которых вложенный подзапрос вернул непустое множество строк. Замечание. В отличие от двух предыдущих примеров, вложенный подзапрос содержит параметр (внешнюю ссылку), передаваемый из основного запроса - номер поставщика P.PNUM. Такие подзапросы называются коррелируемыми (correlated). Внешняя ссылка может принимать различные значения для каждой строки-кандидата, оцениваемого с помощью подзапроса, поэтому подзапрос должен выполняться заново для каждой строки, отбираемой в основном запросе. Такие подзапросы характерны для предиката EXIST, но могут быть использованы и в других подзапросах. Замечание. Может показаться, что запросы, содержащие коррелируемые подзапросы будут выполняться медленнее, чем запросы с некоррелируемыми подзапросами. На самом деле это не так, т.к. то, как пользователь, сформулировал запрос, не определяет, как этот запрос будет выполняться. Язык SQL является непроцедурным, а декларативным. Это значит, что пользователь, формулирующий запрос, просто описывает, каким должен быть результат запроса, а как этот результат будет получен - за это отвечает сама СУБД. (Рез. Таблица)
Рез. Таблица
6-7.3.3.7 ИСПОЛЬЗОВАНИЕ ОБЪЕДИНЕНИЯ, ПЕРЕСЕЧЕНИЯ И РАЗНОСТИ Пример 21. Получить имена поставщиков, имеющих статус, больший 3 или поставляющих хотя бы одну деталь номер 2 (объединение двух подзапросов - ключевое слово UNION): Исх. Таблица P Таблица PD
Замечание. Результирующие таблицы объединяемых запросов должны быть совместимы, т.е. иметь одинаковое количество столбцов и одинаковые типы столбцов в порядке их перечисления. Не требуется, чтобы объединяемые таблицы имели бы одинаковые имена колонок. Это отличает операцию объединения запросов в SQL от операции объединения в реляционной алгебре. Наименования колонок в результирующем запросе будут автоматически взяты из результата первого запроса в объединении. Исходные таблицы:Исх. Таблица PD Таблица P
Пример 22. Получить имена поставщиков, имеющих статус, больший 3 и одновременно поставляющих хотя бы одну деталь номер 2 (пересечение двух подзапросов - ключевое слово INTERSECT): SELECT P.PNAME FROM P WHERE P.STATUS > 3 INTERSECT SELECT P.PNAME FROM P, PD WHERE P.PNUM = PD.PNUM AND PD.DNUM = 2;Пример 23. Получить имена поставщиков, имеющих статус, больший 3, за исключением тех, кто поставляет хотя бы одну деталь номер 2 (разность двух подзапросов - ключевое слово EXCEPT): SELECT P.PNAME FROM P WHERE P.STATUS > 3EXCEPT SELECT P.PNAME FROM P, PD WHERE P.PNUM = PD.PNUM AND PD.DNUM = 2;6-7.3.4 СИНТАКСИС ОПЕРАТОРА ВЫБОРКИ ДАННЫХ (SELECT)
Дата добавления: 2014-01-05; Просмотров: 359; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |