Join

join 操作分为 joinleft joinright joincross join,分别叫内联接、左外联接、右外联接、交叉联接。

内联接使用来匹配两张表中相关联的记录。

左外联接除了匹配两张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用 NULL 表示。

右外联接和左外联接一样,只不过匹配的是右表中剩余的记录。

根据表名出现在 Join 的左右位置关系来判定左表右表。

交叉联接很少用到,没查资料的时候,都没想起来这个。 cross join 又称为笛卡尔乘积,实际上是把两个表乘起来。

Teacher
+------------------+
| ID | TeacherName | 
+----|-------------+
| 1  |    Mary     |
| 2  |    Jim      |
-------------------+

Student
+------------------------------+
| ID | TeacherID | StudentName | 
+----|-----------|-------------+            
| 1  |     1     |    Vineeth  |
| 2  |     1     |    Unni     |
+------------------------------+

如果需要找到学校中的所有教师和学生,那么交叉联接就用得上了。

SELECT Teacher.TchrId, Teacher.TeacherName, Student.StudentName 
FROM Teacher
CROSS JOIN Student;
+---------------------------------------+
| TeacherID | TeacherName | StudentName | 
+-----------|-------------|-------------+            
|    2      |     Jim     |    Vineeth  |
|    2      |     Jim     |    Unni     |
|    1      |     Mary    |    Vineeth  |
|    1      |     Mary    |    Unni     |
+---------------------------------------+

得吐槽一下,我要是没脑残,肯定 SELECT * from Teacher, Student 查全表。

交叉联接不能使用 on 关键字,但可以使用 where 子句定义连接条件。

powered by Gitbook该文件修订时间: 2020-04-10 10:05:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""