以前、テーブル結合クエリを書いていたとき、whereとonの違いがわからず、SQLに小さな問題が発生することがありました。ここでは、その違いを記録するための特別な記事を用意しました。違いがわからない場合は、 この2つの違いと、いつ使うべきか注意: on と where を区別してください。まず、接続を内部接続と非内部接続に分けます。内部接続の場合、on と where の機能は同じです。通常、それらの違いを区別することはできず、非内部接続について話しています。 通常、onは2つのテーブルを接続するために使用されます。これは接続の条件のみです。内部接続では、onは省略できます。このとき、2つのテーブルの直積を表します。on接続を使用した後、MySQLは一時テーブルを生成し、whereは一時テーブルに基づいて、where句に従って条件を満たすレコードをフィルタリングします。そのため、whereはフィルタリングに使用されます。 内部結合 注: join はデフォルトで inner join になります。inner join の場合、on と where は同じ効果を持つと考えることができます。 非内部結合(左結合、右結合、完全結合など) 一般的に、非内部接続を使用する場合、違いは明確ではありません。 例 次に、違いを示すために 2 つのテーブルを作成します (各テーブルに 4 つのデータ レコードを挿入し、2 つのテーブルは trade_id によってリンクされます)。SQL スクリプトはこの記事の下部に添付されています。次に、結合テーブル クエリを使用して、on と where の違いを示します。 1. 内部結合は 2 つのテーブルを接続します (on と where なし)
同等
結果セットは2つのテーブルの直積である。 2. 内部結合は2つのテーブルを接続します(オンの場合) hopegaming_main.test_1234 t1 から * を選択し、 t1.trade_id = t2.trade_id で hopegaming_main.test_1235 t2 に参加します。 結果セットは、2つのテーブルで同じtrade_idを持つデータです。 3. 内部結合は2つのテーブルを接続します(whereを使用) hopegaming_main.test_1234 t1 から * を選択し、hopegaming_main.test_1235 t2 に参加します。ここで、t1.trade_id = t2.trade_id です。 結果セットは2つのテーブル内の同じtrade_idのデータです 2 と 3 の結果から、inner join を使用する場合、on と where は同じ効果があることがわかります。 4. 左結合(次の例では、左結合を使用して 2 つのテーブルを接続します) 選択*からhopegaming_main.test_1234 t1左結合hopegaming_main.test_1235 t2 t1.trade_id = t2.trade_id 結果セットは左側のテーブルに基づいています。trade_id に基づいて右側の等しい値を直接検索し、結合します。右側のテーブルに一致するデータがない場合、null として表示されます。 5. 左結合(次の例では、左結合を使用して2つのテーブルを接続します)2つのテーブルを接続し、接続条件に定数式があります hopegaming_main.test_1234 t1 から * を選択し、 t1.trade_id = t2.trade_id および t2.nick_name = 'wangwu' で hopegaming_main.test_1235 t2 を結合します。 結果セットは左側のテーブルに基づいています。結合条件で一致するレコードが見つからない場合は、null が表示されます。 6. 左結合(次の例では、左結合を使用して2つのテーブルを接続します)2つのテーブルを接続し、定数式をwhere句に入れます * を hopegaming_main.test_1234 t1 から選択し、 t1.trade_id = t2.trade_id で、 t2.nick_name = 'wangwu' で、 hopegaming_main.test_1235 t2 に参加します。 結果には、where 句に一致するデータのみが表示されます。一致するものがない場合、接続をフィルタリングした後の一時テーブル内のデータであるため、表示されません。 テーブルを作成し、データを挿入するためのスクリプト: テーブル `hopegaming_main`.`test_1234` を作成します ( `id` varchar(30) NOT NULL COMMENT 'ID番号', `name` varchar(100) デフォルト NULL コメント '名前', `trade_id` varchar(100) デフォルト NULL コメント 'トランザクションID', `gender` tinyint(4) デフォルト NULL コメント '性別', `birthday` タイムスタンプ(6) NOT NULL COMMENT '生年月日', BTREEを使用した主キー(`id`) キー `idx_trade_id` (`trade_id`) BTREE の使用 ) ENGINE=InnoDB デフォルト CHARSET=utf8 ROW_FORMAT=DYNAMIC; hopegaming_main.test_1234 に挿入 (ID、名前、取引ID、性別、誕生日) VALUES('1', 'zhangsan', '123', 0, CURRENT_TIMESTAMP(6)), ('2', 'zhaosi', '124', 0, CURRENT_TIMESTAMP(6)), ('3', '王武', '125', 0, CURRENT_TIMESTAMP(6)), ('4', 'maqi', '126', 0, CURRENT_TIMESTAMP(6)); テーブル `hopegaming_main`.`test_1235` を作成します ( `id` varchar(30) NOT NULL COMMENT 'ID番号', `nick_name` varchar(100) デフォルト NULL コメント 'エイリアス', `trade_id` varchar(100) デフォルト NULL コメント 'トランザクションID', `address` varchar(100) デフォルト NULL コメント 'アドレス', `email` varchar(6) NOT NULL COMMENT '生年月日', BTREEを使用した主キー(`id`) キー `idx_trade_id` (`trade_id`) BTREE の使用 ) ENGINE=InnoDB デフォルト CHARSET=utf8 ROW_FORMAT=DYNAMIC; hopegaming_main.test_1235 に挿入 (ID、ニックネーム、取引ID、住所、メールアドレス) 値('1', '張山', '123', '北京', '0000'), ('2'、'王武'、'123'、'天津'、'1111')、 ('3'、'maqi'、'124'、'上海'、'2222')、 ('4'、'楊柳'、'127'、'山西'、'3333'); 要約するMySQL の where と on の違いと、それらをいつ使用するかについての記事はこれで終わりです。MySQL の where と on の違いについての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: レスポンシブ Web デザイン手法を実装し、ウォーターフォール モデルに別れを告げる 5 つのステップ (グラフィック チュートリアル)
>>: ネイティブ JavaScript でオブジェクトが空かどうかをチェックする実装例
CSSコードコンテンツをクリップボードにコピー.bottomTable{背景色: rgb (249,...
問題を見つける上位の SQL ステートメントを取得すると、DB が大量のselect @@sessi...
XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...
目次1. 一括更新の方法コンソール出力2. フックがルーティングパラメータを取得する方法実行効果1....
アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...
<body style="scroll:no"> <テーブルの...
以下のコンテンツのオペレーティング システムは次のとおりです: Centos 6.7 yum で M...
インターフェース全体に背景画像を表示したい場合は、当然 body に背景を追加することを考えます。コ...
この記事では、例を使用して MySQL のロック メカニズムと使用方法を説明します。ご参考までに、詳...
導入: MySQL を使用してテーブルを作成する場合、通常は自動インクリメント フィールド (AUT...
1. 従来のbinlogマスタースレーブレプリケーション、エラー報告をスキップする方法 mysql&...
目次1. 異なるビューポートを取得する方法2. 水平画面と垂直画面のJavaScript検出3. 水...
ベンダープレフィックスとは何ですか?ベンダー プレフィックス - ブラウザー エンジン プレフィック...
コアコード -- 以下では、MySQLでのソート列の実装を示します -- テストデータ CREATE...
ハイパーリンクは、Web サイト上のすべてのページがハイパーリンクで接続され、ページ間を移動できるた...