【数据库】数据库表间连接

连接的概念

何时要使用到多表操作

(1)嵌套查询可能用到。

如查出选了d01课程的学生数据:学号,姓名,性别。 这些数据来自于学生表,但要根据成绩表中查哪些选了D01课程的学生的学号,涉及了两个表操作。

Select 学号,姓名,性别 from 学生表 where 学号 in(select 学号 from 成绩表 where 课程号=’d01’)

SQL嵌套IN查询不能超过3层。

(2)数据查询结果(不是条件)来自于多个表。

如,查出选了D01课程的学生数据:学号,姓名,性别,课程号,成绩值。

第一种情况数据来源单一表学生表,虽然使用了成绩表,但结果没有成绩表的数据,成绩表的数据仅仅作为主查询的条件。可以使用连接也可以使用嵌套,把子查询的结果作为主查询的条件。此时,并非同时操作两个表,先操作的成绩表,把子查询结果列出为作常量集合(成绩表已经关闭),再打开学生表提取数据。虽然使用到了两个表,但是一前一后打开使用的.故,查询结果只能来自于学生表,不能出现成绩表的数据。

第二种情况数据来源于成绩表和学生表同时提供,这两个是并列操作,必须使用连接.

连接的概念

在逻辑上把两个及以上的物理表或视图,在列向上合并(不是记录合并,是列属性集合合并),在逻辑上把两个表的查询结果当成一个视图。

连接时,一般需要两表关键字有对应关系,如上两个表都有学号列,否则可能结果是笛卡尔积。(如所有学生把所有课堂一个不漏地选一次)

如何修改?实现连接查询

Select 学生表.学号,姓名,性别,课程号,成绩 
  from 学生表,成绩表 where 学生表.学号=成绩表.学号 

两表按学号关键字对应匹配生成新记录。把学生表每个人按学号值去成绩表匹配相同学号,应对生成一个学生一门课数据。如果该生选了五门课,要匹配成功五次学号,结果中就该生的五条记录.

各种链接操作

内连接

a inner join b 要求两表能对应的记录才出现的结果中,不对应的记录被忽略掉。如学生表中x同学没有选课,则他在成绩表中无记录,内连接查询时,结果无x同学数据。

上例其实是内连接的另一种早期的写法

 Select 学生表.学号,姓名,性别,课程号,成绩 
  from 学生表,成绩表 where 学生表.学号=成绩表.学号

标准化内连接:

Select 学生表.学号,姓名,性别,课程号,成绩 
  from 学生表 inner join 成绩表 
  on 学生表.学号=成绩表.学号

以前子句也可以使用

select a.学号,a.姓名,b.课程号,成绩 
 from 学生表 a inner join 成绩表 b on a.学号=b.学号
 where 课程号 in (101,102,103) order 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhugenmi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值