2017-03-27 35 views
3
select * from Employees where Name = 'John' or ''='' 

このステートメントは、テーブル内のすべての従業員を取得します。"="は何を意味しますか

''=''はどのように解釈されるのですか?説明していただけますか?それは2つの空の文字列

を比較していますので、

+3

は ''''と同じですが、答えはイエスで、条件は 'OR'であるので、' WHERE'は真です。 – Lamak

答えて

7

''=''だから、基本的に''=''Tautologyで、しかもあなたがOR条件を使用しているので、あなたの全体の状態は常にtrueで常にtrueです。あなたのWHEREWHERE条件は全く影響のあるようちょうどselect * from Employeesすることができ

where Name = 'John' or 1 = 1 

あなたのクエリのように書き込むことができます。

それがで名前を検索だとして、それはかなり無意味 where句です
+0

私はちょうど何かを探しました。それは十分に簡単でした。私はその点を見ることができませんでした。ありがとう –

+1

良いキャッチ。誰かがこの問題を抱えている場合、「すべての」データベースで「常に」真実ではありません。これはOracle(悲しいかな)では当てはまりません。 –

+0

@ GordonLinoff、それは知っているのは変ですが、 'SQL Server'ではいつも* – Rahul

1

where Name = 'John' 

しかし、それはまた、常にtrueを返す式での検索です:だから、すべてのデータが返される

or '' = '' 

関係なく。

このwhere句がどこかで生成され、名前フィルタがオプションでない限り、2番目の部分を含める理由はありません。名前がフィルタリングされていない場合は、常に真の部分を含めるとエラーを防ぐことができます。それでも、余分なデータを返すので、私はその使用に疑問を抱きます。

それが生成さwhere句で、それが必要とされ、それを行うことがより論理的であるかもしれない場合は、次の

or 1=2 

その後、あなたは余分なデータを返しません。

関連する問題