数据库与应用 下载本文

JOINN

3.联接类型:

? 内联接:使用JOIN或INNER JOIN关键字表示。内联接只返回符合条件即两表按照公共字段对应相等的记录,则上两表联接返回2条记录,按照公共字段【编号】1=1,2=2 【例】按年级提取各专业的分班情况 SELECT a.专业名称, b.年级, b.班级名称

FROM 专业信息表 a INNER JOIN 班级信息表 b ON a.专业代码 = b.专业

合计:950条记录,左表和右表对应的字段都没有空值,总数统计方法如下:

SELECT COUNT(*) AS 总记录数

FROM 专业信息表 a INNER JOIN 班级信息表 b ON a.专业代码 = b.专业

? 左联接:使用LEFT JOIN 或 LEFT OUTER JOIN关键字表示。左联接返回联接中左表的所有记录,而只返回右表中符合条件即两表按照公共字段对应相等的记录。如果左表的某条记录在右表中没有匹配记录,则为空值。则上两表联接返回3条记录:1=1,2=2,3-空 【例】查看所有专业的分班情况 SELECT a.专业名称, b.班级名称

FROM 专业信息表 a LEFT OUTER JOIN 班级信息表 b ON a.专业代码 = b.专业

合计:986条记录,右表对应的字段有空值,按升序可查看,统计总数方法如下:

SELECT COUNT(*) AS 总记录数

FROM 专业信息表 a LEFT OUTER JOIN 班级信息表 b ON a.专业代码 = b.专业

? 右联接:使用RIGHT JOIN或RIGHT OUTER JOIN关键字表示。右联接是左联接的反向联接,返回右表的所有记录,如果右表的某记录在左表中没有匹配记录,则为空值,则上两

第 29 页

表联接返回2条记录。1=1,2=2

【例】提取所有的班级所对应的专业信息 SELECT a.专业名称, b.班级名称

FROM 专业信息表 a RIGHT OUTER JOIN 班级信息表 b ON a.专业代码 = b.专业 合计:52150

合计:998条记录,左表对应的字段有空值,按升序可查看,统计总数方法如下: SELECT COUNT(*) AS总记录数

FROM 专业信息表 a RIGHT OUTER JOIN 班级信息表 b ON a.专业代码 = b.专业 ? 完整联接:使用FULL JOIN或FULL OUTER JOIN关键字表示。完整外部联接返回左表和右表中的所有记录,当某记录在另一个表中没有匹配记录时,则为空值,则上两表联接返回3条记录。1-1 ,2=2,3--空

【例】提取所有的班级和所有专业的对应情况 SELECT a.专业名称, b.班级名称

FROM 专业信息表 a FULL OUTER JOIN 班级信息表 b ON a.专业代码 = b.专业

合计:1034条记录,左表和右表对应的字段都有空值出现,分别按升序可查看,统计总数方法如下:

SELECT COUNT(*) AS 总记录数

FROM 专业信息表 a FULL OUTER JOIN 班级信息表 b ON a.专业代码 = b.专业 ? 交叉联接:使用CROSS JOIN关键字表示。交叉联接返回左表中的所有记录,左表中的每一记录与右表中的所有记录组合。在使用交叉联接时,不能使用ON指定筛选条件。 【例】将专业和班级信息表交叉 SELECT a.专业名称, b.班级名称

FROM 专业信息表 a CROSS JOIN 班级信息表 b 合计:124750

【作业】 第八 1.成绩表:提交本人选课结果:学号、课程编号、课程名称、成绩

2. 教师信息表:查询和本人名字相同(姓除外)的教师信息:编号、姓名、部门、职称 SELECT 教师编号, 教师姓名, 部门名称, 职称名称 FROM 教师信息表

第 30 页

WHERE (RTRIM(教师姓名) LIKE '%厚仁')

四、数据汇总 :在某种条件一定的情况下做什么 序号 1 2 3 4 5 6 7 8 9 10 11 函数名 AVG(字段名) COUNT(字段名) MAX(字段名) MIN(字段名) SUM(字段名) ROUND(字段名,n) Left(字段名,n) Right(字段名,n) Now() Like Rtrim(字段名) Ltrin(字段名) 说明 求指定字段的平均值。 求组记录的个数,返回int类型整数。 求指定字段的最大值。 求指定字段的最小值。 返回表达式中所有字段值的和。 对指定字段进行四舍五入,保留n位小数 从字符型字段值的左侧截取n个字符 从字符型字段值的右侧截取n个字符 返回系统的时间 模糊查询 去掉指定字段值的右侧空格 去掉指定字段值的左侧空格 【例】求成绩表中的总平均值 SELECT AVG(成绩) AS 平均成绩 FROM 成绩表 值为:72

【例】求成绩表中课程编号为46607的平均值 SELECT AVG(成绩) AS 平均成绩 FROM 成绩表

WHERE (课程编号 = N'46607') 值为:49

【例】对平均成绩保留2位小数(针对成绩为实数型字段值) SELECT ROUND(AVG(成绩), 2) AS 平均成绩 FROM 成绩表1 值为:72.72

【例】对平均成绩保留1位小数(针对成绩为实数型字段值) SELECT ROUND(AVG(成绩), 1) AS 平均成绩 FROM 成绩表1

第 31 页

值为:72.7

【例】统计成绩表中选课总人次 SELECT COUNT(*) AS 人次 FROM 成绩表 值为:221245

【例】统计成绩为零的人次 SELECT COUNT(*) AS 人次 FROM 成绩表 WHERE (成绩 = 0) 值为:10237

【例】统计成绩为零的人数 SELECT COUNT(*) AS 总人数

FROM (SELECT DISTINCT 学号 FROM 成绩表 WHERE (成绩 = 0)) DERIVEDTBL 值为:4420

【例】统计成绩表中选课总人数 SELECT COUNT(*) AS 总人数

FROM (SELECT DISTINCT 学号 FROM 成绩表) DERIVEDTBL 值为:25287

【例】统计成绩表中最高成绩 SELECT MAX(成绩) AS 最大成绩 FROM [成绩表] 值为:100

【例】统计成绩表中最小成绩min SELECT MIN(成绩) AS 最小成绩 FROM [成绩表] 值为:0

【例】求某位同学的总成绩 SELECT SUM(成绩) AS 成绩和 FROM [成绩表]

WHERE (学号 = N'20081080') 值为:699

【例】在教师信息表中查找姓张的老师 SELECT *

第 32 页