文档详情

第一章Oracle数据库基础.ppt

发布:2016-12-18约1.66万字共106页下载文档
文本预览下载声明
分组查询—HAVING SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩 FROM Score GROUP BY StudentID,CourseID HAVING COUNT(Score) 1 分组查询—对比 WHERE GROUP BY HAVING WHERE子句: 从数据源中去掉不符合其搜索条件的数据 GROUP BY子句: 搜集数据行到各个组中,统计函数为各个组计算统计值 HAVING子句: 去掉不符合其组搜索条件的各组数据行 分组查询—思考 SELECT 部门编号, COUNT(*) FROM 员工信息表 WHERE 工资 = 2000 GROUP BY 部门编号 HAVING COUNT(*) 1 思考:分析以下T-SQL的含义 查询有多个员工的工资不低于2000 的部门编号 去除重复数据 Distinct 去除重复的行 删除结果集中内容完全相同的一项 例如: select distinct(列名),列名… from 表名 多表联接查询—问题 学员内部测试成绩查询的每次显示的都是学员的编号信息, 因为该表中只存储了学员的编号; 实际上最好显示学员的姓名,而姓名存储在学员信息表; 如何同时从这两个表中取得数据? 多表联接查询—分类 内联接(INNER JOIN) 外联接 ——左外联接(LEFT [OUTER] JOIN) ——右外联接(RIGHT [OUTER] JOIN) ——完整联接(FULL [OUTER] JOIN) 交叉联接(CROSS JOIN) SELECT S.SName,C.CourseID,C.Score From Score AS C INNER JOIN Students AS S ON C.StudentID = S.SCode Score StudentsID CourseID Score 1 2 2 3 001 001 002 002 97 89 67 76 3 003 81 猜一猜:这样写,返回的查询结果是一样的吗? SELECT S.SName,C.CourseID,C.Score From Students AS S INNER JOIN Score AS C ON C.StudentID = S.SCode 再猜一猜:以下返回多少行? SELECT S.SName,C.CourseID,C.Score From Students AS S INNER JOIN Score AS C ON C.StudentID S.SCode 多表联结查询—内联接-1 Stundents SName 梅超风 陈玄风 陆乘风 曲灵风 SCode 1 2 3 4 查询结果 SName 梅超风 陈玄风 陈玄风 陆乘风 CourseID Score 001 001 002 002 97 89 67 76 陆乘风 003 81 多表联接查询—内联接-2 SELECT Students.SName, Score.CourseID, Score.Score FROM Students,Score WHERE Students.SCode = Score.StudentID 多表联接查询—三表联联接 SELECT S.SName AS 姓名, CS.CourseName AS 课程, C.Score AS 成绩 FROM Students S INNER JOIN Score C ON (S.SCode = C.StudentID) INNER JOIN Course CS ON (CS.CourseID = C.CourseID) Score StudentsID CourseID Score 1 2 2 3 001 001 002 002 97 89 67 76 3 003 81 多表联结查询—左外联接 Stundents SName 梅超风 陈玄风 陆乘风 曲灵风 SCode 1 2 3 4 查询结果 SName 梅超风 陈玄风 陈玄风 陆乘风 CourseID Score 001 001 002 002 97 89 67 76 陆乘风 003 81 曲灵风 SELECT S.SName,C.CourseID,C.Score From Students AS S LEFT JOIN Score AS C ON C.StudentID = S.SCode 猜一猜:这样写,返回的查询结果是一样的吗? SELECT S.SName,C.CourseID,C.Score From Score AS C LEFT JOIN
显示全部
相似文档