日期: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,那么结果将一样,所以关于这个例子我就不在这写了。
外联接之全联接