日期:2014-05-16  浏览次数:20492 次

详解数据库的各种联接

        在查询数据库的时候,如果涉及到两个或多个数据表中检索数据,那么你就要用到联接查询了。

        联接分为:内联接、外联接、交叉联接。而外联接又分为:左向外联接、右向外联接、完整外联接。

        下面是我建的两个用来测试的表,student和class。

        


内联接


        联接的默认联接就是内连接,我个人感觉这个联接也是最简单的一种联接。用于返回两个表中所有匹配的行。

        我对默认是这样理解的,用的最多。事实也是这样的,就目前为止,我用的是最多的就是内联接。

        内联接的格式:数据表1 inner join 数据表2 on 联接表达式。

        例如选出学号为001的学生,要求显示SID,SNAME,CNAME

        select sid,sname,cname from student inner join class on classid=cid(其中inner可以去掉)

        但是,在之前我一直是这样写的:select sid,sname,cname from student,class where classid=cid

        

        注:推荐数据库字段命名是每个字段前加上表明的缩写(3-5个字符)


外连接之左外联接


        格式为:数据表1 left join 数据表2 on 联接表达式    或者   数据表1 left outer join 数据表2 on 联接表达式

        左外联接返回集中包括数据表1中所有的记录,而不仅仅是链接字段所匹配的记录。如果数据表1的某条记录在数据表2中没有匹配的记录,则结果集相应的有关数据表2的所有字段将为空值。

        为实现此例子,我们将003的的classid改为4。

        update student set classid='4' where sid='003'

        然后我们进行左外联接的查询

        select sid,sname,cname from student left outer join class on classid=cid(outer可以省略)

        下面两图分别是内联接和左外联接的查询结果:

        


外联接之右外联接


        格式为:数据表1 right join 数据表2 on 联接表达式    或者   数据表1 right outer join 数据表2 on 联接表达式

        和左外联接类似。结果集中包含数据表2中所有的记录,而不仅仅是链接字段所匹配的记录。如果数据表2的某条记录在数据表1中没有匹配的记录,则结果集相应的有关数据表1的所有字段将为空值。

        如果将左联接中的student和class的位置换一下,然后将left改成right,那么结果将一样,所以关于这个例子我就不在这写了。


外联接之全联接