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:

  • Удаление состояния.,.

    (B >= ​​5 AND B = 5) OR (B = 6 AND 5 = 5) ИЛИ (B = 7 AND 5 = 6) → B = 5 ИЛИ B = 6

Следовательно, все три будут скомпилированы в точно такой же код.

Все они функционально эквивалентны и должны иметь одинаковые рабочие характеристики.

Тем не менее, первый и третий являются стандартными 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