powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / The Power of Oracle SQL
25 сообщений из 108, страница 1 из 5
The Power of Oracle SQL
    #39395952
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За годы работы с Ораклом у меня накопилось множество заметок, ссылок и прочих материалов, информацию из которых я оформил в виде книги.
The Power of Oracle SQL

После мучительных размышлений на каком языке писать я таки решил сначала изложить на русском, но содержание осталось на английском.
Содержание
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Foreword
Part I
1. Joins
2. Query transformations
3. Analytic Functions
4. Aggregate functions
5. Hierarchical queries: connect by
6. Recursive subquery factoring
7. Model
8. Row Pattern Matching: match_recognize
9. Logical execution order of query clauses
10. Turing completeness
11. Summary
Part II
1. Solving SQL quizzes
2. When PL/SQL is better than basic SQL
Links

По некоторым конструкциям (model, recursive subquery factoring) в рунете доступно описание только базовых вещей, а по pattern matching вообще практически никаких материалов нет.

Цель была максимально всесторонне описать возможности оракловой реализации конструкции SELECT, при этом стремясь к простоте насколько это возможно и минимизации лишних деталей.
Под лишними деталями понимается
* внутренности оракла от защелок до принципа работы буфферного кеша
* оптимизация работы операций плана, например, nested loops batching
* различные баги и кривизна текущей реализации, от wrong results и ORA-03113 до возникновения чтений блоков в режиме currect при большом числе проходов в recursive subquery factoing
* прочие моменты, при углублении в которые, объем заметно бы вырос, например, особенности производительности сортировки при использовании аналитических функций
* какие-то недоработки SQL парсера: возможность менять местами anchor and recursive members для recursive subquery factoring, возможность перечислять несколько connect by подряд, из которых все, кроме последнего будут проигнорированы итд
* все остальное, что не меняет сути
По простому говоря фокус был на имеющейся мощи для получения данных.

Комментарии и корректировки приветствуются.
Огромная благодарность RA\/EN, andrey_anonymous, andreymx за их отзывы и замечания.

PS. Книга из двух частей. Вторую часть планирую закончить позже в феврале.
tagsnative syntax traditional oracle outer joins syntax ansi
left right full cross inner
equi theta natural semi anti

start with connect by prior nocycle level
connect_by_iscycle sys_connect_by_path connect_by_root connect_by_isleaf

search depth breadth first by set

model dimension measures rules
return updated rows return all rows
currentv cv
update upsert all upsert
sequential order automatic order
iteration_number previous reference
unique dimension unique single reference
presentv presentnnv
ignore nav keep nav

match_recognize pattern define
all rows per match
one row per match
final running
match_number classifier
with unmatched rows
show empty matches
omit empty matches
after match skip


Ссылка:
The Power of Oracle SQL. All versions
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39395953
dbms_photoshop,

пошел читать...

З.Ы.
Как вторую часть допишешь - сообщить не забудь. Обязательно почитаю и её тоже. ;)
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39395960
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

Было бы интересно узнать твоем мнение, учитывая что ты как и я достаточно много времени посвятил MSSQL и есть с чем сравнивать.

Кстати, изначально планировал еще три главы
Сравнение возможностей SELECT для Oracle vs MSSQL. По причине наличия явного лидера и во избежания холивара отказался от затеи.

SQL для работы с графами. Это исключил, т.к. SQL это НЕ для работы с графами за исключением вырожденных случаев.
С другой стороны анализ процедурного и декларативного подходов потребовал бы много текст и кода.
А на самом деле есть Graph Databases. Желающим расширить кругозор - рекомендую Next Generation Databases - Guy Harrison .

Особенности DML в Oracle. Например, про update при наличии join или conventional vs direct path inserts и подобное.
Это всё есть в блогах известных товарищей и прочих местах и заниматься просто компиляцией несколько нудно.

А главное эти три темы выходят за рамки основной идеи книги.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396138
Kido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Отдельное спасибо за model! Да и вообще за книгу в целом! Взял на вооружение :)
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396223
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Спасибо!
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396228
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
спасибо, читаемс) замечанию тут собирать будешь или лучше на почту?)
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396277
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
буду писать сразу как читаю. иначе забуду.
1. пронумеруй, пожалуйста примеры. на странице 8 сложновато читать что там первый третий что второй пятый.... номера примеров должны быть.
2. страница 9 запрос:
Код: plsql
1.
2.
3.
4.
select *
 from t1, t2
where t2.id(+) = t1.id
 and nvl2(t2.rowid(+), t1.id, null) = 0;

ничем не отличается от запроса
Код: plsql
1.
2.
3.
select *
 from t1, t2
where t2.id(+) = t1.id


поэтому тестовые данные для нормального осознания отличий должны быть хотя бы такие:
Код: plsql
1.
2.
3.
4.
select *
 from t3, t2
where t2.id(+) = t3.id
 and nvl2(t2.rowid(+), t3.id, null) = 0;
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396297
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbms_photoshop,
спасибо, читаемс) замечанию тут собирать будешь или лучше на почту?)Предпочтительнее одним письмом все и сразу в почту. Форма свободная.
Точно не стоит обращать внимание на грамматику и пунктуацию, хотя, уверен, ты бы этого и не делал.
Вторая часть, где будут конкретные примеры, больше предполагает обсуждение.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396304
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vint...Принято.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396306
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
ок. тогда буду выписывать себе в отдельный документ потом пришлю) правда думаю до конца недели точно читать буду)) если честно немного тяжеловато написано. ну или мозги у меня немного в паутине)) заодно и уборку проведу))
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396312
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopВторая часть, где будут конкретные примеры задачиFixed.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396334
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintесли честно немного тяжеловато написаноПосле главы про джойны легче пойдет. Инфа 146%.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396341
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круто. Спасибо.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396347
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жалко, что не освещена тема adaptive query optimization.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396370
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя наверное это усложнит ей, хотя по ней запросы весьма существенно переписываются
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396387
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtockжалко, что не освещена тема adaptive query optimization.Когда человек анализирует как лучше написать запрос он не очень то думает про adaptive query optimization, не так ли?
То есть, это, опять же, несколько выходит за концепцию книги.
Ну и, во-вторых, в англо-интернетах достаточно качественного материала.

Вот понимание про наличие трансформаций может значительно помогать при написании запросов.
Читая про них можно встретить.
В Oracle 12c для воспроизведения надо отключить адаптивные планы с помощью команды
«alter session set optimizer_adaptive_reporting_only = true;»То есть, я предпочитаю не усложнять без надобности. :)
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396477
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Можно было бы указать какие версии подходят под твой мануал. Еще думаю, можно было бы включить рассмотрение TOP - N и "новых"
фич SQL типа OFFSET, FETCH FIRST WITH TIES, CROSS APPLY / OUTER APPLY и их применение)
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396496
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601dbms_photoshop,

Можно было бы указать какие версии подходят под твой мануал. Еще думаю, можно было бы включить рассмотрение TOP - N и "новых"
фич SQL типа OFFSET, FETCH FIRST WITH TIES, CROSS APPLY / OUTER APPLY и их применение)Про версии сказано во вступлении.

Про CROSS APPLY / OUTER APPLY описано в главе про соединения.

Про новые фичи множество статей.
Хорошая подборка из 5-ти частей - в гугл "Ask Tom: On Oracle Database 12c, Part".

В целом, фичи, которые расширили возможности SQL, полагаю, упомянуты: усовершенствования для joins и pattern matching.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396507
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
распространяется бесплатно ?

а где тогда кнопка "поддержать автора" ?
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396520
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokраспространяется бесплатно ?

а где тогда кнопка "поддержать автора" ?Всё бесплатно, без рекламы и смс.
Автор будет благодарен отзывам.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396539
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, на работе начал читать
Сразу -- не очень формализировано, что ли, разъяснена разница в post- и pre- предикатах в описании соединений
Что, когда, исключения... (одно описано достаточно интересно)

Ну и операция FILTER -- я ее так и не смог формализовать, что у Льюиса, вот думал хоть здесь, на понятном русском.
Похоже, она выполняет все, на что не нашлось других названий (проскочила фраза, типа "отборка по критерию из другого источника", но это как-то слишком общно, на мой взгляд
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396554
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Познавательно, спасибо. Буду ждать второй части.
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396612
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровСразу -- не очень формализировано, что ли, разъяснена разница в post- и pre- предикатах в описании соединенийДопускаю, что не очень формализированно, но мне казалось достаточно конкретно и понятно.
Еще была мысль при введении специфических Оракловых терминов сделать сноски со ссылками на ноты для желающих полной формальности.
pre/post join predicates (Doc ID 14736.1)
transitive closure (Doc ID 68979.1)
Это добавлю.
Вячеслав ЛюбомудровНу и операция FILTERВот это зачетная тема, и если раскрывать, то надо выделять методы соединения в отдельную главу.
Я полагаю механика работы похожа на nested loops, то-есть для каждой строки выполняется грубо говоря look-up.
Но есть отличия
- nested loops связывает два набора, а фильтров (и соответственно выполнения связанного набора) может быть несколько, при этом один набор основной.
- в фильтре может быть скоррелирован более хитрый запрос (точнее это было актуально до появления lateral views), например, connect by.
Код: plsql
1.
2.
3.
4.
5.
with t as (select rownum x1, 5 - rownum x2 from dual connect by rownum <= 5)
select *
  from t
 where (select sum(rownum) from dual connect by rownum <= x2) <
       (select sum(rownum) from dual connect by rownum <= x1)

Возникает, при наличии подзапросов в where, которые не были трансформированы.
Ясно дело, до формализации тут еще далеко. :)
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396626
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, наверное нет смысла уже это упоминать, но у transitive closure в 9 (10?) был очень нехороший эффект -- чрезмерное размножение предикатов и, как следствие, неправильная оценка кардинальности
...
Рейтинг: 0 / 0
The Power of Oracle SQL
    #39396752
HelpMePls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Regular expression - было бы хорошо добавить. или не было заметок?
...
Рейтинг: 0 / 0
25 сообщений из 108, страница 1 из 5
Форумы / Oracle [игнор отключен] [закрыт для гостей] / The Power of Oracle SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]