联表查询–内连接、左外连接、右外连接、完全外连接

1.说明:联表查询可实现两个或多个表之间的连接查询,一般用于有主外键关系表之间的连查询,这里拿两个有主外键关系的表来举例说明联表查询的使用。

student表:其中classid为外键

联表查询 怎么强制索引 如何联表查询_内连接


class表:

联表查询 怎么强制索引 如何联表查询_联表查询 怎么强制索引_02

2.内连接查询—查询出学生的所有信息

SELECT * FROM student a,class b WHERE a.classid = b.classid;

代码说明:其中a和b是给表取得别名,方便后边调用表中的属性。

查询结果如下:

联表查询 怎么强制索引 如何联表查询_数据库_03


内连接查询特点:只查询满足条件的结果

3.左外连接查询—查询出学生的所有信息
标准sql 92语法:LEFT JOIN 表名 ON 条件

SELECT * FROM student a LEFT JOIN class b ON a.classid = b.classid;

Oracle(+)语法:左表字段 = 右表字段(+)

SELECT * FROM student a,class b WHERE a.classid = b.classid (+);

代码说明: Oracle(+)语法仅Oracle数据库支持,两种查询结果一样

查询结果如下:

联表查询 怎么强制索引 如何联表查询_外连接_04


左外连接特点: 从查询结果可以看出,查询出来的不仅是满足条件的结果,还包含左表student表中所有不满足条件的结果,class表的数据以null显示。

4.右外连接查询:—查询出学生的所有信息
标准sql 92语法:RIGHT JOIN 表名 ON 条件

SELECT * FROM student a RIGHT JOIN class b ON a.classid = b.classid;

Oracle(+)语法:左表字段(+) = 右表字段

SELECT * FROM student a,class b WHERE a.classid(+) = b.classid ;

代码说明: Oracle(+)语法仅Oracle数据库支持,两种查询结果一样,注意Oracle(+)语法中(+)的位置,左外连接时在 = 的右边,右外连接时在 = 的左边。

查询结果如下:

联表查询 怎么强制索引 如何联表查询_内连接_05


右外连接特点: 从结果可以看出,右外连接查询结果不仅包含满足条件的结果,还包含右表class中所有不满足条件的结果,左表中的数据以null显示。

5.完全外连接 —查询出学生的所有信息

SELECT * FROM student a FULL OUTER JOIN class b ON a.classid = b.classid;

代码说明: MySQL数据库不支持完全外连接,Oracle数据库,其他数据库没有研究过,学习其他数据库的可以试试。
完全外连接特点: 查询结果不仅包含满足条件的结果,还包含左表中不满足条件的所有结果,右表中的数据以null显示,也包含右表中所有不满足条件的结果,左表数据以null显示。