关系型数据库基础之:联接

2014-11-24 09:55:28 · 作者: · 浏览: 0
关系型 数据库基础之:联接
关系型数据库基础之:组合查询
http://www.2cto.com/database/201304/202710. html
8、联接:
简单联接笛卡尔积:
笛卡尔积是将不少于两组的数据不管是否相关联都以乘积的方式强行组合在一起。
使用联接:
联接分为内联接、外连接和自联接。
内联接:
只显示几张表相关联的数据,相互匹配则组合在一起,不匹配则抛开,如果其中一项为空的话则不匹配抛开。
select room.roomid,class.time
from room inner join class
on room.roomid=class.roomid
order by room.roomid;
其中inner通常省略不写,也可以将inner join换成逗号代替,如果换成逗号代替那么条件就不能用on了,要用where。
外联接:
外联接分为左外联接和右外联接,解决了内联接没有匹配的问题。
左外联接(left join 或 left outer join):
左边的表全部显示,没有对应的数据就用null来代替。
select * from table1 left outer join table2
on table1.column1 = table2.column2;
如果将左边和右边的位置交换,显示的结果只是顺序交叉内容不变。
右外联接(right join 或 right outer join):
select * from table1 right outer join table2
on table1.column1 = table2.column2;
用法和左外联接一样 ,只不过作用是全部显示右边的数据。
自联接:
自联接顾名思义就是自己联接自己,不过要表自身有主外键关系才能进行自联接。
select pk_id, f_name, fk_agent_id FROM t_agent;
显示每个代理商的名称及其上一级代理商名称:
select a2.f_name 子级代理, a1.f_name 父级代理
from t_agent a1 right join t_agent a2
on a1.pk_id=a2.fk_agent_id;