注:本文以Oracle数据库为例,所用sql标准为Oracle专用,而不是SQL99规则!
首先我们创建两个新表tb_stu和tb_course(本文只是为了讲述本质,因此表格结构和数据从简)
- tb_stu(学生表)
- tb_course(选课表)
可以看到tb_stu表中ID为3的学生在tb_course中没有对应的数据,tb_course表中stu_id为4的学生也不存在于tb_stu中。
内连接
内连接查询:只能查询出符合条件的记录,只会显示两个表中都有的数据,系统会自动忽略两个表中对应不起来的数据。
可以看到,数据只显示了id为1、2的学生基本信息和选课信息,学生3和4的信息并没有显示,所以内连接只显示所有有关联的数据。
外连接
外连接查询:既能查询出符合条件的记录,也能根据一方强行将另一个方查询出来
在SQL99规则中,我们利用inner join、left join、right join来表示内连接、左外连接和右外连接,而在Oracle中我们利用(+)表示外连接。在讲左、右连接之前,首先清楚一个主副表的概念,即当两个表做外连接时,一个表为主表,一个表为副表,主表需要全部查询出来,副表需要(+)。
我们可以看到,结果显示的数据中包含左表(即tb_stu)中的所有数据,右表中多的数据没有显示,少的数据显示为NULL(图中没有显示为NULL是因为我在定义表结构时设置为不能为空,)
我们可以看到,结果显示的数据中包含右表中所有的数据,而左表中多的数据没有显示。
注:本文中的左右表为等号的左右。