现在的位置: 首页 > 综合 > 正文

数据查询(2)-高级查询

2012年11月10日 ⁄ 综合 ⁄ 共 2130字 ⁄ 字号 评论关闭
 

•        基本条件查询

比较运算符:>,>=,<,<=,=,!=

between a and b,in(a,b,c),not exists,is null,like ‘%_’,or,and, any,all

          把某一字段中内容在特定范围内的记录查询出来

SELECT StudentID, Score FROM SCore WHERE Score BETWEEN 60 AND 80

          把某一字段中内容与所列出的查询内容列表匹配的记录查询出来

SELECT SName AS 学员姓名,SAddress As 地址 FROM Students WHERE SAddress IN ('北京','广州','上海')

 

•         模糊查询

        SELECT * from Students where SName like ‘_A%’

        SELECT * from Students where SName like ‘%S%’

               

•         集合函数

         -sum,count,max,min,avg

        SELECT AVG(SCore) AS 平均成绩, MAX (Score) AS 最高分,

        MIN (Score) AS 最低分 From Score WHERE Score >=60

 

•        分组查询—GROUP BY

group by 字段名 having 组过滤条件

SELECT CourseID, AVG(Score) AS 课程平均成绩

FROM Score

GROUP BY CourseID

 

分组查询多列分组

SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩

FROM Score

GROUP BY StudentID,CourseID

 

分组查询—HAVING

SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩

FROM Score

GROUP BY StudentID,CourseID

HAVING COUNT(Score)>1

 

分组查询对比

1.  WHERE子句从数据源中去掉不符合其搜索条件的数据

2.  GROUP BY子句搜集数据行到各个组中,统计函数为各个组计算统计值

3.      HAVING子句去掉不符合其组搜索条件的各组数据行

理解一下下面的查询语句:

SELECT       部门编号, COUNT(*)

FROM          员工信息表

WHERE       工资 >= 2000

GROUP BY 部门编号

HAVING       COUNT(*) > 1

 

•         子查询

SELECT * FROM BOOKS B WHERE B.PRICE IN (

SELECT MAX(PRICE) FROM  BOOKS);

 

        并集(Union)和交集(Intersect)

 (SELECT *

FROM BOOKS B, BORROW C

WHERE B.BNO=C.BNO

AND B.BNAME = '计算方法' INTERSECT

SELECT *

FROM BOOKS B, BORROW C

WHERE B.BNO=C.BNO AND B.BNAME != '计算方法习题集')

ORDER BY C.CNO DESC;

 

•         多表联接查询分类

多表联接查询内联接-1

SELECT Students.SName, Score.CourseID, Score.Score

FROM     Students,Score

WHERE  Students.SCode = Score.StudentID

 

多表联接查询内联接-2

SELECT         S.SName,C.CourseID,C.Score

From             Students AS S

INNER JOIN Score AS C

ON         C.StudentID = S.Scode

 

多表联接查询三表联接

SELECT

S.SName AS 姓名, CS.CourseName AS 课程, C.Score AS 成绩

FROM Students AS S

INNER JOIN Score AS C ON (S.SCode = C.StudentID)

INNER JOIN Course AS CS ON (CS.CourseID = C.CourseID)

 

多表联接查询左外联接

SELECT S.SName,C.CourseID,C.Score

From             Students AS S

LEFT JOIN     Score AS C

ON         C.StudentID = S.Scode

 

多表联接查询右外联接(和左外连接相反)

SELECT Titles.Title_id, Titles.Title, Publishers.Pub_name

FROM titles

RIGHT OUTER JOIN Publishers

ON Titles.Pub_id = Publishers.Pub_id

 

案例分析1要求

          在数据库表中,数据行位置并不重要,但是一个单位中要根据奇数行和偶数行的数据来汇总,在这个汇总的基础上再得到一个数值,因此,要查询数据库表的奇数行和偶数行的总数

         

抱歉!评论已关闭.