Простой запрос 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 и возвращает все строки в запросе