数据库单表查询
数据库单表查询:
**1. 选择表中的若干列
- 选择表中的若干元组
- 对查询结果排序
- 使用集函数
对查询结果分组**
- 1.选择表中若干列
例1、查询全体学生的详细记录
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;
或
SELECT *
FROM Student;
例二、查询选修了课程的学号
SELECT DISTINCT Sno
FROM SC;
这里使用DISTINCT是为了消除重复列,因为一个学生可能选修多门课程,这样在查询时结果中会出现重复的学号 - 2.选择表中若干组
例三、查询计算机系年龄在20岁以下的学生姓名
SELECT Sname
FROM Student
WHERE Sdept= ‘CS’ AND Sage<20;
字符串匹配,详细内容在写在最后补充部分
例四、查询以”DB_“开头,且倒数第3个字符为 i的课程的详细情况
SELECT *
FROM Course
WHERE Cname LIKE ‘DB_%i_ _’ ESCAPE ’ \ ‘; - 3.对查询结果排序
使用ORDER BY子句
可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
ASC:排序列为空值的元组最后显示
DESC:排序列为空值的元组最先显示
例五、查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列
SELECT Sno,Grade
FROM SC
WHERE Cno= ’ 3 ’
ORDER BY Grade DESC;
结果如下:
Sno Grade
-——— ———-
95010
95024
95007 92
95003 82
95010 82
95009 75
95014 61
95002 55 - 4.使用集函数
5类主要集函数
计数
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
计算总和
SUM([DISTINCT|ALL] <列名>)
计算平均值
AVG([DISTINCT|ALL] <列名>)
求最大值
MAX([DISTINCT|ALL] <列名>)
求最小值
MIN([DISTINCT|ALL] <列名>)
DISTINCT短语:在计算时要取消指定列中的重复值
ALL短语:不取消重复值
ALL为缺省值
例六、查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)
FROM SC;
注意:用DISTINCT以避免重复计算学生人数 - 5.对查询结果分组
例七、求各个课程号及相应的选课人数
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno
注意:
GROUP BY子句的作用对象是查询的中间结果表
分组方法:按指定的一列或多列值分组,值相等的为一组
使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数
- 1.选择表中若干列
字符串匹配补充:
通配符:
% (百分号) 代表任意长度(长度可以为0)的字符串
例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
_ (下横线) 代表任意单个字符
ESCAPE短语:
例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE ‘<换码字符>’ 短语对通配符进行转义。
举例如下:
查询以”DB_“开头,且倒数第3个字符为 i的课程的详细情况。
SELECT *
FROM Course
WHERE Cname LIKE ‘DB_%i_ _’ ESCAPE ’ \ ’
还没有评论,来说两句吧...