一、连接查询
将多个表格列出来,不是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.全连接 --左右两边全部显示
union --联合,同类型列名才可使用union.
select Name from Family -- 显示员工及家属两表格的姓名为一列
select * from INFO
select * from Work where InfoCode=
(
select code from Info where Name=‘胡军‘
) --查询有关胡军的所有简历