大学数据库知识点
- 格式:doc
- 大小:92.50 KB
- 文档页数:8
第六章 数据库检索 简单查询 SELECT语句的基本语法格式: SELECT 查询项列表 [INTO 新表名] FROM 数据源表列表 [WHERE 条件表达式] [ORDER BY 排序依据 排序方式] [GROUP BY 分组依据 [HAVING 条件表达式]] 一. 基本查询 1. 格式:SELECT 查询项列表 FROM 数据源表 2. 说明 (1) 查询项列表中各选项用逗号(,)隔开; (2) 查询项中可以包含:*、DISTINCT、TOP n、AS 别名的使用; 3. 例:在学生管理数据库系统(student)中,有学生信息表(student)、学生成绩表(stgrade)、课程信息表(course),具体结构如下显示,完成该数据库系统中的查询。 STUDENT(Sno,Sname,Sex,Birth,Addr,Dept),分别表示学号、姓名、性别、出生日期、地址、专业; STGRADE(Sno,Cno,Grade,Score),分别表示学号、课程号、成绩、所得学分; COURSE(Cno,Cname,Term,Point,Tname),分别表示课程号、课程名称、基本学分、任课教师姓名。 (1) 从student表中查询学生的学号,姓名,性别,出生日期信息。 SELECT sno,sname,sex,birth FROM student (2) 从student表中查询所有学生的所有信息。 SELECT * FROM student (*代表表中的所有字段) (3) 从student表中查询专业信息 SELECT dept FROM student (结果中会出现重复值,即学号有重复) 对比:SELECT DISTINCT dept FROM student (DISTINCT用于去掉查询结果中的重复值) (4) 从stgrade表中查询选修了课程的学生学号。(同上小题) SELECT sno FROM stgrade 对比:SELECT DISTINCT sno FROM stgrade (5) 从student表中查询前10个学生的学号,姓名,性别信息。(或前10%个学生的信息) SELECT TOP 10 sno,sname,sex FROM student SELECT TOP 10 PERCENT sno,sname,sex FROM student TOP n用于限制在结果中只显示前面的n条记录;TOP n PERCENT用于限制在结果中只显示前面的n%条记录。 (6) 从student表中查询学生的学号,姓名,性别,年龄信息。 提示:年龄可通过birth字段的计算得到,age=YEAR(GETDATE())-YEAR(birth) SELECT sno,sname,sex,YEAR(GETDATE())-YEAR(birth) FROM student SELECT sno,sname,sex,YEAR(GETDATE())-YEAR(birth) AS age FROM student SELECT sno,sname,sex,age=YEAR(GETDATE())-YEAR(birth) FROM student 其中:为结果集内的列指定别名有3中写法,如下: ①、select 列名(表达式) 列别名 from 数据源 ②、select 列名(表达式)AS 列别名 from 数据源 ③、select列别名=列名(表达式) from 数据源 二. 带条件的查询:WHERE子句的应用 1. 格式:SELECT 查询项列表 FROM 数据源表 WHERE 条件表达式 2. 说明: (1) 查询中希望得到表中满足特定条件的一些记录时,用户可以在查询语句中使用WHERE子句 (2) 常用的查询条件及运算符如下: 查询条件 运算符 意义 例
比较 =,>,<,>=(!<),<=(!>),<>(!=),或NOT+上述运算符 比较大小 成绩>50
确定范围 [NOT] BETWEEN „ AND „ 判断值是否在范围中 成绩 BETWEEN 60 AND 100 确定集合 IN(列表) / NOT IN(列表) 判断值是否为列表中的值 专业 IN(‘物流’,‘ 财会’) 字符匹配 LIKE / NOT LIKE 判断值是否与指定的字符通配格式相符 姓名 LIKE ‘王%’ 专业 NOT LIKE ‘_数据%’
空值 IS NULL / NOT IS NULL 判断值是否为空 成绩 IS NULL
多重条件 AND,OR,NOT 用于多重条件判断 姓名 LIKE ‘王%’AND专业 IN(‘物流’,‘ 财会’) 3. 例:数据库表同上 (1) 从student表中查询所有男生记录。 SELECT * FROM student WHERE sex=´男´ (2) 从student表中查询所有非“计算机”专业的学生信息。 SELECT * FROM student WHERE dept<>´计算机´ (3) 从student表中查询1985年之后(包括1985年)出生的学生信息。 SELECT * FROM student WHERE birth>=´1985/1/1´ SELECT * FROM student WHERE YEAR(birth)>=1985 (4) 从student表中查询年龄在18至20岁之间的学生学号、姓名、性别、专业信息。 SELECT sno,sname,sex,dept FROM student WHERE YEAR(GETDATE())-YEAR(birth) BETWEEN 18 AND 20 (5) 从student表中查询所有姓“王”的学生学号、姓名、性别、专业信息。 SELECT sno,sname,sex,dept FROM student WHERE sname LIKE ´王%´ SELECT sno,sname,sex,dept FROM student WHERE sname=´王%´ (6) 从student表中查询所有姓名中的第二个字不是“小”的学生信息。 SELECT * FROM student WHERE sname NOT LIKE ´_小%´ (7) 从student表中查询专业为“数学”,“英语”和“计算机”专业的学生信息。 SELECT * FROM student WHERE dept IN (´数学´,´英语´, ´计算机´) 或:SELECT * FROM student WHERE dept=´数学´ OR dept=´英语´ OR dept=´计算机´ (8) 从student表中查询除“数学”,“英语”和“计算机”以外专业的学生信息。 SELECT * FROM student WHERE dept NOT IN (´数学´,´英语´, ´计算机´) 或:SELECT * FROM student WHERE dept<>´数学´ AND dept<>´英语´ AND dept<>´计算机´ (9) 从stgrade表中查询课程号为“C01”,成绩合格的记录信息。 SELECT * FROM stgrade WHERE cno=´C01´ AND grade>=60 (10) 从stgrade表中查询所有成绩为空的记录。 SELECT * FROM stgrade WHERE grade IS NULL SELECT * FROM stgrade WHERE grade = NULL 注意:如果要查询的字符串本身含有%或_ ,需要使用ESCAPE’’对通配符进行转义。例如: SELECT CNO,CNAME FROM COURSE WHERE CNAME like ‘VB/_6.0’ESCAPE’/’ 三. 对查询结果排序――ORDER BY子句的应用 1. 格式:SELECT 查询项列表 FROM 数据源表 [WHERE 条件表达式] ORDER BY 排序字段 排序方式 2. 说明: (3) 排序方式默认为“升序”;其中ASC表示升序排列,DESC表示降序排列 (4) 若需按多个字段排序,则多个字段间用“,”隔开,具体可参见例题。 3. 举例:数据库同上 (1) 从student表中查询所有学生的学号、姓名、性别、出生日期和专业,并将结果按出生日期升序显示(即按年龄从大到小排序)。 SELECT sno,sname,sex,birth,dept FROM student ORDER BY birth (2) 从stgrade表中查询选修了课程号为“C01”课程的学生的学号和成绩,并将结果按成绩降序显示(即按成绩从高到低排序)。 SELECT sno,grade FROM stgrade WHERE cno=´c01´ ORDER BY grade DESC (3) 从student表中查询所有学生的信息,并将结果按专业的降序排列,专业相同的学生的学号升序排列。 SELECT * FROM student ORDER BY dept DESC,sno ASC /* 其中ASC可省略 */ (4) 从stgrade表中查询所有信息,并将结果按课程号的降序排列,课程号相同的按成绩由高到低排列(降序)。 SELECT * FROM stgrade ORDER BY cno desc,grade DESC 四、 对数据进行统计――聚合函数的应用 1. 聚合函数及功能: (1) COUNT(*):统计记录的个数 (2) COUNT(列名):统计一列中非空值的个数 (3) SUM(列名):统计一列值的总和(该列必须是数值型) (4) AVG(列名):统计一列值的平均值(该列必须是数值型) (5) MAX(列名):统计一列值的最大值 (6) MIN(列名):统计一列值的最小值 2. 说明:允许使用(DISTINCT|ALL 列名),其中DISTINCT表示去掉指定列中的重复值再进行统计;ALL表示不取消重复值,默认是ALL。 3. 例: (1) 从student表中查询学生的总人数。 SELECT COUNT(*) FROM student (2) 从stgrade表中查询选修了课程号为“C01”课程的学生人数。 SELECT COUNT(*) FROM stgrade WHERE cno=´c01´ (3) 从stgrade表中查询成绩不为空的记录个数。 SELECT COUNT(grade) FROM stgrade SELECT COUNT(*) FROM stgrade WHERE grade IS NOT null (4) 从student表中查询学生专业个数。 SELECT COUNT(DISTINCT DEPT) FROM student (5) 从stgrade表中查询成绩的平均值、总分、最高分及最低分。 SELECT AVG(grade),SUM(grade),MAX(grade),MIN(grade) FROM stgrade 五、 对结果进行分组――GROUP BY子句的应用