联表查询–内连接、左外连接、右外连接、完全外连接
1.说明:联表查询可实现两个或多个表之间的连接查询,一般用于有主外键关系表之间的连查询,这里拿两个有主外键关系的表来举例说明联表查询的使用。
student表:其中classid为外键
class表:
2.内连接查询—查询出学生的所有信息
SELECT * FROM student a,class b WHERE a.classid = b.classid;
代码说明:其中a和b是给表取得别名,方便后边调用表中的属性。
查询结果如下:
内连接查询特点:只查询满足条件的结果
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数据库支持,两种查询结果一样
查询结果如下:
左外连接特点: 从查询结果可以看出,查询出来的不仅是满足条件的结果,还包含左表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(+)语法中(+)的位置,左外连接时在 = 的右边,右外连接时在 = 的左边。
查询结果如下:
右外连接特点: 从结果可以看出,右外连接查询结果不仅包含满足条件的结果,还包含右表class中所有不满足条件的结果,左表中的数据以null显示。
5.完全外连接 —查询出学生的所有信息
SELECT * FROM student a FULL OUTER JOIN class b ON a.classid = b.classid;
代码说明: MySQL数据库不支持完全外连接,Oracle数据库,其他数据库没有研究过,学习其他数据库的可以试试。
完全外连接特点: 查询结果不仅包含满足条件的结果,还包含左表中不满足条件的所有结果,右表中的数据以null显示,也包含右表中所有不满足条件的结果,左表数据以null显示。