私は興味がありました。これらの各クエリの違いは何ですか:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
MySQLでは2と3は同じですが、機能的には1も同じです。
where 1
は標準ではないため、他の人が指摘しているように、他の方言では機能しません。
人々はwhere 1
またはwhere 1 = 1
を追加するので、いくつかの "where
..."コンポーネントを追加/コメントアウトすることで、クエリにand
条件を簡単に追加または削除できます。
つまり.
SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = 'Value1'
AND Column2 = 'Value2'
ご存じのとおり、3つすべてが同じ結果を生成します。 (ブールコンテキストでは、MySQLは整数「1」をtrueとして扱います。実際、「0」以外の数値はすべてtrueとして扱われます)。
MySQLオプティマイザーは、明示的に documented であり、WHERE
句の定数条件を削除します。
一定の条件の削除。 。 。:
(B> = 5 AND B = 5)OR(B = 6 AND 5 = 5)OR(B = 7 AND 5 = 6)-> B = 5 OR B = 6
したがって、3つすべてがまったく同じコードにコンパイルされます。
これらはすべて機能的に同等であり、同じパフォーマンス特性を持つ必要があります。
ただし、最初と3番目は標準SQLです。 2番目は、多くのデータベースで何らかのブール式エラーを引き起こします。したがって、それを避けることをお勧めします(MySQLの厳格なSQLモードで機能するかどうかはわかりません)。
動的なWHERE
句を作成するときに、3番目の要素がよく使用されます。 AND
sが残ることを心配せずに、AND <condition>
として追加条件を簡単に追加できます。
パフォーマンスと結果の違いについて質問している場合、2、3は同じWHERE TRUE
であり、最初のものと同じ結果になります。
1 - SELECT * FROM table_name
table_name
からのすべてのデータが得られます(フィルターなし)
2 - SELECT * FROM table_name WHERE 1
1はTRUE
として評価されるため、フィルターなし-すべてのレコードが返されます。
3 - SELECT * FROM table_name where 1=1
最後の1と同じ、1 = 1はTRUE
の式であるため、フィルターなし-すべてのレコードが選択されます。
すべて同じですが、次のようなAND/OR
条件を簡単に処理するために2と3が使用されます。
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')
1では、MySQLはWHERE条件を評価する必要がありません。
2および3では、where条件は静的であり、行の値に基づいていません。ブール論理で評価され、常に真になります。
機能的には、違いはありません。コードを明確にするために1を選択する必要があります。
すべて同じですが、2および3はAND/OR条件の動的クエリの作成に使用されます
sqlquery =" SELECT * FROM `tablename` where 1 =1 "
2と3の形式を使用して動的クエリを作成するため、「where」キーワードが追加されていることが既にわかっており、さらにフィルターを追加し続けています。好む
sqlquery = sqlquery + "and columna =a"
"AND columna =a " then
新しいフィルターがある場合は、数行後に「AND coulmnb = b」などを追加します
最初のクエリまたは最初のクエリに配置されているキーワードとして、SQLクエリを確認する必要はありません。
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')
そうでなければsqlquery = "SELECT * FROM tablename"
と書くことができます
それから
sqlquery
に 'where'句がない場合、
sqlquery = sqlquery + "where columna =a"
else
sqlquery = sqlquery + "and columna =a"
それらはすべて同じ答えを出力します。ただし、2および3の記述方法は、主に「Where」ステートメントを制御するためであり、後で追加または削除しやすくなります。
第一と第三の方法が適切な書き方だと思います。 3番で好きなwhereステートメントが必要な場合は、1番で十分でしょう。
MS SQL 1と3は同じですが、オプション2は機能せず、オプション2はMS SQLのように無効なステートメントです。WHEREはいくつかの値を比較するために使用されます。例えば: