select * from Employees where Name = 'John' or ''=''
このステートメントは、テーブル内のすべての従業員を取得します。"="は何を意味しますか
''=''
はどのように解釈されるのですか?説明していただけますか?それは2つの空の文字列
を比較していますので、
select * from Employees where Name = 'John' or ''=''
このステートメントは、テーブル内のすべての従業員を取得します。"="は何を意味しますか
''=''
はどのように解釈されるのですか?説明していただけますか?それは2つの空の文字列
を比較していますので、
''=''
だから、基本的に''=''
がTautology
で、しかもあなたがOR
条件を使用しているので、あなたの全体の状態は常にtrue
で常にtrue
です。あなたのWHERE
もWHERE
条件は全く影響のあるようちょうどselect * from Employees
することができ
where Name = 'John' or 1 = 1
あなたのクエリのように書き込むことができます。
それがで名前を検索だとして、それはかなり無意味where
句です
私はちょうど何かを探しました。それは十分に簡単でした。私はその点を見ることができませんでした。ありがとう –
良いキャッチ。誰かがこの問題を抱えている場合、「すべての」データベースで「常に」真実ではありません。これはOracle(悲しいかな)では当てはまりません。 –
@ GordonLinoff、それは知っているのは変ですが、 'SQL Server'ではいつも* – Rahul
:
where Name = 'John'
しかし、それはまた、常にtrueを返す式での検索です:だから、すべてのデータが返される
or '' = ''
関係なく。
このwhere
句がどこかで生成され、名前フィルタがオプションでない限り、2番目の部分を含める理由はありません。名前がフィルタリングされていない場合は、常に真の部分を含めるとエラーを防ぐことができます。それでも、余分なデータを返すので、私はその使用に疑問を抱きます。
それが生成さwhere
句で、それが必要とされ、それを行うことがより論理的であるかもしれない場合は、次の
or 1=2
その後、あなたは余分なデータを返しません。
は ''''と同じですが、答えはイエスで、条件は 'OR'であるので、' WHERE'は真です。 – Lamak