当前位置:网站首页 > 技术博客 > 正文

内连接查询可分为哪三种类型



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

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

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自身连接的简单介绍!!!

 

  • 上一篇: flexget教程
  • 下一篇: 黑客工具包2021
  • 版权声明


    相关文章:

  • flexget教程2026-02-09 14:01:03
  • c语言简单加密2026-02-09 14:01:03
  • 有些进程只包含一个线程对吗2026-02-09 14:01:03
  • 数据库一对多是什么意思2026-02-09 14:01:03
  • scanf函数格式2026-02-09 14:01:03
  • 黑客工具包20212026-02-09 14:01:03
  • 嵌入式sql是如何处理并执行的2026-02-09 14:01:03
  • 爬虫工具app2026-02-09 14:01:03
  • java怎么写爬虫软件2026-02-09 14:01:03
  • abac和rbac的关系2026-02-09 14:01:03