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

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

select * from user where 1=1 

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

5 ответов

Решение

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

 AND (SOMECONDITION)

Итак 1=1 начинает WHERE раздел, это всегда правда, и это не повредит производительности.

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

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

Отформатировал запросы сверху специально для Stackru, потому что он распознает только /* 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

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

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

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

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

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

Другие вопросы по тегам