- 1.笛卡尔积:
假设两个表做笛卡尔积,就相当于A表中的每一行信息和B表中的所有信息进行映射,所形成的的新表,其他操作就是在此新表基础上进行查询操作。
sql92: select * from A,B
A表 B表
新表(A表和B表进行笛卡尔积):
- 2.等值连接:
在上图的新表上做筛选,选出符合条件的
sql92:select * from A,B where A.学号=B.学号
- 3.非等值连接:
sql92:select * from B,B mm where B.成绩>mm.成绩
- 4.自连接:自己和自己做笛卡尔积
sql92:select * from A mm,A tt where mm.姓名=tt.姓名
- 5.外连接:
利用此语句 select * from A,B where A.成绩=B.成绩 将两个表等值连接了起来,次结果会将A表或B表中不符合的行删除。此时保留不合格的次行信息,便有了左外连接和右外连接和全连接
定义:
左(外)连接,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
右外连接:与左外连接实现效果相反
全连接:实现左外和右外连接的效果。
现在对表A和表B进行某些字段的增加和数据的更新,得到新的表A和表B
表A 表B
现在进行等值连接: select * from A,B where A.成绩=B.成绩 order by A.学号,B.学号 ,得到:次结果出现了上面红字(5.外连接此处红字)说明的情况
左外连接:sql92:select * from A,B where A.成绩=B.成绩(+) order by A.学号 (+在那边就显示那边的null)
右外连接:sql92 : select * from A,B where A.成绩(+)=B.成绩 order by A.学号
接着把上面的内容用sql99表示:
- 1.笛卡尔积:
select * from A cross join B
- 2.对sql92等值连接的变形
- 2.1 自然连接:
自动使用多表中所有相同字段(不但值相同,名字也要相同)进行连接(两表中有几个相同,就连接合并几个相同字段)
select * from A natural join B
- 2.2 使用using关键字对指定字段进行链接查询,但是必须是同名字段
select * from A inner join B using(学号)
- 2.3 使用on关键字可以直接在其后书写链接条件,没有限制 ,想和那个字段连接都可以。
select * from A inner join B on A.成绩>B.学号
select * from A inner join B on A.成绩=B.学号
- 3.外连接
- 3.1 左外链接 left outer join
select * from A left outer join B on A.成绩=B.成绩 order by A.学号
- 3.2右外链接 right outer join
- 3.3全外链接 full outer join
select * from A full outer join B on A.成绩=B.成绩 order by A.学号