<p>この記事では、MySQL での結合クエリとセット操作について説明します。お役に立てば幸いです。 </p>
<p><img src="https://img.php.cn/upload/article/000/000/024/6145d21cb7577613.jpg" alt="MySQL 学習における結合クエリとセット操作の簡単な分析" ></p>
<h2><strong>結合クエリ</strong></h2>
<p>結合クエリとは、2 つ以上のテーブル間で一致するクエリを指し、一般に水平操作と呼ばれます。結果には、これらのテーブルのすべての列が含まれます。MySQL には、クロス結合、内部結合、外部結合という 3 つの結合操作があります。 [関連する推奨事項: <a href="https://www.php.cn/course/list/51.html" target="_blank" textvalue="mysql视频教程">mysql ビデオ チュートリアル </a>]</p>
<p> クロス結合は <code>CROSS JOIN</code> と呼ばれ、2 つのテーブルに対してデカルト積を実行し、2 つのテーブルを返します。すべての列の構成。たとえば、左側のテーブルに n 個のデータ、右側のテーブルに m 個のデータがある場合、最終結果は <code>n*m</code> ですが、これを次のように接続することもできます。自分自身で実行すると、最終結果は次のステートメントのように <code>n*n</code> 項目になります。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">select * from orders as a cross join orders as b;
+---------+--------+---------+--------+
| orderId | userId | orderId | userId |
+---------+--------+---------+--------+
| 10007 | 2 | 10001 | 1 |
| 10006 | 4 | 10001 | 1 |
.....
| 10002 | 1 | 10007 | 2 |
| 10001 | 1 | 10007 | 2 |
+---------+--------+---------+--------+
49 rows in set (0.01 sec)</pre><div class="contentsignin">ログイン後にコピー</div></div><p>ordersテーブルのデータは7個なので、最終的には49個のデータが生成されます。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">mysql> select * from orders as a ,orders as b;</pre><div class="contentsignin">ログイン後にコピー</div></div><p>結果は同じですが、記述方法が異なります。上記の記述方法は、1989 年に米国規格協会によって SQL 用に標準化され、ANSI SQL 89 標準と呼ばれ、最初の記述方法は92年の規制。 </p><p>クロス結合は、次のステートメントのような繰り返しデータを迅速に生成する場合に便利です。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">insert orders select a.orderId,a.userId from orders as a ,orders as b limit 10;</pre><div class="contentsignin">ログイン後にコピー</div></div><p>以下は内部結合で、2 つの部分に分かれています。最初にデカルト積が生成され、その後、後続の ON フィルタリング条件に従ってフィルタリングされ、同じ値を生成します。 2 つのテーブルのレコード。 </p><p><img src="https://img.php.cn/upload/image/218/908/717/1631965602120211.png" title="1631965602120211.png" alt="1 (2).png"/></p><p>ON の後の等号演算子 (=) に加えて、より大きい (<code>></code>)、より小さいなどの他の演算子も使用できます。より大きい ( <code><</code>) 演算子と等しくない ( <code><></code>) 演算子を使用して結合条件を形成します。 </p><p>最後のものは OUTER JOIN で、いくつかのフィルタリング条件に従ってテーブル間のデータを照合できます。INNER JOIN とは異なり、OUTER JOIN によって追加された予約テーブルには一致するデータが見つかりません。MySQL は LEFT OUTER JOIN をサポートしています。 RIGHT OUTER JOIN は、記述時に OUTER を省略できます。 </p><p>次は LEFT JOIN の図です。LEFT JOIN は、左側のテーブル (table1) のすべてのレコードと、右側のテーブル (table2) の一致するレコードを返します。 </p><p><img src="https://img.php.cn/upload/image/297/131/340/1631965607545060.png" title="1631965607545060.png" alt="MySQL 学習における結合クエリとセット操作の簡単な分析"/></p><p>次は、RIGHT JOIN の図です。RIGHT JOIN は、右側のテーブル (table2) のすべてのレコードと、左側のテーブル (table1) の一致するレコードを返します。 </p><p><img src="https://img.php.cn/upload/image/383/403/226/163196561126076MySQL 学習における結合クエリとセット操作の簡単な分析" title="163196561126076MySQL 学習における結合クエリとセット操作の簡単な分析" alt="MySQL 学習における結合クエリとセット操作の簡単な分析"/></p><h2><strong>Set 操作</strong></h2><p>MySQL には UNION 演算子があり、2 つ以上の SELECT 結果セットを結合し、削除するために使用されます。 SELECT ステートメント間で行を重複します。これを使用する場合は、次の基本ルールに従ってください: </p><ul><li>すべての <code>SELECT</code> ステートメントに表示される列の数と順序は同じである必要があります。 </li><li>列も同じデータ型である必要があります。 </li></ul><p>次のテーブルがある場合、</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 (
id INT PRIMARY KEY
);
INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);</pre><div class="contentsignin">ログイン後にコピー</div></div><p>次の SQL を実行します</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">SELECT id FROM t1
UNION
SELECT id FROM t2;</pre><div class="contentsignin">ログイン後にコピー</div></div><p>最終結果は次のようになります。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
4 rows in set (0.00 sec)</pre><div class="contentsignin">ログイン後にコピー</div></div><p>UNION ステートメントはデフォルトで結果行セットから重複データを削除しますが、UNION ALL を使用して重複レコードを取得できます。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">SELECT id FROM t1
UNION ALL
SELECT id FROM t2;</pre><div class="contentsignin">ログイン後にコピー</div></div><p>結果は次のとおりです</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 2 |
| 3 |
| 4 |
+----+
6 rows in set (0.00 sec)</pre><div class="contentsignin">ログイン後にコピー</div></div><p>UNION と JOIN の基本的な違いは、UNION は結果セットを水平方向に結合するのに対し、JOIN ステートメントは結果セットを垂直方向に結合することです。 </p>
<p><img src="https://img.php.cn/upload/image/410/849/290/1631965648883159.png" title="1631965648883159.png" alt="MySQL 学習における結合クエリとセット操作の簡単な分析"></p>
<blockquote>#元のアドレス: https://juejin.cn/post/7001772087534682143<p></p>著者: i Tingfeng Passing Night<p> </p>プログラミング関連の知識について詳しくは、</blockquote>プログラミング ビデオ<p>をご覧ください。 ! <a href="https://www.php.cn/course.html" target="_blank" textvalue="编程视频"></a></p>
以上がMySQL 学習における結合クエリとセット操作の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。