多表连接查询笔记之一 -- 内连接

来源:互联网 发布:android经典项目源码 编辑:程序博客网 时间:2024/05/22 09:02

多表连接查询:
如果查询同时涉及到两个或两个以上的表,则称为连接查询。连接查询时关系数据库中最主要的查询,
主要包括内连接,左外连接,右外连接,全外连接和交叉连接等。
内连接
 内连接是一种最常用的连接类型。使用内连接时,如果两个表的相关字段满足连接查询,则从这
 两个表中提取出数据组合成新的记录。

 ANSI连接方式的内连接语法格式:from 表1[inner] join 表2 on <连接条件>
 连接条件一般格式为:<表名1.列名>   <比较运算符>  <表名2.列名>

 注意,连接条件中的连接字段必须是可比的,即必须死语义相同的列
 
 说明:在进行多表连接查询时,在select子句中出现的查询列是来自被连接表的全部列,而在where子句
 能够涉及的列也是被连接表中的列。因此,根据要查询的列以及数据的选择条件涉及到的列可以确定
 这些列所在的表,从而确定了进行连接查询的表。
 注意:为表指定而来别名后,在查询语句中的其他地方,所有用到表名的地方都必须要使用别名,而
 不能使用原表名。

内连接查询例子:
1)查询学生及选课的详细信息
SELECT * FROM student INNER JOIN sc ON student.`sno` = sc.`sno`;

2)查询计算机系学生的选课情况,要求列出学生的名字,所选课的课程号和成绩
SELECT sname,cno,grade FROM student JOIN sc ON student.`sno` = sc.`sno` WHERE sdept = '计算机系';

3)查询"计算机系"选修了"java语言"的学生信息,要求列出学生的姓名和考试成绩(涉及到了三张表,需要将三张表关联起来)
SELECT sname,grade FROM student JOIN sc ON student.`sno` = sc.`sno` JOIN course ON course.`cno` = sc.`cno` WHERE sdept = '计算机系' AND cname = 'java语言';

4)查询所有选修了java语言课程的学生情况,列出所有学生姓名和所在的系
SELECT sname,sdept FROM student JOIN sc ON student.`sno` = sc.`sno` JOIN course ON course.`cno` = sc.`cno` WHERE cname = 'java语言';


5)统计每个系的考试平均成绩(有分组的多表连接查询,使用GROUP BY进行分组)
SELECT sdept,AVG(grade) FROM student JOIN sc ON student.`sno` = sc.`sno` GROUP BY sdept;

有分组和进行条件查询的多表拦截查询,统计计算机系每个学生的选课门数、平均成绩、最高成绩和最低成绩。
select s.sno,count(*) as total,avg(grage) as avgGrade,from student s join sc on s.sno = sc.sno
where dept = '计算机系' group by s.sno

0 0
原创粉丝点击