以前、テーブル結合クエリを書いていたとき、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 でオブジェクトが空かどうかをチェックする実装例
フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...
目次1. システム環境2. 運用プロセスと途中で遭遇した問題1. システム環境1. Tencent ...
序文:インターネット技術の継続的な発展に伴い、MySQL 関連のエコシステムはますます充実し、ますま...
ダウンロードダウンロードアドレス: https://dev.mysql.com/downloads/...
1. MyISAM ストレージエンジン欠点:トランザクションはサポートされていません最小粒度ロック:...
前書き: 最近、私はパートナーとチームを組んで .NET Core プロジェクトに取り組む予定です。...
テーブル タグの frame 属性と rules 属性は境界線の表示を制御できます。フレーム プロパ...
ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...
nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...
目次仮想DOM仮想DOMとは何か仮想DOMの役割Vue の仮想 DOM vノードvNodeとはvNo...
React Router を理解したいなら、まず歴史を理解する必要があります。より具体的には、Rea...
この記事では、移行、バックアップ、アップグレードなどのシナリオで使用される Docker イメージの...
スケジュールされたタスク エディターを開きます。Cent は、デフォルトで vim を使用して直接開...
目次解決策1: レプリカを再構築する前提条件アドバンテージ欠点手順マスター奴隷解決策2: データ修復...
ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...