精通数据库SQL——多表查询

一、表的基本连接

采用JOIN关键字建立连接

Select column 

From join_table

Join_type join_table

On (join_condition)

注:

·join_table指出参与连接操作的表名。

·join_type 为连接类型,可分为四种:

自然连接join_type的形式为natural join;

内连接join_type的形式为inner join;

外连接又分为左外连接和右外连接。左外连接join_type的形式为left outer join或left join;右外连接join_type的形式为right outer join或right join;

交叉连接中join_type的形式为cross join。

On(join_condition)子句指出连接条件,由被连接表中的列和比较运算符、逻辑运算符等构成。

自连接

例:

Select distinct s1.sname,s1.dname,s1.cno,s1.mark

From student as s1,student as s2

Where s1.sno=s2.sno and s2.mark<60

Order by s1.sname

使用natural join进行查询

例:

Select sname,dname,cno,tname

From student natural join teacher

内连接

例:

Select sname,s.dname,s.cno,tname

From student as s inner join teacher as t on s.cno=t.cno and s.dname<>t.dname

Order by sname

左外连接

例:

Select s.sno,sname,s.cno,cname,ctest,mark

From student as s left out join course as c on s.cno=c.cno

Order by sname

注:在SQL Server中,可以在WHERE子句中使用“*=”符号实现左外连接。

例:

Select s.sno,sname,s.cno,cname,ctest,mark

From student as s,course as c

Where s.cno*=c.cno

Order by sname

注:在Oracle数据库系统中,只需将“*=”替换成“+=”可以得到相同的结果。

右外连接

例:

Select s.sno,sname,s.cno,cname,ctest,mark

From student as s right out join course as c on s.cno=c.cno

Order by sname

在SQL Server中,可以在WHERE子句中使用“=*”符号实现右外连接。

例:

Select s.sno,sname,s.cno,cname,ctest,mark

From student as s,course as c

Where s.cno=*c.cno

Order by sname

全外连接

Select s.sno,sname,s.cno,cname,ctest,mark

From student as s full out join course as c on s.cno=c.cno

Order by sname

交叉连接

Select * from table1,table2

Select * from table1 cross join table2

上面两个表达式完全是等价的,在使用CROSS JOIN关键字交叉连接表时,因为生成的是两个表的笛卡尔积,因而不能使用on关键字,只能在where子句中定义搜索条件。

二、集合查询

union运算符

Union并操作

intersect运算符

Intersect交操作

except运算符

Except差操作

注意:

·参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同。

·集合操作自动去除重复元组,使用集合运算符进行操作时,如果要保留重复元组的话,必须在集合运算符后使用all关键字。

union join连接表

使用union join进行多表连接,它并不对表中的数据进行任何匹配处理,而只是把来自一个源表中的行与另一个源表中的行联合起来,生成的结果表中包括第一个表中的所有行和列和另一个表中的所有行和列。缺少的属性值用NULL表示。SQL Server不支持union join。

             

        

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值