|
300 страниц об операторе SELECT, единственном и любимом
|
Санжей Мишра,
Алан Бьюли
Секреты Oracle SQL
СПб: Издательство "Символ-Плюс" (www.symbol.ru), 368 стр., 70x100/16, 2005, тир.2000, ISBN 5-93286-047-2, переводчик П.Шер, научный редактор А.Королев.
Аннотация от издательства: http://www.symbol.ru/catalog/book/92415
Оригинал: Mastering Oracle SQL, by Sanjay Mishra & Alan Beaulieu. O'REILLY®, 2002, ISBN 0-596-00129-0
|
SQL … “также неисчерпаем, как и атом”.
… из произведения примерно 100-летней давности
(Вл.Ильин “Материализм и эмпириокритицизм”)
SQL (Structured Query Language, язык структурированных запросов) – это специальный язык, используемый для определения данных, доступа к данным и их обработки. SQL относится к непроцедурным (non-procedural) языкам – он лишь описывает нужные компоненты и желаемые результаты, не указывая, как именно эти результаты должны быть получены.
Этой статьей мы хотим ответить на, в общем-то, риторический вопрос: “Надо ли в наше время изучать, знать и применять язык SQL различным категориям пользователей базы данных Oracle?”
Сразу выведем из рассмотрения самое широкое множество конечных потребителей информации, находящейся и перерабатываемой в базе данных, ради обеспечения функционирования которых и работают программисты, администраторы баз данных и другие ИТ-специалисты. В обязанности конечных пользователей не входит, а скорее даже противоречит им, профессиональное знание и применение языка SQL, как интерфейса нижнего уровня для доступа к базе данных Oracle и/или другим наиболее популярным сегодня SQL-ориентированным реляционным базам данных – MicroSoft SQL Server, IMB DB2 и др. Конечные пользователи и потребители информации имеют право требовать и получать полноту, достоверность, быстрый доступ к информации, удобность конечного интерфейса, то есть рассчитывать на высокую производительность базы данных, приложений и инфраструктуры всей системы.
Другим категориям ИТ-специалистов, в той или иной степени сопровождающих базу данных и обслуживающих ИТ-систему, - разработчикам приложений, системным и базовым администраторам разных направлений, менеджерам руководства ИТ-подразделений и так далее, SQL, казалось бы, тоже не очень нужен. Им сегодня предоставлены языки программирования и инструментальные средства более высокого уровня, а также продвинутые программы-мониторы (в том числе, dashboards - современные инструментальные панели для визуализации и анализа производственной информации и управления бизнес-процессами) и пакеты специального назначения, которые как Х-лучами (или, проще говоря J
, рентгеном) просвечивают все внутренности баз данных, анализируя прохождение заданий, использование ресурсов, производительность системы, прогнозируя неисправности, выдавая и тут же исполняя рекомендации по настройке функционирования…
И, тем не менее, SQL еще никто не отменял. Потому что для понимания, из чего состоит и как функционирует база данных Oracle, почему и как производятся настройки ее функционирования и производительности, для понимания, как получить из базы больше информации и/или как предложить ей выполнить дополнительные действия по обработке и/или защите информации, … надо знать язык SQL. А чтобы узнать язык SQL в необходимом объеме богатства и изощренности предоставляемых им возможностей, надо пользоваться проверенными, хорошими профессиональными учебниками. Так раскроем же книгу С.Мишра и А.Бьюли “Секреты Oracle SQL”.
С первого взгляда ее оглавление не вызывает вопросов. 14 глав, каждая средним объемом по 20-25 стр., с вполне понятными для специалиста названиями:
- “Введение в SQL”
(Что такое SQL и краткая история SQL, операторы DML,…)
- “Инструкция WHERE”
(“Жизнь без WHERE” и “На помощь приходит WHERE”, “Условия и выражения”,..)
- “Объединения
” (Внутренние, внешние и самообъединения, подзапросы, операторы DML и представление объединения,..)
- “Групповые операции” (Обобщающие функции, GROUP BY и HAVING)
- “Подзапросы”
(Несвязанные и связанные подзапросы, встроенные представления)
- “Обработка дат и времени”
(Внутренний формат, вставка и извлечение дат из БД, работа с датами, литералы INTERNAL, “Новые возможности Oracle9i по обработке даты и времени”) – самая большая глава на 50 стр.
- “Операции над множествами”
(Правила и ограничения, операции над множествами для сравнения двух таблиц, использование NULL в составных запросах)
- “Иерархические запросы”
(Представление и ограничения, простые и сложные иерархические запросы, расширения Oracle SQL)
- “DECODE и CASE”
(DECODE, NVL и NVL2, история CASE и примеры использования DECODE и CASE)
- “Разделы, объекты и коллекции”
- “PL/SQL”
(Процедуры, функции и пакеты, вызов и ограничения на вызов PL/SQL из SQL, хранимые функции в операторах DML, SQL внутри PL/SQL)
- “Сложные групповые операции”
(ROLLUP, CUBE, GROUPING, GROUPING SETS, GROUPING_ID, GROUP_ID, “Возможности группировки в Oracle9i”)
- “Аналитический SQL”
(“Обзор аналитического SQL”, ранжирующие, оконные и для создания отчетов функции)
- “Советы умудренных опытом”
и
- “Алфавитный указатель”.
Да, но где же изложение подъязыка SQL для определения данных DDL (data definition language), включающего все виды операторов CREATE, ALTER, DROP, TRUNCATE? Кто-то из Oracle-идов, вспоминая самые ранние годы изучения Oracle, удивится отсутствию DCL (data control language), подъязыка SQL для управления данными с операторами SET TRANSACTION, ALTER DATABASE|SYSTEM, COMMIT|ROLLBACK, GRANT, AUDIT). И почему оператор выборки данных из базы SELECT попал в подъязык манипулирования данными DML (data manipulation language, операторы INSERT, DELETE, UPDATE), хотя в результате его выполнения состояние базы не изменяется?!...
“Борьба со сложностью” отражается в самых неожиданных направлениях, и сегодня, похоже, никому из практических специалистов уже нет дела, что структура SQL упростилась до DDL и DML, включившего в свой состав самостоятельный подъязык оператора SELECT. А то, что в рассматриваемой нами книге практически нет упоминаний и примеров с применением операторов DDL, говорит лишь о том, что авторы “Секретов Oracle SQL” целиком и полностью сосредоточились на DML, а еще точнее, по мнению рецензентов, - практически исключительно на операторе SELECT.
В какой-то из наших рецензий последних лет Виктор Абрамов, характеризуя содержание очередной книги по Oracle на русском языке, обмолвился, что для раскрытия возможностей оператора SELECT надо написать отдельную книгу. Он имел в виду, что такой книги нет, хотя литература по SQL и тогда, и сейчас не так уж бедно представлена на нашем компьютерном книжном рынке. По крайней мере, практически в каждой книге по Oracle-тематике приводится раздел или несколько страниц по языку SQL. И их авторы честно предупреждают или даже абсолютно рассчитывают на знание читателями основных конструкций языка SQL. Практически все примеры, с которыми предлагается ознакомиться читателям, представляют собой SQL-запросы к тем или иным конструкциям базы данных. Но книги по администрированию базы данных обычно имеют “перекос” в сторону создания (DDL), управления (DCL) базовыми объектами и процессами и простых выборок данных из таблиц и представлений Словаря данных. Книги по разработке приложений, естественно, больше занимаются процедурными структурами и построениями пользовательских интерфейсов. А справочники и энциклопедии, которые в принципе должны быть одинаково “справедливы” ко всем операторам языка SQL, вынуждены выделить DDL-операторам больше места, поскольку в DML всего 4 оператора, а SQL в целом включает примерно пару сотен операторов, и их число постоянно увеличивается с расширением спектра объектов базы данных Oracle.
Поэтому мы активно приветствуем появление специализированной книги по Oracle SQL, в частности, по Data Manipulation Language, и уж совсем конкретно по оператору SELECT. Любой владеющий SQL человек знает, что именно при помощи SELECT-подзапросов образуются сложные и содержательные предложения с другими DML-операторами INSERT, DELETE, UPDATE. Поэтому для многочисленной категории администраторов готовых приложений и разработчиков всевозможных отчетов в первую очередь нужен именно SELECT, для разработчиков приложений на Oracle Forms и др. - еще и INSERT, UPDATE, DELETE. А вот DDL-операторы - это прерогатива проектировщика. Соответственно, количество пользователей, применяющих DML, значительно шире, чем пользователей, которым нужен DDL.
Эта книга привлекает богатым практическим опытом авторов, которым они щедро делятся с читателями. Заявив в начале книги некую схему в базе банных, они во всех примерах и построениях используют ее таблицы, но рассказывают именно о возможностях (секретах) SQL, а не решениях конкретных производственных задач или оптимизации работы базы. Кажется, на протяжении всей книги ни разу не встречается упоминание или название какого-либо представления динамической производительности (V$), что говорит о направленности материала в сторону получения пользовательских, а не административных результатов. Поэтому так много внимания уделяется работе с датами и временными функциями, простым и сложным групповым операциям, вводу в практический SQL-обиход аналитических функций RANK, DENSE_RANK, ROW_NUMBER, NTILE, WIDTH_BUCKET, FIRST_/LAST_VALUE, LAG/LEAG, гипотетических и оконных функций и др.
Привлечение повышенного внимания читателей к оператору SELECT – это, конечно, полемический прием рецензентов. Сами же авторы книги считают, что написали практическое руководство более общего типа, хотя и подчеркивают, что
“каждый, кто работает с SQL в среде Oracle, должен вооружиться тремя книгами: справочником по языку SQL, таким как “Oracle SQL:The Essential Reference” (O’Reilly), руководством по оптимизации производительности, например, “Oracle SQL Tuning Pocket Reference” (O’Reilly), и этой книгой, которая показывает, как наилучшим образом использовать и комбинировать разнообразные возможности Oracle SQL.
Тем самым, предлагаемая вниманию наших читателей книга “Секреты Oracle SQL” находится в общем строю учебно-практической литературы по Oracle. И хотя на русском языке нет упомянутых выше книг, мы считаем, что вполне адекватной заменой могут послужить переводы издательства “Символ-Плюс” справочника по Oracle “Oracle in a Nutshell. A Desktop Quick Reference” (O’Reilly), о котором мы писали в декабрьском выпуске OM/RE, и по оптимизации производительности Oracle книги Cary Millsap & Jeff Holt “Optimizing Oracle Performance” (O’Reilly), о которой мы расскажем в следующем выпуске нашего журнала.
Книга заканчивается главой “Советов умудренных опытом”: избегайте ненужного разбора операторов - используйте связанные переменные и псевдонимы таблиц; применяйте полностью определенный SQL для DSS-систем; что и как лучше использовать – EXISTS, DISTINCT или IN; WHERE и HAVING; UNION или UNION ALL… Словом, не столько “Секреты SQL”, сколько “Mastering SQL” (именно так названа книга в оригинале). И нам кажется, что эти советы мастеров Oracle SQL доставят много удовольствия и будут очень полезны любому прочитавшему эту книгу практическому программисту-разработчику и администратору базы данных Oracle.
Виктор Абрамов,
научный редактор "Oracle Magazine/Русское Издание"
Анатолий Бачин,
главный редактор “Oracle Magazine/Русское Издание”
|