powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Oracle vs MSSQL. Битва интеллекта.
20 сообщений из 20, страница 1 из 1
Oracle vs MSSQL. Битва интеллекта.
    #39119645
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct x
  from (select column_value x
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
order by length(x);

select x
  from (select column_value x
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
group by x
order by length(x);

Код: plaintext
1.
2.
OK
OK

MSSQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(x)
go
select x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(x)

Код: plaintext
1.
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
OK
Ну и почему MSSQL не может догадаться что можно сортировать по детерминированной функции над столбцом?

Идем далее.
В Оракле 1-й и 3-й случаи отрабатывают потому что он догадывается что там константа.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select distinct x
  from (select column_value x, 1 y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
order by length(y);

select distinct x
  from (select column_value x, row_number() over (order by column_value) y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
order by length(y);

select x
  from (select column_value x, 1 y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
group by x
order by length(y);

select x
  from (select column_value x, row_number() over (order by column_value) y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
group by x
order by length(y);


Код: plaintext
1.
2.
3.
OK
ORA-01791: not a SELECTed expression
OK
ORA-00979: not a GROUP BY expression

В MSSQL не отрабатывает ничего (зато единообразно :))
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select distinct x
  from (select x, 1 y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(y)
go
select distinct x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(y)
go
select x
  from (select x, 1 y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(y)
go
select x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(y)

Код: plaintext
1.
2.
3.
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Column "t.y" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
Column "t.y" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

Ясное дело, без сортировки все варианты работают в обоих СУБД.
Ну и какая более интеллектуальная, huh?
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39119824
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Dual все эти примеры перекрывает)
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39119832
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperDual все эти примеры перекрываетЧто?
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39119835
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopSergSuperDual все эти примеры перекрываетЧто?
это кусок Вашего кода, на Оракле попробуйте выполнить
Код: sql
1.
select 'hello' x union all select 'mister' union all select 'smith' union all select 'x'


или вот Вы пишите
select column_value x
from table (sys.odcivarchar2list('hello','mister','smith','x'))) t
зачем это table? что ж этот интеллектуальный Оракл не может догадаться что там табличные данные
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39119844
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperОракле попробуйте выполнитьТе, кому режут глаза подобные отличия, могут создать таблицу и любоваться практически полным совпадением текстов запросов.
Может тогда лучше удасться рассмотреть на чем делался акцент в стартовом посте.
SergSuperчто ж этот интеллектуальный Оракл не может догадаться что там табличные данныеАга, а еще интеллектуальный Оракл не позволяет создавать процедуры/функции без объявления типа результата.
Вообще беда.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39119992
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,


Код: sql
1.
2.
3.
4.
select distinct x
  from (select x
          from (select 'hello' x union all select 'hello' union all select 'smith' union all select 'x') t) t
--order by x


Полагаю, что это из-за того, что сам по себе DISTINCT в MS SQL фактически реализован оператором сортировки с удалением дубликатов:
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39119994
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Сделать так:
Код: sql
1.
2.
3.
4.
select x
  from (select x
          from (select 'hello' x union all select 'hello' union all select 'smith' union all select 'x') t) t
order by LEN(x)


, то как бы очевидно, что сначала будет Compute Scalar и только потом SORT:
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39119998
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

А
Код: sql
1.
2.
3.
4.
5.
select x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(y)



замените на:
Код: sql
1.
2.
3.
4.
5.
select x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by MAX(len(y))
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39120003
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Так же полагаю, что это вариант:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  x
FROM
(
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t) t1
order by len(x)


сработает на обеих СУБД.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39120156
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

для сравнения вне конкруса. Firebird 3.0

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select distinct x
  from (select x, 1 y
          from t) t
order by char_length(y);

with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select distinct x
  from (select x, row_number() over (order by x) y
          from t) t
order by char_length(y);

with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select x
  from (select x, 1 y
          from t) t
group by x
order by char_length(y);

with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select x
  from (select x, row_number() over (order by x) y
          from t) t
group by x
order by char_length(y);



OK
OK
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39121394
Фотография Агенор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopИдем далее.
В Оракле 1-й и 3-й случаи отрабатывают потому что он догадывается что там константа.


Это не достоинство оракла, а его недостаток. Вместо того, чтобы упрощать код и делать поведение системы предсказуемым, оракловские гавнокодеры реализовали кучу частных случаев и превратили движок исполнения запросов в подобие помойки, а именно свалку огромного количества костылей и заплаток, оставшихся от крупных клиентов.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39122314
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinПолагаю, что это из-за того, что сам по себе DISTINCT в MS SQL фактически реализован оператором сортировки с удалением дубликатовНесколько странно полагать обработку синтаксиса (парсинг) основываясь на плане.
В Оракле тоже раньше distinct работал как SORT ORDER BY, потом стало возможно задействовать HASH GROUP BY.
Регулируется хинтом (no_)use_hash_aggregation.
pkarklinто как бы очевидно, что сначала будет Compute Scalar и только потом SORTПри отсутствующем distinct (или group by) не совсем понятно какое это имеет отношение к стартовому посту.
pkarklinзамените наЭто понятно. Акцент был сделан на ранице в поведении.
Впрочем особой необходимости для спец обработки вырожденных случаев как делает Оракле с константой я не вижу.

Ну и изначально в MSSQL выглядит несколько нелогично, что сортировка по len(x) в случае группировки допускается, а в случае distinct - нет.
Ясное дело, можно в случае с distinct добавить len(x) в select list и просто не отображать на клиенте, но сомнительна необходимость подобного в случае детерминированной функции.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39122333
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисдля сравнения вне конкруса. Firebird 3.0Наиболее интересно отрабатывают ли эквивалент этого
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(x)
go
select x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(x)

Спасибо.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39123337
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopСимонов Денисдля сравнения вне конкруса. Firebird 3.0Наиболее интересно отрабатывают лиНа ФБ эти два запроса выдают правильный вариант, начиная с версии 2.5.3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
C:\MIX\firebird\QA\fbt-repo\tmp>C:\MIX\firebird\oldfb253\bin\isql /3253:e25 -i da

X
======
x
hello
smith
mister


X
======
x
hello
smith
mister

ISQL Version: WI-V2.5.3.26780 Firebird 2.5
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.5.3.26780 Firebird 2.5"
Firebird/x86/Windows NT (remote server), version "WI-V2.5.3.26780 Firebird 2.5/tcp (csprog)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.3.26780 Firebird 2.5/tcp (csprog)/P12"
on disk structure version 11.2
До 2.5.2 включительно 'mister' вылезал раньше 'smith', т.е. они выдавались в перепутанном порядке:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
X
======
x
hello
mister
smith


X
======
x
hello
mister
smith
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39124035
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агенорdbms_photoshopИдем далее.
В Оракле 1-й и 3-й случаи отрабатывают потому что он догадывается что там константа.


Это не достоинство оракла, а его недостаток. Вместо того, чтобы упрощать код и делать поведение системы предсказуемым, оракловские гавнокодеры реализовали кучу частных случаев и превратили движок исполнения запросов в подобие помойки, а именно свалку огромного количества костылей и заплаток, оставшихся от крупных клиентов.

Пожалуй соглашусь.

С выходом 12 версии сложилось впечетление , что на поддержку
всех фич заплаток и часных случаев оракла не хватает рук.

Там явно у менеджмента проблемы с осознанием теории сложности,
связать тренд зависимости трудозатрат на поддержку фич и частных случаев
с прогрессией 2^Х они кажется ИМХО не осилили.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39124177
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР,

Так это - не малая доля их доходов завязана именно на платной поддержке. Поэтому они спокойно раздают базовую версию базы с сайта.
При таком подходе сложный черный ящик предпочтительней простого инструмента.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39124257
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевДохтаР,

Так это - не малая доля их доходов завязана именно на платной поддержке. Поэтому они спокойно раздают базовую версию базы с сайта.
При таком подходе сложный черный ящик предпочтительней простого инструмента.

Для того что бы обеспечить им доходы , нужно заработать денег,
сейчас наступает такое время, что шальные деньги как то не прут.

На росте мировой экономике это хорошая стратегия ,
а на стагнации клиенты найдут замену даже незаменимым дорогим фичам.

Понимаете в чем тут вопрос , когда видишь кучу фич,
которыми не пользуешься или которые работают немного не так как хочется
понимаешь , что недополучаешь прибыль.

И вобще саппорт , это страховка для эффективного менеджера
среднего звена, что бы когда что то перестало работать , можно было
эфективно перевести стрелки на индусов.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39124273
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР,

Не мне учить Ларри деньги зарабатывать. :)
Так что их стратегия - их дело.

Простой инструмент требует дорогого сотрудника, чтоб умел им пользоваться. А он птица независимая. А многим хочется стабильности. Поэтому согласны платить за саппорт и удобства.

А они требуют большого комбайна.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39124344
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевДохтаР,

Не мне учить Ларри деньги зарабатывать. :)
Так что их стратегия - их дело.

Простой инструмент требует дорогого сотрудника, чтоб умел им пользоваться. А он птица независимая. А многим хочется стабильности. Поэтому согласны платить за саппорт и удобства.

А они требуют большого комбайна.

С точки зрения менеджмента спорный вопрос,
дорогой сотрудник в националной валюте , или дорогой саппорт в пересчете на доллары.

В нашей организации уже несколько лет еще до всяких кризисов
изменился вектор на то,
что выгоднее платить своим в своей стране, в нацвалюте,
чем в долларах индусам.

Своими можно договориться на компенсацию ипотеки в нац валюте,
талонами на бензин, размещением премии на депозит,
или еще как то поиграать в пянташки с дырявой ликвидностью,
а индусам вынь да полож, в долларах, в срок по договору,
а доходы то зарабатываются в национальной валюте.
...
Рейтинг: 0 / 0
Oracle vs MSSQL. Битва интеллекта.
    #39124510
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

авторНесколько странно полагать обработку синтаксиса (парсинг) основываясь на плане.

Так парсинг такой запрос проходит успешно. Значит дело не в парсинге.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SET PARSEONLY ON
GO
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(x)
GO
SET PARSEONLY OFF



Код: plaintext
Command(s) completed successfully.

авторПри отсутствующем distinct (или group by) не совсем понятно какое это имеет отношение к стартовому посту.
Порядок выполнения операторов в плане. Т.е. сначала надо посчитать, а потом сортировать, но из подсчитанного кое-что могло быть удалено при DISTINCT SORT. Т.е. получается, для того, чтобы выполнить запрос оптимизатор должен поменять порядок операторов в плане - сделать не то, что просили. Возможно, это какой-то "рудимент" оптимизатора. Заведение по этому поводу "тикета" вижу бесперспективным.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Oracle vs MSSQL. Битва интеллекта.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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