MySQL连接查询—自身连接

若一个查询同时涉及两个表及以上的表,则称之为连接查询。

连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件查询等

1.等值于非等值连接查询

连接查询的where子句中用来连接两个表的条件成为连接条件或连接谓词,一般格式为

表名1.列名1 {比较运算符} 表名2.列名2

当连接运算符为“=”时,称之为等值连接。使用其他运算符称之为非等值连接。

连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但是名字不必相同

示例:

学生表:student

课程表:course

学生课程关系表:SC

例1.查询每个学生及其选修课程的情况

select student.*, sc.*
from student,sc
where student.sno = sc.sno;

关系数据库管理系统执行连接操作的可能是:首先在student表中找到第一个元祖,然后从头开始扫描SC表,找到他们共同的属性Sno相同的元祖,然后拼接起来,然后从student表的第二个元祖开始,以此类推,直到扫完整个student表

如果我们在SC表Sno上建立了索引的话,就不用每次都对SC表进行全表扫描了,而是根据Sno值通过索引找到对应的SC元祖,用索引查询SC中满足条件的元组一般会比全表扫描快

若在等值连接中把目标中重复的属性列去掉则为自然连接

例2:对例1用自然连接完成

select student.Sno, Sname,Ssex, Sage,Sdept,Cno,Grade
from student,sc
where student.sno = sc.sno;

去掉Student表和SC表共同的属性列Sno,其中一个,等值连接就变成了自然连接,上述SQL保留了student的Sno

 

自身连接

连接操作不仅可以在两个表之间进行,也可以是一个表与自己进行连接,称为表的自身连接。

例3:查询每一门课的间接先修课

Cno:课程号   Cname:课程名   Cpno:先行课  Ccredit:学分

分析: 比如说课程号Cno为1的课程的先行课的课程号为5,课程号为5的课程为C#,所以mysql对应的先行课为C#,以此类推

select c.Cno 课程号,c.Cname 课程名, c.Cpno 先行课程号 , s.Cname 先行课程名, s.Cpno 间接先行课程号
from Course c,course s 
where c.Cpno = s.Cno;

自身连接相当于将自身的表再拷贝一份,重命名然后将要求的查询条件添加到where子句中,即可查出结果

 

上述就是MySQL自身连接的简单介绍!!!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值