ホームページ  >  記事  >  データベース  >  Mysqlの結合操作の詳細な説明

Mysqlの結合操作の詳細な説明

怪我咯
怪我咯オリジナル
2017-07-05 11:11:021816ブラウズ

この記事では、主に 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 |
+-------+------+

です。つまり、上記の結果から、名前が記録されているためであることがわかります。 Java テーブルの java1 と java2 は一致しません。MySQL テーブルには対応する名前があるため、空になっていますが、java のすべての列には java1 および java2 レコードがあり、mysql テーブルのすべての列は NULL です。残りの青色のレコードは、Java テーブルと mysql テーブルの間の内部接続の結果です。 LEFT JOIN の ON または USING 部分に右のテーブルに一致するレコードがない場合、すべての列が NULL に設定された行が右のテーブルに使用されます。テーブルに対応する部分が

other

テーブルにない場合、このメソッドを使用してこのテーブル内のレコードを検索できます:

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;

ここで括弧は非常に重要なので、将来そのような

クエリ

を書くときは、さらに括弧を書くのを忘れてください。少なくともこうすることで多くの間違いを避けることができます

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

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