Мне было любопытно. В чем разница между этими запросами:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
sql
select-query
Стивен Александр
источник
источник
... WHERE TRUE
? Я знаю, что (в большинстве SQL, включая MySQL) TRUE - это просто причудливый макрос для1
- но все же, разве это не более очевидно для читателя?Ответы:
2 и 3 в MySQL одинаковы, функционально 1 также совпадает.
where 1
не является стандартным, поэтому, как указывали другие, не будет работать на других диалектах.Люди добавляют
where 1
илиwhere 1 = 1
около тогоwhere
условий, которые можно легко добавить или удалить из запроса, добавив / закомментировав некоторые "and
компонентов ...».т.е.
источник
WHERE 1=1
вам не нужно будет заботиться о том, является ли условие, которое вы пытаетесь добавить в строку, первым (поэтому ему понадобитсяWHERE
перед ) или не.ORDER BY 1
Синтаксис @dlatikay требуется (вместо имен столбцов), если вы выполняете объединение двух или более операторов SELECT." AND "
в качестве разделителя.Как известно, все три дают одинаковые результаты. (В логическом контексте MySQL обрабатывает целое число «1» как истинное - фактически, любое число, отличное от «0», рассматривается как истинное).
Оптимизатор MySQL явно задокументирован для удаления постоянных условий в
WHERE
предложении:Следовательно, все три будут скомпилированы в один и тот же код.
Все они функционально эквивалентны и должны иметь одинаковые рабочие характеристики.
Тем не менее, первый и третий - это стандартный SQL. Второй вызовет некоторую ошибку логического выражения во многих базах данных. Итак, я бы посоветовал вам избегать этого (я не уверен, работает ли это в строгом режиме SQL MySQL).
Часто третий используется при построении динамических
WHERE
предложений. Это позволяет легко добавлять дополнительные условия,AND <condition>
не беспокоясь о затяжныхAND
s.источник
Если вы спрашиваете о различиях в характеристиках и результатах, их нет, 2 и 3 совпадают
WHERE TRUE
, и они будут такими же, как и первый.Результаты во всех данных из
table_name
(без фильтра)1 будет оцениваться как
TRUE
, следовательно - без фильтра - будет возвращена каждая запись.Как и в предыдущем случае, 1 = 1 - это
TRUE
выражение, поэтому - без фильтра - будет выбрана каждая запись.источник
Все одинаковы, но 2 и 3 используются для простой обработки
AND/OR
таких условий, как:источник
В 1 MySQL не требуется оценивать какие-либо условия WHERE.
В 2 и 3 условие where является статическим и не основывается на значениях строк. Он будет оцениваться с помощью логической логики и всегда будет истинным.
Функционально разницы нет. Вы должны выбрать 1 для ясности кода.
источник
Все одинаковы, но 2 и 3 используются для создания динамических запросов для условий И / ИЛИ.
мы используем формат 2 и 3 для динамического запроса, поэтому мы уже знаем, «где» добавлено ключевое слово, и продолжаем добавлять фильтры. подобно
через несколько строк, если у нас есть новые фильтры, мы добавляем «AND coulmnb = b» и т. д.
Вам не нужно проверять sql-запрос на предмет ключевого слова, размещенного в первом или начальном запросе.
В противном случае мы можем написать
sqlquery = "SELECT * FROM tablename"
затем
если в
sqlquery
тогдаеще
источник
Все они дают один и тот же ответ. Однако способ написания 2 и 3 в основном заключается в том, чтобы иметь контроль над оператором «Где», чтобы было легче добавить или удалить его позже.
Я думаю, что первый и третий способ - правильный способ написания. Если вам нужен оператор where, который вам нравится в номере 3, иначе номер 1 будет достаточно хорош.
источник
В MS SQL 1 и 3 одинаковы, однако вариант 2 не будет работать, вариант 2 является недопустимым оператором, как и в MS SQL, где для сравнения некоторых значений используется WHERE. Например:
источник
источник
Результат - выдает все записи в указанной таблице вместо имени таблицы для всех трех запросов.
SELECT * FROM tablename WHERE 1
- Отметьте этот ответSELECT * FROM tablename WHERE 1=1
- Отметьте этот ответДля получения дополнительной информации об оптимизации предложения WHERE проверьте эти: MYSQL , SQLite , SQL
источник