Where 1 1 sql зачем
Перейти к содержимому

Where 1 1 sql зачем

  • автор:

Зачем кому-то использовать WHERE 1 = 1 И <условия> в предложении SQL?

Я где-то видел, что это будет использоваться для защиты от SQL Injection, но это кажется очень странным.

Если есть инъекция WHERE 1 = 1 AND injected OR 1=1 будет иметь тот же результат, что и injected OR 1=1 .

Далее отредактируйте: как насчет использования в определении представления?

Спасибо за ваши ответы.

Тем не менее, Я не понимаю, зачем кому-то использовать эту конструкцию для определения представления или использовать его внутри хранимой процедуры.

Возьмите это, например:

18 ответов

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

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

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

Просто добавьте пример кода в ответ Грега:

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

Вы можете конкатенировать условия, используя строку «И». Затем, вместо подсчета количества условий, в которых вы проходите, вы помещаете «WHERE 1 = 1» в конец вашего предложения SQL SQL и выполняете конкатенированные условия.

В принципе, это избавляет вас от необходимости выполнять проверку условий, а затем добавлять перед ними строку «WHERE».

Кажется, что ленивый способ всегда знать, что ваше предложение WHERE уже определено и позволяет вам добавлять условия, не проверяя, является ли это первым.

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

Собственно, я видел такие вещи, которые использовались в отчетах BIRT. Запрос, переданный во время выполнения BIRT, имеет вид:

и ‘?’ заменяется во время выполнения фактическим значением параметра, выбранным из раскрывающегося списка. Выбор в раскрывающемся списке определяется следующим образом:

чтобы получить все возможные значения плюс » * «. Если пользователь выбирает » * » из раскрывающегося списка (что означает, что должны быть выбраны все значения a), запрос должен быть изменен (по Javascript) перед запуском.

Так как «?» является позиционным параметром и ДОЛЖЕН оставаться там для других вещей, чтобы работать, Javascript изменяет запрос:

Это в основном устраняет эффект предложения where, сохраняя при этом параметр позиционирования.

Я также видел случай И, используемый ленивыми кодировщиками при динамическом создании SQL-запроса.

Предположим, вам нужно динамически создать запрос, начинающийся с select * from t , и проверит:

  • имя Боб; и
  • зарплатa > $20 000

некоторые люди добавили бы первую с WHERE и последующие с AND, таким образом:

Ленивые программисты (и это не обязательно плохой признак) не будут различать добавленные условия, они начнутся с select * from t where 1=1 и просто добавят предложения AND после этого.

Technology Tips

Tips and how-to's on technology, software, and building a website

What does WHERE 1=1 mean in SQL

Sometimes when you look at other people’s SQL code, you’ll see

as part of the code. If you haven’t seen this before, you might be wondering why people do this. After all, 1=1 always evaluates to TRUE, so that apparently makes this line of code redundant. As it turns out, there are two reasons why this is done:

Reason 1: Testing

The first reason is to make it easy to test SQL statements. When a developer is working on building a SQL statement, often there is a lot of trial and error that happens. By having the WHERE 1=1 clause, this makes the testing of the different WHERE conditions easier.

WHERE 1=1
—and gender=’F’
and product_id=135209
—and credit_card=’Visa’

By having each condition on a different line, it’s easy to comment out different conditions using two dashes to explore the various possibilities.

Reason 2: Programmatic

The second use case for using WHERE 1=1 is when you want to general SQL in a programmatic fashion. For example, you might have a selection box for users to select what category of product they want to view. In SQL, this will be implemented as part of the WHERE clause. If the code already has

then the program will only need to add an additional “AND [new condition]” clause after this, and not have to worry about putting in logic to determine whether this is the first condition that needs to be added (i.e., need to add the WHERE clause) or there is already a WHERE clause and you simply need to add an AND clause.

We’ve talked about two reasons, and we will also mention one supposed reason that actually isn’t true. Some people believe that WHERE 1=1 will speed up the performance of the SQL query. This is not the case, as modern SQL optimizers simply ignore this clause.

Personally I do not put in WHERE 1=1 in my SQL because to me this requires an extra effort and accomplishes no real goal. On the other hand we all have our programming habits, so there are occasions when I see a code that contains WHERE 1=1 . When I get this, I simply leave it there for the same reason (there is no real benefit in taking the time to change it).

So next time you see WHERE 1=1 , you understand why people use it. Whether you decide to adopt this pattern is entirely up to you.

Why use WHERE 1 or WHERE 1=1?

Usually, if conditions are not required in our query statements, we don’t use a WHERE clause. But I’ve seen a WHERE 1 clause being used in many places, even where other conditions are not present.

  • Why is this done?
  • Are there specific benefits to the execution time?
  • Does it enable other functionalities?
  • Is using WHERE 1=1 similar to this?

D M's user avatar

ursitesion's user avatar

6 Answers 6

Basically it is just for programmer convenience since you can just add additional conditions with AND. after that and it has no impact on execution time.

Check out these links to Stackoverflow:

  • Why would someone use WHERE 1=1 AND in a SQL clause?
  • “where 1=1” statement

Note that WHERE 1 is identical to WHERE 1=1 ; both mean WHERE TRUE but the former is rejected by many database management systems as not really being boolean.

Twinkles's user avatar

My main use is that it makes it easier to comment out stuff during development of queries. I lead with , ‘s and and ‘s:

Also makes it easier to programmatically tack stuff unto the end.

Otherwise you’d have to qualify the first option. and have each following option check the previous options. What if the user only chose Option D in the previous example? You’d have to make sure that if A, B and C aren’t chosen then use WHERE else use and . With = at the start, you can just slap the qualifiers to the end of the statement.

Что значит where 1=1

6 cores are activated что это значит и что с этим делать?
Доброго времени суток уважаемые форумчане. Возникла вот такая незадача с компом. Пишет 6 cores are.

Что значит Handle hf? Что в эту функцию нужно передавать
мне нужно создать функцию Node * ReadNode(HANDLE hf); (Node это структура) Так вот вопрос в том.

Sleep(8000) — что значит? На что можно заменить в борланд с++?
Не распознаёт Sleep(8000) . Если за комментировать пишет что f заданно но не используется. Как.

Сообщение от Talamaur

Используется в нескольких целях:
1. запрос формируется динамически, т.е. например, в зависимости от условий, заданных на какой-то форме, к WHERE добавляются AND . В этом случае, если не нужно добавлять ни одного условия, то останется "голое" WHERE, что вызовет ошибку. А если начинать с WHERE 1 = 1, то запрос в любом случае будет корректным

2. Для целей отладки

Иногда нужно закомментировать какую-то строку. Все строки, кроме первой, комментировать удобно, а если комментровать первую, то надо убирать и первый AND. Если же первой строкой идет 1 = 1, то такой проблемы не возникает.

1 = 2 обычно используется в конструкции CTAS

обычная замена булевого значения
1=1 — как true
1=2 — как false

еще при динамических запросах можно 1=1 подменять на что-то другое, тогда 1=1 обозначает место куда будет вставлено динамическое условие.

Сообщение от Grossmeister

а можно небольшой примерчик для пояснения, а то я несколько раз перечитал и не совсем понял

Добавлено через 3 минуты

Сообщение от Grossmeister
Сообщение от Talamaur
Сообщение от Grossmeister
Сообщение от Talamaur

1=2 — ложь
2=1 — ложь
294854784=56353 — ложь
разницы нет

с нулём не шутите

Сообщение от belalugoci
Сообщение от Grossmeister
Сообщение от Talamaur
Сообщение от Talamaur
Сообщение от Talamaur

разные системы, разные языки, компиляторы, трансляторы и т.п. Не принято использовать ноль, но это не значит что нельзя.

разбираем по частям

Сообщение от Talamaur

то есть сам текст запроса формируется исполняемым кодом

Сообщение от Talamaur
Сообщение от Grossmeister

Так а где тут условие WHERE и что за "голый" WHERE.
Тут переменной v_SQL сначала присваивается строка ‘WHERE 1 = 1’. Если <некое условие> ввернет TRUE, то выполнится следующий оператор: v_SQL:= v_SQL || ‘ AND fld1 = val1 ‘. А если вернет FALSE, то .

Добавлено через 3 минуты

Сообщение от belalugoci

Но WHERE это необязательный оператор. Зачем его писать да еще и с выражение 1=1?

Добавлено через 10 минут

Сообщение от Grossmeister
Сообщение от Talamaur
Сообщение от Talamaur

выполнится с условие где всегда истина

Сообщение от Talamaur
Сообщение от Talamaur
Сообщение от Talamaur
Сообщение от belalugoci
Сообщение от Grossmeister
Сообщение от Talamaur

Я тоже самоучка, просто до того как я стал разбирать ОТО — я начал с ньютоновской физики — это как бы логично.

Например фраза "голый WHERE" относится вообще ко всему в жизни, а если вы и про неё спрашиваете, то у вас нет базовых знаний. Вопросы у вас как у ребёнка, который всё не понимает, но читать не умеет и сам не разберётся в сложных вопросах. И тут родители находятся в сложной ситуации, можно ребёнка послать (как поступают многие), а можно попытаться сложное рассказать на примере пчёлок и цветочков. Только у нас с вами разговор про пчёлок ни к чему не приведёт. Поэтому априори нет смысла в такой беседе. Значит это скучно.
Судя по тому как вы соображаете я бы сказал что вам лет 14-15, а если больше, то всё печально.
Я не пытаюсь сказать что я лучше вас, я такой же балбес, но дело в том, что у нас разное образование и разный подход к изучению непознанного.

Сообщение от Talamaur

Нет, будет ошибка синтаксиса запроса, так как задана команда WHERE, а условие не назначено.

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

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