ホームページ >データベース >mysql チュートリアル >SQL文におけるonとwhereの使い方の違いの説明

SQL文におけるonとwhereの使い方の違いの説明

巴扎黑
巴扎黑オリジナル
2017-07-17 09:37:217098ブラウズ

このブログは、どの記事がオリジナル原稿であるかわかりませんので、ここに宣言します。

データベース 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。