MySQL(10)-多表查询

Posted H_Cisco

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL(10)-多表查询相关的知识,希望对你有一定的参考价值。

 连接查询:

 内连接查询:

 

 外连接查询

 

 多表连接:

 使用表的别名:

 Select * from cjgl.student as stuinfo

 命名列

 在多表联接中,如果表拥有相同的字段名,则在指定字段时,必须包含表名。

 组合多个表中的数据

 联接概述

 从多个表中选择指定的字段

 表1 inner join 表2 on 联接条件

 查询两个或多个表并生成单个结果集

 基于表的主键和外键,指定联接的条件

 如果表中有组合主键,联接表时,必须有on引用该键

 联接的表必须有共同的某些字段并且数据类型兼容

 使用内联接

 通过比较被联接的表所拥有的字段,把多个表联接起来

 可以使用where来限制结果集要返回的记录

 联接条件不能使用空值

 使用外联接

 外连接可以从两个表中返回符合联接条件的记录,同时也将返回左右两边不符合联接条件的记录

 不满足联接条件的记录,

 左联接可以显示第一个表中的所有记录

 右联接可以显示第二个表的所有的记录

 使用交叉联接

 联接两个以上的表

 自联接

 合并多个结果集

 

 推荐操作

 

 

 

 

 

 

 

 

1.查询学号,姓名,成绩,使用内连接

select sc.sno,sname,score from student inner join sc on student.sno=sc.sno

2.查询学号,姓名,课程名,成绩,使用内连接;再查询指定学号的如1006的上述信息

SELECT student.sno,sname,course.cname,score from student inner JOIN sc on student.sno=sc.sno inner join course on sc.cno=course.cno

SELECT student.sno,sname,course.cname,score from student inner JOIN sc on student.sno=sc.sno inner join course on sc.cno=course.cno WHERE student.sno=1006

3.查询学号,姓名,课程名,成绩,使用通用格式

select student.sno,sname,cname,score from student,sc,course where student.sno=sc.sno and sc.cno=course.cno

select student.sno,sname,cname,score from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and sc.sno=1006

4.查询课程号,课程名,教师名;分别使用左外和右外连接

select cno,cname,tname from course left outer join teacher on course.tno=teacher.tno

select cno,cname,tname from course right outer join teacher on course.tno=teacher.tno

5.查询所有同学的学号、姓名、选课数、总成绩

SELECT student.sno,student.sname,count(sc.sno),sum(sc.score) from student inner join sc on student.sno=sc.sno GROUP BY sno

select sc.sno,sname,count(cno),sum(score) from student,sc where student.sno=sc.sno GROUP BY sno

6. 查询学过“李闵”老师课的同学的学号、姓名

select student.sno,sname from student,sc,course,teacher where student.sno=sc.sno and sc.cno=course.cno and course.tno=teacher.tno and teacher.tname='李闵'

7. 查询没有学过“李闵”老师课的同学的学号、姓名

select sno,sname from student where sno not in (select sno from sc where cno in (select cno from course where tno in(SELECT tno from teacher where tname='李闵')))

8. 查询学过“叶平”老师所教的所有课的同学的学号、姓名;

select student.sno,sname from student,sc,course,teacher where student.sno=sc.sno and sc.cno=course.cno and course.tno=teacher.tno and teacher.tname='叶平'

9. 查询总分排名在前四名的学生所有学号、姓名、所学各科成绩、总分等信息

SELECT student.sno,student.sname,GROUP_CONCAT(sc.score),sum(sc.score) from student inner join sc on student.sno=sc.sno GROUP BY sno ORDER BY sum(sc.score) desc LIMIT 4

 

 

以上是关于MySQL(10)-多表查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL(10)-多表查询

mysql多表查询例子

MySql-多表查询

mysql 数据操作 多表查询 目录

MySQL-多表查询练习

MySQL练习-主外键多表查询