простой запрос sql - PullRequest
       6

простой запрос sql

0 голосов
/ 17 ноября 2009

Вчера мой друг задал мне вопрос по этому запросу:

select * from user where 1=1 

Я сказал, что запрос неправильный, но он сказал, что он правильный. Я не понимаю, как этот запрос может быть правильным. Как работает where 1 = 1 часть?

Ответы [ 5 ]

7 голосов
/ 17 ноября 2009

Это часто встречается, когда запрос строится программно, поэтому для каждого условия вы добавите:

 AND (SOMECONDITION)

поэтому 1=1 запускает секцию WHERE, это всегда так, и это не влияет на производительность.

5 голосов
/ 17 ноября 2009

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

Это особенно полезно, когда вы хотите построчно комментировать предложение where для отладки. Рассмотрим запрос

SELECT Columns 
FROM Table
WHERE 1=1
AND Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

против

SELECT Columns 
FROM Table
WHERE Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

Намного легче закомментировать любую значимую часть предложения WHERE с помощью первого запроса

WHERE 1=1
-- AND Col1 = @Value1 
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

тогда как во втором запросе вы должны сделать это

SELECT Columns 
FROM Table
WHERE --Col1 = @Value1
-- And 
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

РЕДАКТИРОВАТЬ:

Отформатировал запросы сверху специально для StackOverflow, поскольку он распознает только /* COMMENT */, а не -- COMMENT

Намного легче закомментировать любую значимую часть предложения WHERE с помощью первого запроса

WHERE 1=1
/* AND Col1 = @Value1  */
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

тогда как во втором запросе вы должны сделать это

SELECT Columns 
FROM Table
WHERE /* Col1 = @Value1 */
/* And */
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
0 голосов
/ 17 ноября 2009

1 равно 1 поэтому вышеприведенная вещь 1 = 1 верна, и поэтому SQL-запрос вернет все строки.

Некоторым БД SQL требуется предложение where, поэтому вы можете поместить фиктивное предложение where, которое будет истинным для всех строк в таблицах.

0 голосов
/ 17 ноября 2009

1 = 1 равно true и возвращает все строки в запросе

0 голосов
/ 17 ноября 2009

1 = 1 - фиктивное предложение WHERE. Он будет просто возвращать каждую запись из пользовательской таблицы, поскольку 1 = 1, очевидно, верно.

Другими словами, предложение WHERE применяется к каждой записи в таблице пользователей и возвращает все записи, для которых предложение WHERE имеет значение true. 1 = 1, очевидно, всегда верно, поэтому все записи будут соответствовать условию и будут возвращены.

...