|
Программирование >> Руководство по sql
SQL: update titles set price = price * 2 where pub id in (select pub id from publishers where pub name = New Age Books) Эквивалентный оператор UPDATE, в котором используется объединение (для систем, которые допускают наличие предложения FROM в операторе UPDATE), имеет следующий вид: SQL: update titles set price = price * 2 from titles, publishers where titles.pub id = publishers.pub id and pub name = New Age Books С помощью следующего вложенного оператора SELECT вы можете удалить все записи, связанные с заказами на продажи книг по бизнесу: SQL: delete salesdetails where title id in (select title id from titles where type = business) Эквивалентный оператор DELETE, в котором используется объединение (для систем, которые в операторе DELETE допускают наличие нескольких таблиц в предложении FROM), имеет следующий вид: SQL: delete salesdetails from salesdetails, titles where salesdetails.title id = titles.title id and type = business В ПОЛЕ ЗРЕНИЯ КУРСОРА Теперь, когда вы уже умеете создавать как простые, так и довольно сложные запросы с помощью функций, объединений и подзапросов, в ващем распоряжении оказалась почти вся мощь языка SQL. Нам осталось только разобраться, как представить данные в самом удобном для вас виде и как обеспечить целостность и безопасность своей базы данных. Курсоры, речь о которых пойдет в следующей главе, являются средством просмотра конкретной совокупности данных из одной или нескольких таблиц. Восполь-зовавщись курсором, вы можете представить такую совокупность данных в виде виртуальной таблицы. Кроме того, курсоры можно использовать как механизм обеспечения безопасности системы (подробнее об этом вы узнаете в главе 10). Глава 9 Создание и использование виртуальных таблиц (курсоров) КУРСОР ОБЕСПЕЧИВАЕТ ГИБКОСТЬ Подобно операции объединения, курсоры являются неотъемлемой частью реляционной модели. Курсор создается с помощью оператора SELECT и обеспечивает гибкость при анализе и обработке данных. Курсор можно представлять себе как подвижный кадр или окно, через которое пользователь видит данные. В предыдущих главах было продемонстрировано, как пользоваться оператором SELECT для выбора строк, комбинирования таблиц, переименования столбцов и выполнения вычислений, чтобы получить нужную вам информацию в конкретном виде. Создание курсора с помощью оператора SELECT позволяет вам без труда анализировать и обрабатывать именно те данные, которые вам (или кому-то другому) нужны - ни больще ни меньще. Курсоры - это не какие-то отдельные копии данных из таблицы (таблиц) или другого курсора (курсоров), из которых они получены. Курсоры часто называют виртуальными таблицами, поскольку они не существуют как независимые объекты в базе данных (как, например, настоящие таблицы). (Термину курсор в ANSI соответствует термин просматриваемая таблица (viwed table), а настоящая таблица базы данных называется базовой таблицей (base table).) Запросы к курсорам в основном выполняются так же, как и к таблицам. Однако модификация данных посредством курсоров носит офаниченный характер. Курсор определяется в операторе SELECT. Когда пользователь обращается к тому или иному курсору, система баз данных ассоциирует с ним соответствующие данные. Курсор находится на верщине этого процесса, скрывая от пользователя все его технические подробности. Прелесть курсора заключается в его простоте и универсальности: начинающих пользователей не пугают всевозможные объединения, опытные же пользователи не испытывают искущения манипулировать с данными, до которых им, вообще говоря, нет никакого дела, а нетерпеливым пользователям не приходится замедлять свою работу из-за необходимости ввода длинных операторов SQL. СОЗДАНИЕ КУРСОРОВ Вот упрощенный синтаксис оператора, определяющего курсор: CREATE VIEW имя курсора [(имя столбца [, имя столбца]...)] AS SELECT onepaTop В следующем примере создается курсор, который отображает фамилии авторов, живущих в Окленде и Калифорнии, а также названия их книг: SQL: create view oaklanders as select au fname, au lname, title from authors, titles, titleauthors where authors.au id = titleauthors.au id and titles.title id = titleauthors.title id and city = Oakland SQL: select * from oaklanders Результат: au fname au Iname title Marjorie Green The Busy Executives Database Guide Marjorie Green You Can Combat Computer Stress! Dick Straight Straight Talk About Computers Livia Karsen Computer Phobic and Non-Phobic Individuals: Behavior Variations Stearns MacFeather Computer Phobic and Non-Phobic Individuals: Behavior Variations Stearns MacFeather Cooking with Computers: Surreptitious Balance Sheets Присваивая курсору имя, обязательно соблюдайте правила создания идентификаторов, предусмотренные в вашей системе. Первая строка оператора CREATE VIEW присваивает курсору имя, а последуюший оператор SELECT определяет его. Как вы уже видели, вовсе не обязательно, чтобы оператор SELECT выполнял простой выбор строк и столбцов в одной конкретной таблице. Курсор можно создать на основе нескольких таблиц, других курсоров или того и другого; при этом оператор SELECT может иметь почти любую сложность, а для определения столбцов и строк, которые требуется включить в курсор, используются операции проектирования и выбора. Удаление курсоров Во многих версиях SQL имеется команда для удаления курсоров. Ее синтаксис имеет примерно следующий вид: DROP VIEW имя курсора Если какой-то курсор зависит от таблицы (или другого курсора), которая была удалена, вы не сможете им воспользоваться. Однако если вы создадите под тем же именем новую таблицу (или курсор), которая заменит соответствующий удаленный объект, вы снова сможете пользоваться этим курсором (разумеется, если существуют столбцы, ссылка на которые содержится в его определении). Более подробную информацию по этому вопросу вы найдете в справочных руководствах по своей системе. ПРЕИМУЩЕСТВА КУРСОРОВ Чтобы показать преимущества использования курсоров, предположим, что у базы данных bookbiz есть несколько пользователей с разными профессиональными интересами. Допустим, что руководитель отдела рекламы хочет знать, какие авторы с какими книгами связаны и кто из них указан на обложке первым, кто вторым и кто третьим. Цены, объемы продаж, затраты, авторские гонорары и личные адреса авторов руководителя отдела рекламы не интересуют, но ему нужна определенная информация из каждой следующих трех таблиц: titles, authors и titleauthors. Если не пользоваться курсором, то для этого можно было бы применить запрос примерно следующего вида:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |