数据库高级查询的使用 201409005

一、连接查询

将多个表格列出来,不是SQL国际标准方法,但适用于每个表,是表格中列的扩展,表格横着铺开.

1.连接查询的方法:

1)形成笛卡尔积

select * from Info


select * from nation

笛卡尔积:

select info.code,info.name,info.sex,nation.name as nation,info.birthday

from INFO,nation --显示info表中的code,name,sex列,并且将nation表中的name列替换info表中的nation列(用"as"或空格改列名),再显示info表中的birthday列.

nationg列会对code列一一对应,所以原本4行的记录对应四次nation即变成了16行.

where Nation.Code=INFO.Nation     -- nation列显示code列的值时,即不会重复一一对应.

PS:因两个表格中列名有重复的,所以要在列名前写表明,如表格之间无列明重复者可直接写列名.

2)筛选

内连接:表名 join 表名 on  --查询的列如为NULL值,筛选时则忽略不计,亦不显示;如需将NULL值一起统计可使用外连接.

select * from INFO

select * from nation

select * from INFO join nation on INFO.nation = nation.code
where nation.name=‘汉族‘ --显示民族为汉族的值.用where也可操作:

select * from INFO,nation where info.nation = nation.code and nation.name=‘汉族‘ --查询结果与上同.

外连接:

A.左连接 --以左边为主

select * from INFO left join nation on INFO.nation = nation.code --左边表格INFO的数据必须全部显示,即使左边表有NULL值也会显示.

B.右连接 --以右边为主

select * from INFO right join nation on INFO.nation = nation.code --右边边表格nation的数据必须全部显示,即使右边表有NULL值也会显示.

C.全连接 --左右两边全部显示

select * from INFO full join nation on INFO.nation = nation.code--左右两边的表格全部显示
二、联合查询
表格中行的扩展
select Name from info --显示info表中的Name列

union --联合,同类型列名才可使用union.
select Name from Family -- 显示员工及家属两表格的姓名为一列
三、子查询(嵌套查询)

select * from INFO

select * from Work where InfoCode=
(
select code from Info where Name=‘胡军‘
)  --查询有关胡军的所有简历

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。