SQL学习笔记--多表查询

来源:互联网 发布:倪妮井柏然 知乎 编辑:程序博客网 时间:2024/06/16 21:36

温故而知新。
多表查询(内连接、外连接和交叉连接)
1)左外连:
sql:select * from table1 left join table2 on table1.条件列名=table2.条件列名
*注:table1表信息全部显示,符合条件的 table2 都会与 table1 对齐,不符合条件的 table2 不会显示,没有数据的用null自动填充。
2)右外连:
sql:select * from table1 right join table2 on table1.条件列名=table2.条件列名
注:与左外连基本相同,对齐的表为 table2。
3)完全外部连接:
sql:select * from table1 full join table2 on table1.条件列名=table2.条件列名
*注:根据限制条件,显示出所有符合条件的列,当某一个表中没有匹配的行时,则另一个表的列包含空值,如果有,就显示出所有信息。
4)内连接:
sql:select * from table1 join table2 on table1.条件列名=table2.条件列名
<=> select t1.* ,t2.* from table1 t1,table2 t2 where t1.条件列名=t2.条件列名
<=> select * from table1 cross join table2 where table1.条件列名=table2.条件列名( cross join 后面不能够用 on , 只能用 where )
5)交叉连接(完全)
sql:select * from table1 cross join table2;
<=> select * from table1,table2;
注:笛卡尔积。。。。。明白就好。。。。。
*6)join 与 outer join
join:
保留所有符合 on 条件的行,查询结果行数量不会大于被 join 的表;
outer join:
保留 join 的结果,并根据 left、right 和 full 保留其中一个表内的不符合 on 条件的结果航,这种结果行仅有一个表内的结果,另一半用 null 填充。
注:6)是借鉴的别人的回答,但是不是特别的明朗,在自己测试的时候确实没看出太大差别(emp 与 dept),给自己挖个坑,回头再填上;

*注:其实连接语句,个人认为就是看需求,然后在进行对应的操作,操作两遍之后比较容易理解,但是感觉用好比较难,如果碰到比较复杂的例子可能就有些难以处理。先总结一些简单的,有难的例子在攻破。左右外连才是最常用的吧,然后内连感觉也差不蛮多。还是要碰到问题才能更深入的理解,先写下吧。

注释:*为不确定自我见解,有错误请毫不留情直接指出。

原创粉丝点击