ホームページ  >  記事  >  データベース  >  Mysql での結合操作の例を共有する

Mysql での結合操作の例を共有する

小云云
小云云オリジナル
2018-01-24 13:50:431307ブラウズ

この記事では主に Mysql の結合操作に関する情報を紹介します。必要な方は参考にしていただければ幸いです。

結合の種類

1.内部結合: 2 つのテーブルのフィールドに結合関係があり、その結合関係に一致するレコードを結合してレコード セットを形成する結合。

2.外部結合: 外部左結合と外部右結合に分かれます。

ケースの背景

create table java (name varchar(255));
insert into java values ('java1'),('java2'),('blue'); 
create table mysql (name varchar(255));
insert into mysql values ('mysql1'),('mysql2'),('blue');

内部結合

select * from java,mysql where java.name=mysql.name;
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 つのステートメントはすべて内部結合であり、返される結果はすべて

+------+------+
| name | name |
+------+------+
| blue | blue |
+------+------+
  • table_reference エントリ内のすべてのカンマは内部結合と同等とみなされます

  • デフォルトすべての JOIN は INNER JOIN です

  • CROSS JOIN は文法的に INNER JOIN と同等です

  • STRAIGHT_JOIN は JOIN と同じです。 1 つの違いを除いて、左側のテーブルは右側のテーブルよりも前に読み取られます。 STRAIGH_JOIN は、結合オプティマイザーがテーブルを間違った順序で並べ替える状況で使用できます。

内部結合の構文は次のとおりです:

join_table:
 table_reference [INNER | CROSS] JOIN table_factor [join_condition]
 | table_reference STRAIGHT_JOIN table_factor
 | table_reference STRAIGHT_JOIN table_factor ON condition

外部結合

左結合

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name;

結果は

+-------+------+
| name | name |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| blue | blue |
+-------+------+

です。したがって、上記の結果から、java1とjava1の名前が一致していることがわかります。 Java テーブルの 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;

返される結果は次のとおりです

+------+--------+
| name | name |
+------+--------+
| NULL | mysql1 |
| NULL | mysql2 |
| blue | blue |
+------+--------+

右結合と左結合の結果は似ていますが、今回は mysql テーブルがすべての結果セットを保存する点が異なります。

外部結合の構文

join_table:| table_reference LEFT [OUTER] JOIN table_reference join_condition
 | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor
 | table_reference RIGHT [OUTER] JOIN table_reference join_condition
 | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor

USING (column_list) 句

は、両方のテーブルに同時に存在する必要がある一連の列に名前を付けるために使用されます

SELECT java.*,mysql.* FROM java LEFT JOIN mysql USING (name);

返される結果

+-------+------+
| name | name |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| blue | blue |
+-------+------+

結合の操作の順序

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)

結合の順序に対する括弧の影響

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;
--应该这么写
SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id;

ここで括弧は非常に重要なので、今後このようなクエリを作成するときは、少なくともこれにより多くのエラーを避けることができます。

関連する推奨事項:

JavaScript での分割と結合の違いの詳細な例

MySQL での Join の使用例の共有

SQL で JOIN USING を使用して JOIN ON を簡略化する方法の例

以上がMysql での結合操作の例を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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