数据库查询之(Ⅲ)连接查询

(以下的例子中操作的数据表均来自下表)

相关概念说明:

连接查询:一个查询需要对多个表进行操作

表之间的连接:连接查询的结构集或结果表

连接字段:数据表之间的联系是通过表的字段值来体现的

连接操作的目的:从多个表中查询数据

表的连接查询的两种方法

方法一:表之间满足一定条件的行进行连接时,From子句指明进行连接的表名,Where子句指明连接的列名及其连接条件

方法二:利用关键字Join进行连接,当Join关键词放于From子句中时,应有关键词On与之对应,以表明连接的条件

Join关键字的相关说明:

内部连接:

1:查询“刘伟”老师所讲授的课程,要求列出教师号、教师姓名、课程号。

方法一:select T.TNo,TN,CNo from T,TCwhere (T.TNo=TC.TNo and T.TN=’刘伟’)

方法二:select T.TNo,TN,CNo from Tinner join TC on T.TNo=TC.TNo where TN=’刘伟

(注1:引用列名TNo时要加上表名前缀,这是因为两个表中的列名相同,必须用表名前缀来确切说明所指列属于哪个表,以避免二义性)

(当需要连接的表比较多时,一般用方法一较容易一些)

2:(3个表连接查询)查询所有选课学生的学号、姓名、选课名称及成绩

Select S.SNo,SN,CN,Score from S,C,SC whereS.SNo=SC.SNo and SC.CNo=C.CNo

3:(4个表的连接查询)查询每门课程的课程号、任课教师姓名及其职务、选课人数

Select CN,Prof,Count(SC.SNo) from C,T,TC,SC whereT.TNo=TC.TNo and C.CNo=TC.CNo and SC.CNo=C.CNo group by SC.CNo

(当一个查询需要对同一个表操作两次时需要给这个表取两个不同的别名)

例:查询所有比“刘伟”老师工资高的教师的姓名、工资和刘伟的工资。

方法一:select X.TN,X.Sal as Sal_a,Y.Sal as Sal_b fromT as X, T as Ywhere X.Sal>Y.Sal and Y.TN=’刘伟

方法二:select X.TN,X.Sal as Sal_a,Y.Sal as Sal_b fromT as X inner join T as Y on X.Sal>Y.Sal and Y.TN=’刘伟

方法三:select X.TN,X.Sal as Sal_a,Y.Sal as Sal_b from(select TN,Sal from T)as X inner join (select Sal from T wher e TN=’刘伟’)as Y on X.Sal>Y.Sal

外部连接:

在外部连接中,参与连接的表有主从之分,以主表的每行数据去匹配从表的数据列,符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中。

例:查询所有学生的学号、姓名、选课名称及成绩(没有选课的同学的选课信息显示为空)

Select S.SNo,SN,CN,Score from Sleft outer join SC on S.SNo=SC.SNoleft outer join C on C.CNo=SC.CNo

(注:自己最好在Sql Server中新建查询,一个个实验)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值