[MySQL--09] テーブルの内部接続と外部接続

[MySQL-09] テーブルの内部接続と外部接続


テーブル結合は内部結合と外部結合に分けられます

1.1 内部結合

内部結合は、実際には、where 句を使用して、2 つのテーブルによって形成されたデカルト積をフィルター処理することです。以前に使用したクエリはすべて内部結合であり、開発プロセスで最も頻繁に使用される結合クエリでもあります。

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

備考: 上記のものは基本的に内部接続です。

  • SMITH の名と部署名を表示します
-- 用前面的写法
select ename, dname from emp, dept where emp.deptno=dept.deptno and 
ename='SMITH';

mysql> select ename, dname from emp, dept where emp.deptno=dept.deptno and 
    -> ename='SMITH';
+-------+----------+
| ename | dname    |
+-------+----------+
| SMITH | RESEARCH |
+-------+----------+
1 row in set (0.00 sec)


-- 用标准的内连接写法
select ename, dname from emp inner join dept on emp.deptno=dept.deptno and 
ename='SMITH';


mysql> select ename, dname from emp inner join dept on emp.deptno=dept.deptno and 
    -> ename='SMITH';
+-------+----------+
| ename | dname    |
+-------+----------+
| SMITH | RESEARCH |
+-------+----------+
1 row in set (0.00 sec)

1.2 外部結合

外部結合は左外部結合と右外部結合に分かれます

1.2.1 左外部結合

クエリが結合されると、左側のテーブルが完全に表示されます。これを左外部結合と言います。

文法:select 字段名 from 表1 left join 表2 on 连接条件

  • まず、最初に 2 つのテスト テーブルを作成し、データを挿入します。
create table stu (id int, name varchar(30)); -- 学生表

insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');

create table exam (id int, grade int); -- 成绩表

insert into exam values(1, 56),(2,76),(11, 8);
mysql> select * from stu;
+------+------+
| id   | name |
+------+------+
|    1 | jack |
|    2 | tom  |
|    3 | kity |
|    4 | nono |
+------+------+
4 rows in set (0.00 sec)

mysql> select * from exam;
+------+-------+
| id   | grade |
+------+-------+
|    1 |    56 |
|    2 |    76 |
|   11 |     8 |
+------+-------+
3 rows in set (0.00 sec)
  • すべての生徒の成績を照会します。生徒に成績がない場合は、生徒の個人情報も表示されます。

左のテーブルと右のテーブルが一致しなかった場合は、左のテーブルのデータも表示されます

mysql> select * from stu left join exam on stu.id=exam.id;
+------+------+------+-------+
| id   | name | id   | grade |
+------+------+------+-------+
|    1 | jack |    1 |    56 |
|    2 | tom  |    2 |    76 |
|    3 | kity | NULL |  NULL |
|    4 | nono | NULL |  NULL |
+------+------+------+-------+
4 rows in set (0.00 sec)

1.2.2 右外部結合

クエリが結合されると、右側のテーブルが完全に表示されます。これを右外部結合と言います。

文法:select 字段名 from 表1 right join 表2 on 连接条件

  • stuクエリとテーブルを組み合わせてexamすべての成績を表示します。その学年に該当する生徒がいない場合でも、表示する必要があります。
mysql> select * from stu right join exam on stu.id=exam.id;
+------+------+------+-------+
| id   | name | id   | grade |
+------+------+------+-------+
|    1 | jack |    1 |    56 |
|    2 | tom  |    2 |    76 |
| NULL | NULL |   11 |     8 |
+------+------+------+-------+

2. よくある質問

2.1 テーブルとテーブルはどのように関連していますか?

テーブル間には、内部結合と外部結合という 2 つの一般的な関連付け方法が使用されます。次の例は、MySQLこれら 2 つの結合方法を示しています。

内部結合: 内部結合は INNER JOIN によって実装され、2 つのテーブルの結合条件を満たすデータが返され、条件を満たさないデータはクエリされません。

外部結合: 外部結合は OUTER JOIN によって実装され、結合条件を満たす 2 つのテーブルのデータを返し、結合条件を満たさないデータを返します。外部接続には、左外部接続 (LEFT OUTER JOIN) と右外部接続 (RIGHT OUTER JOIN) の 2 つの形式があります。

  • 左外部結合: 左結合 (LEFT JOIN) とも呼ばれ、結合条件を満たす左側のテーブルのすべてのレコードと右側のテーブルのレコードが返されます。

  • 右外部結合: 右結合 (RIGHT JOIN) とも呼ばれ、右側のテーブルのすべてのレコードと、結合条件を満たす左側のテーブルのレコードが返されます。

さらに、もう 1 つの一般的な接続方法として、等価接続があります。この種の接続は、WHERE 句の条件を通じて 2 つのテーブルを接続するもので、その実際の効果は内部接続と同等です。意味を明確にするために、通常は等価結合の代わりに内部結合を使用することをお勧めします。

上記は、テーブル間の関連付けの実装の文法的な説明です。テーブル間の関係の観点から見ると、より一般的な関連付けは、1 対多の関連付け、多対多の関連付け、および自己関連付けです。

  • 1 対多の関連付け: この形式の関連付けが最も一般的で、一般に 2 つのテーブルは主従関係を持ち、主テーブルの主キーと従テーブルの外部キーを関連付けることでこの関連付けが実現されます。さらに、テーブルの観点から見ると、それらは多対 1 の関係にあるため、多対 1 の関係については繰り返しません。

  • 多対多の関連付け: この関連付けはより複雑で、2 つのテーブルに多対多の関係がある場合、この関連付けを実現するための接続としてテーブル間に中間テーブルが必要になります。この中間テーブルには、2 つのテーブルの主キーをそれぞれ格納する 2 つの列を設計する必要があります。したがって、これら 2 つのテーブルのいずれかが中間テーブルと 1 対多の関係を形成し、この中間テーブル上で多対多の関係が確立されます。

  • セルフアソシエーション: セルフアソシエーションとは、テーブルがそれ自体に関連付けられることを意味します。テーブル名の競合を避けるために、関連付けの際にエイリアスを介してテーブルを 2 つのテーブルとして扱う必要があります。一般に、テーブル内のデータが階層 (ツリー状) を持っている場合、自己関連付けを使用して複数レベルのデータを一度にクエリできます。

2.2 外部接続についてのあなたの理解について教えてください。

外部結合は OUTER JOIN によって実装され、結合条件を満たす 2 つのテーブルのデータを返し、結合条件を満たさないデータを返します。外部結合には、左外部結合 (LEFT OUTER JOIN) と右外部結合 (RIGHT OUTER JOIN) の 2 つの一般的な形式があります。

  • 左外部結合: 左結合 (LEFT JOIN) とも呼ばれ、結合条件を満たす左側のテーブルのすべてのレコードと右側のテーブルのレコードが返されます。

  • 右外部結合: 右結合 (RIGHT JOIN) とも呼ばれ、右側のテーブルのすべてのレコードと、結合条件を満たす左側のテーブルのレコードが返されます。

実際、外部結合には別の形式、完全外部結合 (FULL OUTER JOIN) がありますが、MySQL はこの形式をサポートしていません。

2.3 データベースの左側の接続と右側の接続について話しますか?

外部結合は OUTER JOIN によって実装され、結合条件を満たす 2 つのテーブルのデータを返し、結合条件を満たさないデータを返します。外部結合には、左外部結合 (LEFT OUTER JOIN) と右外部結合 (RIGHT OUTER JOIN) の 2 つの一般的な形式があります。

  • 左外部結合: 左結合 (LEFT JOIN) とも呼ばれ、結合条件を満たす左側のテーブルのすべてのレコードと右側のテーブルのレコードが返されます。

  • 右外部結合: 右結合 (RIGHT JOIN) とも呼ばれ、右側のテーブルのすべてのレコードと、結合条件を満たす左側のテーブルのレコードが返されます。
    外部接続には、左外部接続 (LEFT OUTER JOIN) と右外部接続 (RIGHT OUTER JOIN) の 2 つの形式があります。

  • 左外部結合: 左結合 (LEFT JOIN) とも呼ばれ、結合条件を満たす左側のテーブルのすべてのレコードと右側のテーブルのレコードが返されます。

  • 右外部結合: 右結合 (RIGHT JOIN) とも呼ばれ、右側のテーブルのすべてのレコードと、結合条件を満たす左側のテーブルのレコードが返されます。

おすすめ

転載: blog.csdn.net/qq_58325487/article/details/130691727