ホームページ >データベース >mysql チュートリアル >SQL文におけるonとwhereの使い方の違いの説明
このブログは、どの記事がオリジナル原稿であるかわかりませんので、ここに宣言します。
データベース 2つ以上のテーブルを結合してレコードを返す場合、中間の一時テーブルが生成され、この一時テーブルがユーザーに返されます。
おすすめのmysqlビデオチュートリアル:「mysqlチュートリアル」
left jionを使用する場合、on条件とwhere条件の違いは次のとおりです:
1. on条件は一時テーブルを生成するときに使用される条件です。 on の条件が true であるかどうかは関係ありません。左側のテーブルのレコードが返されます。
2. where条件は、一時テーブル生成後に一時テーブルをフィルタリングするための条件です。この時点では、左結合の意味はありません (左のテーブルのレコードが返される必要があります)。条件が true でない場合は、すべてが除外されます。
2 つのテーブルがあるとします。
テーブル 1: tab2
id |
size |
1 |
10 |
2 |
20 |
3 |
30 |
表 2: tab2
サイズ |
名前 |
10 |
AAA |
20 |
BBB |
20 |
CCC |
2つのSQL:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’ 2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
最初の SQL のプロセス: 1. 中間テーブル条件: tab1.size = tab2.sizetab1.idtab1.sizetab2.sizetab2.name11010AAA22020BBB22020CCC330(null)(null)||2 次に、中間テーブルの where 条件をフィルターします (この時点で true ではない行はフィルターで除外されます)。 ): tab2.name='AAA'tab1.idtab1.sizetab2.sizetab2.name11010AAA |
2 番目の SQL プロセス: 1. 条件: tab1.size = tab2.size および tab2 の中間テーブル。 name='AAA' (条件が true でない場合、左側のテーブルのレコードも返されます)tab1.idtab1.sizetab2.sizetab2.name11010AAA220(null)(null)330(null)(null) |
実際、上記の結果は次のとおりです。 主な理由は、左結合、右結合、および完全結合の特殊性です。 on の条件が true であるかどうかに関係なく、 内のレコードが返されます。 left または right table、full には left と right のプロパティの結合があります。 内部の jion にはこのような特殊性がないため、条件は on と where に配置され、返される結果セットは同じになります
概要:
一般に、where ステートメントは NULL をフィルターで除外します。行数 (条件が false となる行の数)。したがって、FULL JOIN ステートメントでは、where ステートメントと on ステートメントの結果が最も異なりますが、JOIN/INNER JOIN ステートメントでは、違いはなく、式によって異なります。そしてテーブル内のデータ。
以上がSQL文におけるonとwhereの使い方の違いの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。