Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Есть ли последовательность и обрубка условий в where?  [new]
Дядя Петя Вася
Member

Откуда:
Сообщений: 1368
where
a > b
and a> c
and c> d


будут ли проверяться второе и третье условие если первое не прошло?
10 июл 17, 17:57    [20630526]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Adx
Guest
Дядя Петя Вася,

возможно.
10 июл 17, 18:15    [20630598]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Добрый Э - Эх
Guest
Дядя Петя Вася,

А есть уверенность, что первое условие будет проверяться первым?
10 июл 17, 18:21    [20630615]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Дядя Петя Вася
Member

Откуда:
Сообщений: 1368
Добрый Э - Эх
Дядя Петя Вася,

А есть уверенность, что первое условие будет проверяться первым?

в этом и вопрос!
10 июл 17, 18:35    [20630646]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Дядя Петя Вася, нет.

Сравните

select 1 where 1 = 2 and 1 = cast('test' as int)


и

select 1 where 1 = 1 and 1 = cast('test' as int)
10 июл 17, 18:39    [20630654]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30698
Дядя Петя Вася
будут ли проверяться второе и третье условие если первое не прошло?
конечно нет.
они вообще могут проверяться на совершенно разных стадиях обработки запроса, и на совсем разном количестве строк (а могут на одних и тех же строках на одной стадии выполнения запроса).
10 июл 17, 19:14    [20630716]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30698
alexeyvg
Дядя Петя Вася
будут ли проверяться второе и третье условие если первое не прошло?
конечно нет.
они вообще могут проверяться на совершенно разных стадиях обработки запроса, и на совсем разном количестве строк (а могут на одних и тех же строках на одной стадии выполнения запроса).
то есть конечно по разному, правил "не проверять, если одно не выполнено", или "проверять в определённом порядке" нет.
10 июл 17, 19:15    [20630721]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
Дядя Петя Вася
будут ли проверяться второе и третье условие если первое не прошло?

Да просто попробуйте, скажем
WHERE @a/@b > 1
AND @a/@c > 1
AND @c/@d > 1

При положительных @a..@d эти условия почти эквивалентны, но, задавая отдельным переменным (можно и поля таблицы использовать) нулевое значение, можно посмотреть, всегда ли будет выскакивать ошибка деления на ноль. Ну или не на ноль делить, а нарисовать свои функции, факт исполнения которых отслеживать (пусть пишут в отдельную таблицу).
11 июл 17, 08:04    [20631707]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
aleks2
Guest
Akina
Дядя Петя Вася
будут ли проверяться второе и третье условие если первое не прошло?

Да просто попробуйте, скажем
WHERE @a/@b > 1
AND @a/@c > 1
AND @c/@d > 1

При положительных @a..@d эти условия почти эквивалентны, но, задавая отдельным переменным (можно и поля таблицы использовать) нулевое значение, можно посмотреть, всегда ли будет выскакивать ошибка деления на ноль. Ну или не на ноль делить, а нарисовать свои функции, факт исполнения которых отслеживать (пусть пишут в отдельную таблицу).


Когда коту делать нечего - он...

1. Условия в where и on сервер волен проверять в ЛЮБОМ порядке. Это документировано. Гарантируется только что, что ВСЕ условия будут выполнены (не проверены, а именно выполнены).

2. Хотите "порядка" - case вам в кривые руки.
11 июл 17, 10:56    [20632264]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Adx
Guest
aleks2

2. Хотите "порядка" - case вам в кривые руки.


и то, если все выражения скалярные.
А вообще, полагаться на порядок - идиотизм.
11 июл 17, 11:31    [20632417]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Дядя Петя Вася
Member

Откуда:
Сообщений: 1368
Adx
aleks2
2. Хотите "порядка" - case вам в кривые руки.


и то, если все выражения скалярные.
А вообще, полагаться на порядок - идиотизм.

это не идиотизм это оптимизация которая есть в языках высокого программирования а не шняге типа
set @s = 1
11 июл 17, 13:01    [20632927]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Дядя Петя Вася,

нет, это идиотизм

автор
языках высокого программирования
и высокой культуры

алекс вам вполне правильно ответил
автор
Условия в where и on сервер волен проверять в ЛЮБОМ порядке.
11 июл 17, 13:04    [20632940]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3436
Akina
Дядя Петя Вася
будут ли проверяться второе и третье условие если первое не прошло?

Да просто попробуйте, скажем
WHERE @a/@b > 1
AND @a/@c > 1
AND @c/@d > 1

При положительных @a..@d эти условия почти эквивалентны, но, задавая отдельным переменным (можно и поля таблицы использовать) нулевое значение, можно посмотреть, всегда ли будет выскакивать ошибка деления на ноль. Ну или не на ноль делить, а нарисовать свои функции, факт исполнения которых отслеживать (пусть пишут в отдельную таблицу).


ну, да, т.е. вы хотите сказать, что при отрицательных @a..@d эти условия не (почти эквивалентны) ?
11 июл 17, 13:15    [20632991]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30698
Дядя Петя Вася
Adx
пропущено...


и то, если все выражения скалярные.
А вообще, полагаться на порядок - идиотизм.

это не идиотизм это оптимизация которая есть в языках высокого программирования а не шняге типа
set @s = 1
Оптимизация- это как раз не полагаться на порядок, а проверять условия в том порядке, в котором это выгоднее.
Что сиквел и делает.
Во многих языках, типа C, такой оптимизации нет, и проверка делается в определённом, заданном создателями языка, порядке.
Akina
Да просто попробуйте, скажем
WHERE @a/@b > 1
AND @a/@c > 1
AND @c/@d > 1
Если в условиях переменные, то проверка будет идти одновременно.
Неодновременность случается тогда, когда проверка условий разнесена на разные стадии обработки запроса.
11 июл 17, 14:20    [20633330]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
Дядя Петя Вася
Member

Откуда:
Сообщений: 1368
alexeyvg
Дядя Петя Вася
пропущено...

это не идиотизм это оптимизация которая есть в языках высокого программирования а не шняге типа
set @s = 1
Оптимизация- это как раз не полагаться на порядок, а проверять условия в том порядке, в котором это выгоднее.
Что сиквел и делает.
Во многих языках, типа C, такой оптимизации нет, и проверка делается в определённом, заданном создателями языка, порядке.

сиквел умнеее человека?
11 июл 17, 14:44    [20633536]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Дядя Петя Вася
alexeyvg
пропущено...
Оптимизация- это как раз не полагаться на порядок, а проверять условия в том порядке, в котором это выгоднее.
Что сиквел и делает.
Во многих языках, типа C, такой оптимизации нет, и проверка делается в определённом, заданном создателями языка, порядке.

сиквел умнеее человека?

точно умнее всех троих вместе взятых Дяти, Пети и Васи
11 июл 17, 14:46    [20633554]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли последовательность и обрубка условий в where?  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Дядя Петя Вася
alexeyvg
пропущено...
Оптимизация- это как раз не полагаться на порядок, а проверять условия в том порядке, в котором это выгоднее.
Что сиквел и делает.
Во многих языках, типа C, такой оптимизации нет, и проверка делается в определённом, заданном создателями языка, порядке.

сиквел умнеее человека?
Люди в Microsoftе на этом собаку съели и, небось, кучу диссертаций написали.
11 июл 17, 14:57    [20633644]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить