SELECT * FROM tablename ГДЕ 1
Мне было любопытно. Каковы различия между этими запросами:
-
SELECT * FROM `tablename`
-
SELECT * FROM `tablename` WHERE 1
-
SELECT * FROM `tablename` WHERE 1=1
Ответы
Ответ 1
2 и 3 в MySQL одинаковы, функционально 1 тоже одно и то же.
where 1
не является стандартным, поэтому, как указывали другие, не будет работать на других диалектах.
Люди добавляют where 1
или where 1 = 1
, поэтому условия where
могут быть легко добавлены или удалены в/из запроса, добавив/комментируя некоторые компоненты "and
...".
то есть.
SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = 'Value1'
AND Column2 = 'Value2'
Ответ 2
Как вы знаете, все три дают одинаковые результаты. (В булевом контексте MySQL рассматривает целое число "1" как истинное - фактически любое число, которое не является "0", рассматривается как истинный).
Оптимизатор MySQL явно документирован для удаления константных условий в WHERE
:
Следовательно, все три будут скомпилированы в точно такой же код.
Все они функционально эквивалентны и должны иметь одинаковые рабочие характеристики.
Тем не менее, первый и третий являются стандартными SQL. Второй приведет к некоторой ошибке булева выражения во многих базах данных. Поэтому я бы посоветовал вам избегать этого (я не уверен, работает ли он в строгом режиме SQL MySQL).
Часто третий используется при построении динамических предложений WHERE
. Это упрощает добавление дополнительных условий как AND <condition>
, не беспокоясь о задержке AND
s.
Ответ 3
Если вы спрашиваете о различиях в характеристиках и результатах, их нет, 2 и 3 являются одинаковыми WHERE TRUE
, и они будут иметь то же самое, что и первый.
1 - SELECT * FROM table_name
Результаты во всех данных из table_name
(без фильтра)
2 - SELECT * FROM table_name WHERE 1
1 будет оцениваться как TRUE
, поэтому - нет фильтра - каждая запись будет возвращена.
3 - SELECT * FROM table_name where 1=1
То же самое, что и последнее, 1 = 1 - выражение TRUE
, поэтому - нет фильтра - каждая запись будет выбрана.
Ответ 4
все одинаковы, но 2 и 3 используются для простой обработки условий AND/OR
как
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')
Ответ 5
В 1 MySQL не нуждается в оценке каких-либо условий WHERE.
В 2 и 3 условие where статично и не зависит от значений строк. Он будет оцениваться с логической логикой и всегда будет истинным.
Функционально нет разницы. Вы должны выбрать 1 для ясности кода.
Ответ 6
Все одинаковы, но 2 и 3 используются для создания динамических запросов для условий AND/OR.
sqlquery =" SELECT * FROM `tablename` where 1 =1 "
мы используем формат 2 и 3 для создания динамического запроса, поэтому мы уже знаем "where" добавлено ключевое слово, и мы продолжаем добавлять дополнительные фильтры.
Как
sqlquery = sqlquery + "and columna =a"
"AND columna =a " then
после нескольких строк, если у нас есть новые фильтры, мы добавляем "AND coulmnb = b" и т.д.
Вам не нужно проверять sql-запрос, где ключевое слово поместилось в первый или начальный запрос
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')
В противном случае мы можем написать sqlquery = "SELECT * FROM tablename"
то
если в sqlquery
нет предложения where 'where', тогда
sqlquery = sqlquery + "where columna =a"
еще
sqlquery = sqlquery + "and columna =a"
Ответ 7
Все они выдают один и тот же ответ. Однако способы записи 2 и 3 в основном состоят в том, чтобы контролировать оператор "Where", чтобы было проще добавить его или удалить позже.
Я думаю, что первый и третий путь - правильный способ его написания. Если вам нужен оператор where, который вам нравится в номере 3, в противном случае номер 1 будет достаточно хорошим.
Ответ 8
В MS SQL 1 и 3 одинаковы, однако вариант 2 не будет работать, параметр 2 является недопустимым, как в MS SQL, WHERE используется для сравнения некоторых значений. Например:
- Выберите * from 'myTable, где ID = 3 (действительный)
- Выберите * from 'myTable, где 1 = 1 совпадает с Select * from' myTable, где 2 = 2 совпадает с Select * from 'myTable, где 3 = 3 вы получаете идею (действительная), такая же, как Select * From' MYTABLE
Ответ 9
1 - SELECT * FROM table_name
он предоставит вам все записи таблицы с запуском любого оператора where.
2 - SELECT * FROM table_name ГДЕ 1
это когда условие всегда верно, его в основном используется хакером, чтобы попасть в любую систему. Если вы слышали о SQL-инъекциях, чем 2 и 3, это сценарии, которые вынуждены хакером создавать все записи таблицы.
3 - SELECT * FROM table_name где 1 = 1
Это даст вам все записи таблицы, но будет сравнивать оператор where, а затем двигаться вперед, в основном он добавляется для добавления или удаления дополнительных инструкций после этого.
Ответ 10
Результат. Дает все записи в указанной таблице вместо имени табуляции для всех трех запросов
SELECT * FROM tablename WHERE 1
- Проверьте этот ответ
SELECT * FROM tablename WHERE 1=1
- Проверьте этот ответ
Для получения дополнительной информации о оптимизации предложения WHERE выполните следующие действия: MYSQL, SQLite, SQL