1.JOIN的区分
JOIN分为
INNER JOIN内连接
CROSS JOIN交叉连接
OUTER JOIN外连接,其中外连接OUTER JOIN又分为
- 左连接LEFT (OUTER) JOIN
- 右连接RIGHT (OUTER) JOIN
- 全连接FULL (OUTER) JOIN
2.基本概念
1. INNER JOIN
内连接,显示两个表中有联系的所有数据,也叫等值连接
2. LEFT JOIN
左连接,以左表为参照,显示所有数据,左表中的某行在右表中没有匹配行,则以NULL显示
3. RIGHT JOIN
右连接,显示右表所有数据,如果右表的某行在左表中没有匹配行,则将为左表返回NULL
4. FULL JOIN
全外连接,返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值,如果表之间有匹配行,则整个结果集行包含基表的数据值
5. CROSS JOIN
交叉连接,两个表做笛卡尔积,得到的结果集的行数是两个表的行数的乘积
3.案例
这边有两个表,我们一一来进行测试
Course表
和Mark表
1. INNER JOIN
两个表中有联系的都会被显示出来
2.LEFT JOIN
左表显示全部数据,右表和左表进行匹配,匹配不上的右表返回NULL
3.RIGHT JOIN
右连接其实就是跟左连接结果相反,因为普通的SQLite不支持右连接和全外连接,但是好像6月25日更新的SQLite 3.39.0 版本可以支持右连接和全外连接
4.CROSS JOIN
结果是两个表做笛卡尔积,那什么是笛卡尔积呢?
令A和B是任意两个集合,若序偶(带顺序的集合)的第一个成员是A的元素,第二个成员是B的元素,所有这样的序偶集合,称为集合A和B的笛卡尔乘积或直积,记做A X B
可以看到, Course表去掉表头共2行,Mark表去掉表头共4行,结果就是8行
FROM子句中使用逗号间隔连接的表也可以做到类似的效果,实际上,这两种表达式是等价的
感谢观看!!!!
以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!