結合の種類 1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコードを結合するレコード セットを形成します。 2. 外部結合: 外部左結合と外部右結合に分かれます。 ケースの背景 テーブル java (name varchar(255)) を作成します。 Javaの値に('java1')、('java2')、('blue')を挿入します。 テーブルmysqlを作成します(name varchar(255)); mysqlに値('mysql1')、('mysql2')、('blue')を挿入します。 内部結合 java.name=mysql.name の場合、java、mysql から * を選択します。 SELECT * FROM java JOIN mysql ON java.name=mysql.name; SELECT * FROM java INNER JOIN mysql ON java.name=mysql.name; SELECT * FROM java CROSS JOIN mysql ON java.name=mysql.name; SELECT * FROM java STRAIGHT_JOIN mysql ON java.name=mysql.name; これら4つの文はすべて内部結合であり、返される結果は +------+------+ | 名前 | 名前 | +------+------+ | 青 | 青 | +------+------+
内部結合の構文は次のとおりです。 結合テーブル: テーブル参照 [INNER | CROSS] JOIN テーブル要素 [結合条件] | テーブル参照 STRAIGHT_JOIN テーブル係数 | table_reference STRAIGHT_JOIN table_factor ON 条件 外部結合 左結合 SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name; 消す +-------+------+ | 名前 | 名前 | +-------+------+ | java1 | NULL | | java2 | NULL | | 青 | 青 | +-------+------+ したがって、上記の結果から、Java テーブルの java1 および java2 レコードの名前は MySQL テーブル内に対応する名前がないため空ですが、java のすべての列にはまだ java1 および java2 レコードがあり、mysql テーブルのすべての列は NULL であることがわかります。残りの青いレコードは、Java テーブルと MySQL テーブル間の内部結合の結果です。 LEFT JOIN の ON または USING 部分に右側のテーブルに一致するレコードがない場合、すべての列が NULL に設定された行が右側のテーブルに使用されます。この方法を使用すると、別のテーブルに対応する部分がないテーブル内のレコードを見つけることができます。 SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name WHERE mysql.name IS NULL; この SQL は、Java にはいるが MySQL にはいない人を検索します。明らかに、人「java1」と「java2」は要件を満たしています。 右結合 SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name; 返される結果は +------+--------+ | 名前 | 名前 | +------+--------+ | NULL | mysql1 | | NULL | mysql2 | | 青 | 青 | +------+--------+ 右結合では左結合と同様の結果になりますが、今回は mysql テーブルにすべての結果セットが保持される点が異なります。 外部結合構文 join_table:| テーブル参照 LEFT [OUTER] JOIN テーブル参照 結合条件 | テーブル参照 NATURAL [LEFT [OUTER]] JOIN テーブル係数 | テーブル参照 RIGHT [OUTER] JOIN テーブル参照 結合条件 | テーブル参照 NATURAL [RIGHT [OUTER]] JOIN テーブル係数 USING(column_list) 句 両方のテーブルに存在する必要がある一連の列に名前を付けるために使用されます。 SELECT java.*,mysql.* FROM java LEFT JOIN mysql USING (name); 結果 +-------+------+ | 名前 | 名前 | +-------+------+ | java1 | NULL | | java2 | NULL | | 青 | 青 | +-------+------+ 結合の操作順序 SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c); --SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c) と同等 括弧が結合順序に与える影響 t1.id、t2.id、t3.id を t1、t2 から選択し、 t3 を LEFT JOIN し (t3.id=t1.id)、where t1.id=t2.id とします。 -- 実際の実行は次のようになります: SELECT t1.id, t2.id, t3.id FROM t1, ( t2 LEFT JOIN t3 ON (t3.id=t1.id) ) WHERE t1.id=t2.id; -- 次のように記述する必要があります: SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id; ここでは括弧が非常に重要なので、今後このようなクエリを書くときは、括弧をいくつか追加することを忘れないでください。少なくとも、これで多くのエラーを回避できます。 上記は編集者が紹介したMysqlの結合操作です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
>>: Ubuntu 18.04 Server に静的 IP を設定する方法
まず第一に、私はウェブデザイナーです。具体的には、私は XHTML フロントエンド デザイナーです。...
方法1: cmdコマンドを使用するまず、DOS ウィンドウを開き、スタート、実行、cmd と入力しま...
React は、ユーザー インターフェイスを構築するための JavaScript ライブラリです。 ...
1. LinuxサーバーのDocker構成ファイルを変更する vim /usr/lib/system...
デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...
この記事の主な内容は次のとおりです。 1. ブラウザのサポート2. 画像3. レスポンシブツール4....
プライベート フィルターとグローバル フィルターのメソッドと概念は同じですが、プライベート フィルタ...
Flash での HTML と CSS の適用:同僚の Den が Flash で HTML と C...
フォルダー内のすべての txt ファイルのファイル名の前に「gt_」を追加する必要があります。つまり...
Syn 攻撃は、最も一般的で最も簡単に悪用される攻撃方法です。TCP プロトコルの欠陥を利用して、偽...
目次序文1. Dockerをインストールする2. ElasticSearchをインストールする3. ...
1. コマンドの紹介watch コマンドは、指定されたコマンドを定期的に実行し、実行結果を全画面に表...
目次1. 効果図(複数列) 2. 通常セレクター: mode = selector、複数列セレクター...
Docker はポートを IPv6 にのみマッピングし、IPv4 にはマッピングしません。 dock...
GreaseMokey (中国語では Grease Monkey Script と呼んでいます) は...