where 1 0 sql зачем

зачем использовать оператор WHERE 1=0 в SQL?

Я видел запрос, выполняемый в файле журнала приложения. и в нем содержался такой вопрос:

какая польза от такого запроса, который обязан ничего возвращать?

8 ответов

такой запрос можно использовать для пинга базы данных. Статья:

обеспечивает что non данные посланы назад, поэтому никакая обязанность К. П. У., никакой сетевой трафик или другое потребление ресурса.

подобный запрос можно проверить на:

a usecase я могу думать о: у вас есть форма фильтра, где вы не хотите иметь никаких результатов поиска. Если вы укажете какой-либо фильтр, они будут добавлены в предложение where.

или он обычно используется, если вам нужно создать sql-запрос вручную. Е. Г. вы не хотите проверить, является ли предложение where является пустым или нет..и вы можете просто добавить такие вещи:

(Если вы соединяете предложения С или вам нужно 0=1, Если у вас есть и у вас есть 1=1)

Это также может использоваться для извлечения схемы таблицы из таблицы без извлечения каких-либо данных внутри этой таблицы. Как сказал Андреа Коллеони, это будут другие преимущества использования этого.

Если список условий не известен во время компиляции, а построенный во время выполнения, вам не нужно беспокоиться о том, есть ли у вас один или несколько условий. Вы можете генерировать их все, как:

и объединить их все вместе. При 1=1 в начале начальный и имеет с чем-то ассоциироваться.

Я никогда не видел, чтобы это использовалось для каких-либо инъекций защита, как вы скажи, что это вряд ли поможет. Я видел, как его использовали как удобство реализации. Механизм запросов SQL в конечном итоге игнорирует 1=1, поэтому он не должен влиять на производительность.

некоторые системы используют скрипты и могут динамически устанавливать выбранные записи, которые будут скрыты из полного списка; поэтому ложное условие должно быть передано SQL. Например, три записи из 500 могут быть отмечены как конфиденциальность по медицинским причинам и не должны быть видны всем. Динамический запрос будет контролировать 500 записей, видимых тем, кто в HR, в то время как 497 видны менеджерам. Значение будет передано условно заданному предложению SQL, т. е. «где 1=1″ или » где 1=0 «, в зависимости от того, кто вошел в систему.

Если пользователь намерен только добавлять записи, то самый быстрый метод-открыть набор записей без возврата существующих записей.

в качестве ответа-но и в качестве дальнейшего разъяснения того, что @AndreaColleoni уже упоминал:

управление многими условиями OR в динамических запросах (e.g WHERE 1=0 OR )

цель как включено-выключено переключатель

Я использую это как оператор switch (on/off) для частей моего запроса.

если бы я использовал

Оптимизация Времени Компиляции

Я также могу добавить, что добавление в 0=? как переключатель переменной привязки не будет работать очень хорошо, если все ваши критерии индексируются. Оптимизатор времени выполнения, который будет выбирать соответствующие индексы и планы выполнения, может просто не видеть выгоды от использования индекса в этих немного более сложных предикатах. Поэтому я обычно советую, чтобы ввести 0 / 1 явно в ваш запрос (строка, объединяющая ее в вашем sql или выполняющая поиск/замену). Это даст компилятору возможность оптимизировать избыточные операторы и даст исполнителю среды выполнения гораздо более простой запрос для просмотра.

потому что вы просто и насильственно вводите 0/1, есть нулевой шанс SQL-инъекций.

выглядит хорошо, легко понять, компилятор хорошо справляется с этим, и оптимизатор на основе стоимости выполнения понимает это лучше и будет иметь большую вероятность выбора правильного индекса.

Я проявляю особую осторожность в том, что я впрыскиваю. Основным способом передачи переменных является и остается привязка переменных по всем очевидным причинам.

Источник

зачем вам использовать оператор WHERE 1 = 0 в SQL?

Я видел, как в файле журнала приложения выполнялся запрос. и он содержал такой запрос:

Какой смысл в таком запросе, который ничего не должен возвращать?

12 ответов

Подобный запрос можно использовать для проверки связи с базой данных. Пункт:

Гарантирует, что данные не отправляются обратно, поэтому нет платы за процессор, нет сетевого трафика или другого потребления ресурсов.

Подобный запрос может проверить:

Похоже, что кто-то пытается взломать вашу базу данных. Похоже, кто-то пробовал инъекцию mysql. Подробнее об этом можно прочитать здесь: Mysql Injection

Пример использования условия where 1 = 0 можно найти в базе данных Northwind 2007. На главной странице командные кнопки «Новый заказ клиента» и «Новый заказ на закупку» используют встроенные макросы с параметром «Где», установленным на 1 = 0. Это открывает форму с фильтром, который заставляет подчиненную форму отображать только записи, относящиеся к родительской форме. Это можно проверить, открыв любую из этих форм из дерева без использования макроса. При открытии таким образом все записи отображаются во вспомогательной форме.

Согласно пользователю milso в другом потоке, другая цель для «WHERE 1 = 0»:

СОЗДАТЬ ТАБЛИЦУ имя новой_таблицы как select * FROM Old_table_name WHERE 1 = 2;

это создаст новую таблицу с той же схемой, что и старая таблица. (Очень удобно, если вы хотите загрузить данные для сравнения)

Это может быть полезно, когда в приложении требуются только метаданные таблицы. Например, если вы пишете приложение JDBC и хотите получить размер отображения столбцов для столбцов в таблице.

Вставка фрагмента кода сюда

Здесь запрос типа «выбрать * из таблицы» может вызвать проблемы с производительностью, если вы имеете дело с огромными данными, потому что он будет пытаться получить все записи из таблицы. Вместо этого, если вы предоставите запрос типа «выберите * из таблицы где 1 = 0 », он будет получать только метаданные таблицы, а не записи, поэтому он будет эффективным.

Если список условий неизвестен во время компиляции и вместо этого создается во время выполнения, вам не нужно беспокоиться о том, есть ли у вас одно или несколько условий. Вы можете сгенерировать их все, например:

и соедините их все вместе. С 1 = 1 в начале, с начальным и есть с чем ассоциироваться.

Я никогда не видел, чтобы это использовалось для какой-либо защиты от инъекций, как вы говорите, похоже, что это не сильно поможет. Я видел это для удобства реализации. Механизм запросов SQL в конечном итоге проигнорирует 1 = 1, поэтому это не должно повлиять на производительность.

управлять множеством условий OR в динамических запросах (например, WHERE 1=0 OR )

Назначение переключателя вкл. / Выкл.

Я использую это как оператор включения (включения / выключения) для частей моего запроса.

Если бы я использовал

Я также добавил литерал 1=1 просто для эстетики, чтобы текст запроса хорошо выровнялся.

Оптимизация времени компиляции

Я также могу добавить, что добавление 0 =? как переключатель переменной привязки не будет работать очень хорошо, если все ваши критерии проиндексированы. Оптимизатор времени выполнения, который выберет соответствующие индексы и планы выполнения, может просто не увидеть рентабельности использования индекса в этих немного более сложных предикатах. Поэтому я обычно советую явно вводить 0/1 в ваш запрос (строка, объединяющая его в вашем sql, или выполнение некоторого поиска / замены). Это даст компилятору возможность оптимизировать избыточные операторы и даст Runtime Executer гораздо более простой запрос для просмотра.

Поскольку вы просто и принудительно вводите 0/1, вероятность SQL-инъекций равна нулю.

Выглядит хорошо, легко понимается, компилятор хорошо с этим справляется, а оптимизатор на основе затрат времени выполнения понимает это лучше и с большей вероятностью выберет правильный индекс.

Я могу придумать вариант использования: у вас есть форма фильтра, в которой вы не хотите получать результаты поиска. Если вы укажете какой-либо фильтр, они будут добавлены в предложение where.

(если вы соединяете предложения с помощью OR, вам нужно 0 = 1, если у вас есть AND, у вас есть 1 = 1)

Это также можно использовать для извлечения схемы таблицы из таблицы без извлечения каких-либо данных внутри этой таблицы. Как сказала Андреа Коллеони, это будут другие преимущества использования этого.

Источник

why would you use WHERE 1=0 statement in SQL?

I saw a query run in a log file on an application. and it contained a query like:

what is the use of such a query that is bound to return nothing?

12 Answers 12

A query like this can be used to ping the database. The clause:

Ensures that non data is sent back, so no CPU charge, no Network traffic or other resource consumption.

A query like that can test for:

This may be also used to extract the table schema from a table without extracting any data inside that table. As Andrea Colleoni said those will be the other benefits of using this.

where 1 0 sql зачем. Смотреть фото where 1 0 sql зачем. Смотреть картинку where 1 0 sql зачем. Картинка про where 1 0 sql зачем. Фото where 1 0 sql зачем

A usecase I can think of: you have a filter form where you don’t want to have any search results. If you specify some filter, they get added to the where clause.

Or it’s usually used if you have to create a sql query by hand. E.g. you don’t want to check whether the where clause is empty or not..and you can just add stuff like this:

(if you connect the clauses with OR you need 0=1, if you have AND you have 1=1)

manage many OR conditions in dynamic queries (e.g WHERE 1=0 OR )

Purpose as an on/off switch

I am using this as a switch (on/off) statement for portions of my Query.

I have also added a literal 1=1 just for esthetics so the text of the query aligns nicely.

Compile Time Optimization

I also might add that adding in the 0=? as a bind variable switch will not work very well if all your criteria are indexed. The run time optimizer that will select appropriate indexes and execution plans, might just not see the cost benefit of using the index in those slightly more complex predicates. Hence I usally advice, to inject the 0 / 1 explicitly into your query (string concatenating it in in your sql, or doing some search/replace). Doing so will give the compiler the chance to optimize out redundant statements, and give the Runtime Executer a much simpler query to look at.

Because you are simply, and forcedly, injecting a 0/1, there is zero chance of SQL injections.

Looks good, easily understood, the compiler handles it well, and the Runtime Cost Based Optimizer understands it better and will have a higher likelihood of selecting the right index.

I take special care in what I inject. Prime way for passing variables is and remains bind variables for all the obvious reasons.

Источник

Почему вы используете инструкцию WHERE 1 = 0 в SQL?

Я видел запрос, выполняемый в файле журнала в приложении. и он содержал запрос типа:

что такое использование такого запроса, который не должен ничего возвращать?

Подобный запрос можно использовать для проверки базы данных. Пункт:

Обеспечивает отправку неданных, поэтому плата ЦП не взимается, нет сетевого трафика или другого ресурса.

Подобный запрос может протестировать:

    доступность сервера
    CUST_ATTR49 существование таблицы
    Состояние столбца идентификатора
    Сохранение живого соединения
    Причина запуска триггера без изменения каких-либо строк
    управлять многими условиями OR в динамических запросах (например, WHERE 1=0 OR )

Я могу думать о том, что у вас есть форма фильтра, в которой вы не хотите иметь никаких результатов поиска. Если вы укажете какой-то фильтр, они будут добавлены в предложение where.

Или он обычно используется, если вам нужно создать запрос sql вручную. Например. вы не хотите проверять, является ли предложение where пустым или нет.. и вы можете просто добавить такие вещи, как это:

(если вы связываете предложения с OR, вам нужно 0 = 1, если у вас есть И у вас есть 1 = 1)

Это может также использоваться для извлечения схемы таблицы из таблицы без извлечения каких-либо данных внутри этой таблицы. Как сказал Андреа Коллени, это будут другие преимущества использования этого.

цитируется у Грега

Если список условий неизвестен во время компиляции и вместо этого построенный во время выполнения, вам не нужно беспокоиться о том, есть ли у вас один или более одного условия. Вы можете создать их все как:

и объединить их все вместе. При первом запуске 1 = 1 initial и с чем-то ассоциироваться.

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

Некоторые системы используют сценарии и могут динамически устанавливать выбранные записи для скрытия из полного списка; поэтому для SQL необходимо передать ложное условие. Например, три записи из 500 могут быть отмечены как конфиденциальность по медицинским причинам и не должны быть видны всем. Динамический запрос будет контролировать 500 записей, которые видны тем, кто находится в HR, а 497 видны менеджерам. Значение будет передано в предложение SQL, которое условно установлено, то есть «WHERE 1 = 1» или «WHERE 1 = 0», в зависимости от того, кто зарегистрирован в системе.

Если пользователь намеревается только добавлять записи, то самый быстрый метод открывает набор записей без возврата каких-либо существующих записей.

В качестве ответа, а также в качестве дополнительного разъяснения к тому, что @AndreaColleoni уже упомянул:

управлять многими условиями ИЛИ в динамических запросах (например, WHERE 1=0 OR )

Я использую это как оператор переключения (вкл/выкл) для части моего запроса.

Если бы я должен был использовать

Оптимизация времени компиляции

Я также мог бы добавить, что добавление в 0 =? так как переменная связывания не будет работать очень хорошо, если все ваши критерии проиндексированы. Оптимизатор времени выполнения, который выберет соответствующие индексы и планы выполнения, может просто не увидеть экономической выгоды от использования индекса в этих немного более сложных предикатах. Поэтому я обычно советую вводить 0/1 явно в ваш запрос (конкатенация строк в вашем sql или поиск/замена). Это даст компилятору возможность оптимизировать избыточные операторы и даст исполнителю времени выполнения гораздо более простой запрос для просмотра.

Во втором приведенном выше утверждении компилятор знает, что он никогда не должен даже учитывать вторую часть условия ( cond =? ), И он просто удалит весь предикат. Если бы это была переменная связывания, компилятор никогда бы этого не достиг.

Поскольку вы просто и принудительно вводите 0/1, вероятность инъекции SQL равна нулю.

Выглядит хорошо, легко понимается, компилятор хорошо с этим справляется, а оптимизатор на основе затрат времени выполнения понимает его лучше и будет иметь более высокую вероятность выбора правильного индекса.

Я уделяю особое внимание тому, что я делаю инъекцией. Первичным способом передачи переменных является и остается связывание переменных по всем очевидным причинам.

Источник

Почему вы используете инструкцию WHERE 1 = 0 в SQL?

Я видел запрос, выполняемый в файле журнала в приложении. и он содержал запрос типа:

что такое использование такого запроса, который не должен ничего возвращать?

ОТВЕТЫ

Ответ 1

Подобный запрос можно использовать для проверки базы данных. Пункт:

Обеспечивает отправку неданных, поэтому плата ЦП не взимается, нет сетевого трафика или другого ресурса.

Подобный запрос может протестировать:

Ответ 2

Я могу думать о том, что у вас есть форма фильтра, в которой вы не хотите иметь никаких результатов поиска. Если вы укажете какой-то фильтр, они будут добавлены в предложение where.

Или он обычно используется, если вам нужно создать запрос sql вручную. Например. вы не хотите проверять, является ли предложение where пустым или нет.. и вы можете просто добавить такие вещи, как это:

(если вы связываете предложения с OR, вам нужно 0 = 1, если у вас есть И у вас есть 1 = 1)

Ответ 3

Это может также использоваться для извлечения схемы таблицы из таблицы без извлечения каких-либо данных внутри этой таблицы. Как сказал Андреа Коллени, это будут другие преимущества использования этого.

Ответ 4

цитируется у Грега

Если список условий неизвестен во время компиляции и вместо этого построенный во время выполнения, вам не нужно беспокоиться о том, есть ли у вас один или более одного условия. Вы можете создать их все как:

и объединить их все вместе. При первом запуске 1 = 1 initial и с чем-то ассоциироваться.

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

Ответ 5

Некоторые системы используют сценарии и могут динамически устанавливать выбранные записи для скрытия из полного списка; поэтому для SQL необходимо передать ложное условие. Например, три записи из 500 могут быть отмечены как конфиденциальность по медицинским причинам и не должны быть видны всем. Динамический запрос будет контролировать 500 записей, которые видны тем, кто находится в HR, а 497 видны менеджерам. Значение будет передано в предложение SQL, которое условно установлено, то есть «WHERE 1 = 1» или «WHERE 1 = 0», в зависимости от того, кто зарегистрирован в системе.

Ответ 6

Если пользователь намеревается только добавлять записи, то самый быстрый метод открывает набор записей без возврата каких-либо существующих записей.

Ответ 7

В качестве ответа, а также в качестве дополнительного разъяснения к тому, что @AndreaColleoni уже упомянул:

управлять многими условиями ИЛИ в динамических запросах (например, WHERE 1=0 OR )

Назначение в качестве выключателя

Я использую это как оператор переключения (вкл/выкл) для части моего запроса.

Если бы я должен был использовать

Оптимизация времени компиляции

Я также мог бы добавить, что добавление в 0 =? так как переменная связывания не будет работать очень хорошо, если все ваши критерии проиндексированы. Оптимизатор времени выполнения, который выберет соответствующие индексы и планы выполнения, может просто не увидеть экономической выгоды от использования индекса в этих немного более сложных предикатах. Поэтому я обычно советую вводить 0/1 явно в ваш запрос (конкатенация строк в вашем sql или поиск/замена). Это даст компилятору возможность оптимизировать избыточные операторы и даст исполнителю времени выполнения гораздо более простой запрос для просмотра.

Во втором приведенном выше утверждении компилятор знает, что он никогда не должен даже учитывать вторую часть условия ( cond =? ), И он просто удалит весь предикат. Если бы это была переменная связывания, компилятор никогда бы этого не достиг.

Поскольку вы просто и принудительно вводите 0/1, вероятность инъекции SQL равна нулю.

Выглядит хорошо, легко понимается, компилятор хорошо с этим справляется, а оптимизатор на основе затрат времени выполнения понимает его лучше и будет иметь более высокую вероятность выбора правильного индекса.

Я уделяю особое внимание тому, что я делаю инъекцией. Первичным способом передачи переменных является и остается связывание переменных по всем очевидным причинам.

Ответ 8

Это может быть полезно, когда в приложении требуются только метаданные таблицы. Например, если вы пишете приложение JDBC и хотите получить размер отображения столбцов в таблице.

Вставить фрагмент кода здесь

Здесь наличие запроса типа «выбрать * из таблицы» может вызвать проблемы с производительностью, если вы имеете дело с огромными данными, потому что он попытается извлечь все записи из таблицы. Вместо этого, если вы предоставите запрос типа «выбрать * из таблицы, где 1 = 0 «, он будет получать только метаданные таблицы, а не записи, поэтому он будет эффективен.

Ответ 9

CREATE TABLE New_table_name как выберите * FROM Old_table_name WHERE 1 = 2;

это создаст новую таблицу с той же схемой, что и старая таблица. (Очень удобно, если вы хотите загрузить некоторые данные для сравнения)

Ответ 10

Это очень хорошо при извлечении метаданных и делает вещь общей. У многих БД есть оптимизатор, поэтому они не будут его выполнять, но он все еще является допустимым оператором SQL и должен выполняться на всех БД. Это не приведет к получению какого-либо результата, но вы знаете, что имена столбцов действительны, типы данных и т.д. Если он не выполняется, вы знаете, что с БД что-то не так (не работает и т.д.). Многие универсальные программы выполняют этот фиктивный оператор для тестирования и выборки метаданных.,

Ответ 11

Кажется, что кто-то пытается взломать вашу базу данных. Похоже, кто-то попробовал инъекцию mysql. Подробнее об этом можно прочитать здесь: Mysql Injection

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *