内连接、全链接、左外连接、右外连接、交叉连接

今天看到Hibernate的HQL中有关连接查询的知识, 又翻了翻萨师煊老师的《数据库系统概论》参考了几篇博客,总结下关于数据库连接(join)的知识点。

表a
id name
1 张三
2 李四
3 王五
表b
id score foreign_id
1 95 1
2 65 1
3 79 2
4 88 4

 

内连接(自然连接)

就是简单的根据两个表的连接查询,如连接a、b查询有成绩的学生信息:

select a.name,  b.score from   a   inner   join   b   on   a.id=foreign_id      

(inner是可以省略的)

内连接、全链接、左外连接、右外连接、交叉连接

当然可以进行 < > = 的判断

外连接

全连接(full join)   
全联接结果为左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择属性为null否则显示数据

 select   a.name, b.score   from   a   full   join   b     on   a.id=b.foreign_id  

mysql是没有全连接的使用union结合左连接与有连接实现

内连接、全链接、左外连接、右外连接、交叉连接

左外链接 (left join)
左外联接的结果包括左表的所有行,如果右表没有匹配值则为null

select   a.name, b.score   from   a   left   join   b     on   a.id=b.foreign_id  

内连接、全链接、左外连接、右外连接、交叉连接

右外链接 (right join)
右外联接和左外链接相反,结果包含右表的所有行,如果左表没有匹配值则为null

select   a.name, b.score   from   a   right   join   b     on   a.id=b.foreign_id  

内连接、全链接、左外连接、右外连接、交叉连接

 

交叉连接

交叉连接的结果是左表与右表所有的行的组合,如左表x行,右表y行,则结果为x*y行。交叉连接又称笛卡尔积。

select *  from a, b

or

select *  from a cross join  b

内连接、全链接、左外连接、右外连接、交叉连接