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

Откуда:
Сообщений: 1
Добрый день.
Не так давно начал работать с SQL и у меня возник такой вопрос:
являются ли операторы AND и OR сокращёнными.
Поясню, что имею в виду.
Например, такой код:
IF ((условие_1) AND (условие_2)) ...

Если условие_1 равно false, то будет ли вычисляться условие_2?
11 фев 16, 13:36    [18803942]     Ответить | Цитировать Сообщить модератору
 Re: AND и OR. Сокращённые или нет?  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
PHA,

решает сервер. Причём, и порядок вычисления операндов AND может быть любым.
11 фев 16, 13:39    [18803958]     Ответить | Цитировать Сообщить модератору
 Re: AND и OR. Сокращённые или нет?  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
iap
PHA,

решает сервер. Причём, и порядок вычисления операндов AND может быть любым.
Короче говоря, зависит от выбранного сервером плана выполнения запроса
11 фев 16, 13:40    [18803968]     Ответить | Цитировать Сообщить модератору
 Re: AND и OR. Сокращённые или нет?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
iap,

баян
11 фев 16, 14:02    [18804117]     Ответить | Цитировать Сообщить модератору
 Re: AND и OR. Сокращённые или нет?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
блин не на то ответил:)
11 фев 16, 14:02    [18804120]     Ответить | Цитировать Сообщить модератору
 Re: AND и OR. Сокращённые или нет?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Я вложенные ифы писал
11 фев 16, 20:37    [18806109]     Ответить | Цитировать Сообщить модератору
 Re: AND и OR. Сокращённые или нет?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
PHA
IF ((условие_1) AND (условие_2)) ...
Это процедурный AND (в IF) и нифига он не оптимизируется. А вот реляционный (в WHERE) да:
CREATE TABLE T1 (i int)
CREATE TABLE T2 (i int)
INSERT T2 VALUES(1)

set statistics io on
set nocount on

PRINT 'IF T1 T2'
IF EXISTS(select * from T1) AND EXISTS(select * from T2)
SELECT 'YES'

PRINT 'WHERE T1 T2'
IF EXISTS(
	SELECT 1
	WHERE EXISTS(select * from T1) AND EXISTS(select * from T2)
)
SELECT 'YES'

PRINT 'WHERE T2 T1'
IF EXISTS(
	SELECT 1
	WHERE EXISTS(select * from T2) AND EXISTS(select * from T1)
)
SELECT 'YES'

DROP TABLE T1 
DROP TABLE T2



IF T1 T2
Table 'T2'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'T1'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

WHERE T1 T2
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'T1'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.


WHERE T2 T1
Table 'T1'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'T2'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
11 фев 16, 22:24    [18806518]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить