Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / The Power of Oracle SQL / 25 сообщений из 108, страница 1 из 5
01.02.2017, 05:45
    #39395952
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
За годы работы с Ораклом у меня накопилось множество заметок, ссылок и прочих материалов, информацию из которых я оформил в виде книги.
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
01.02.2017, 05:50
    #39395953
The Power of Oracle SQL
dbms_photoshop,

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

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

Было бы интересно узнать твоем мнение, учитывая что ты как и я достаточно много времени посвятил 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
01.02.2017, 11:15
    #39396138
Kido
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
dbms_photoshop,

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

Спасибо!
...
Рейтинг: 0 / 0
01.02.2017, 12:28
    #39396228
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
dbms_photoshop,
спасибо, читаемс) замечанию тут собирать будешь или лучше на почту?)
...
Рейтинг: 0 / 0
01.02.2017, 13:05
    #39396277
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
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
01.02.2017, 13:16
    #39396297
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Vintdbms_photoshop,
спасибо, читаемс) замечанию тут собирать будешь или лучше на почту?)Предпочтительнее одним письмом все и сразу в почту. Форма свободная.
Точно не стоит обращать внимание на грамматику и пунктуацию, хотя, уверен, ты бы этого и не делал.
Вторая часть, где будут конкретные примеры, больше предполагает обсуждение.
...
Рейтинг: 0 / 0
01.02.2017, 13:20
    #39396304
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Vint...Принято.
...
Рейтинг: 0 / 0
01.02.2017, 13:20
    #39396306
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
dbms_photoshop,
ок. тогда буду выписывать себе в отдельный документ потом пришлю) правда думаю до конца недели точно читать буду)) если честно немного тяжеловато написано. ну или мозги у меня немного в паутине)) заодно и уборку проведу))
...
Рейтинг: 0 / 0
01.02.2017, 13:26
    #39396312
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
dbms_photoshopВторая часть, где будут конкретные примеры задачиFixed.
...
Рейтинг: 0 / 0
01.02.2017, 13:51
    #39396334
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Vintесли честно немного тяжеловато написаноПосле главы про джойны легче пойдет. Инфа 146%.
...
Рейтинг: 0 / 0
01.02.2017, 14:05
    #39396341
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Круто. Спасибо.
...
Рейтинг: 0 / 0
01.02.2017, 14:10
    #39396347
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
жалко, что не освещена тема adaptive query optimization.
...
Рейтинг: 0 / 0
01.02.2017, 14:29
    #39396370
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
хотя наверное это усложнит ей, хотя по ней запросы весьма существенно переписываются
...
Рейтинг: 0 / 0
01.02.2017, 14:45
    #39396387
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Shtockжалко, что не освещена тема adaptive query optimization.Когда человек анализирует как лучше написать запрос он не очень то думает про adaptive query optimization, не так ли?
То есть, это, опять же, несколько выходит за концепцию книги.
Ну и, во-вторых, в англо-интернетах достаточно качественного материала.

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

Можно было бы указать какие версии подходят под твой мануал. Еще думаю, можно было бы включить рассмотрение TOP - N и "новых"
фич SQL типа OFFSET, FETCH FIRST WITH TIES, CROSS APPLY / OUTER APPLY и их применение)
...
Рейтинг: 0 / 0
01.02.2017, 16:24
    #39396496
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
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
01.02.2017, 16:32
    #39396507
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
распространяется бесплатно ?

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

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

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

Познавательно, спасибо. Буду ждать второй части.
...
Рейтинг: 0 / 0
01.02.2017, 18:11
    #39396612
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Вячеслав ЛюбомудровСразу -- не очень формализировано, что ли, разъяснена разница в 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
01.02.2017, 18:17
    #39396626
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Кстати, наверное нет смысла уже это упоминать, но у transitive closure в 9 (10?) был очень нехороший эффект -- чрезмерное размножение предикатов и, как следствие, неправильная оценка кардинальности
...
Рейтинг: 0 / 0
01.02.2017, 20:45
    #39396752
HelpMePls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The Power of Oracle SQL
Regular expression - было бы хорошо добавить. или не было заметок?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / The Power of Oracle SQL / 25 сообщений из 108, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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