当前位置:首页>科技>查询数据库指令三数据库查询
发布时间:2026-07-21阅读(1)
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表的式>]……FROM <表名或视图名>[,<表明或视图名>]……[WHERE <条件表达式>][GROUP BY<列名1>[HAVING <条件表达式>]][ORDER BY <列名2>[ASC|DESC]];
1.选择表中的若干列——查询指定列
查询全体学生的学号与姓名
SELECT Sno ,SnameFROM Student;
——查询全部列
查询全体学生的详细记录
SELECT * FROM Student;
等价于
SELECT Sno,Sname,Ssex,Sage,Sdept /*学生全部属性*/FROM Student;
——查询经过计算的值
查询全体学生的姓名及其出生年份
SELECT Sname ,2017-SageFROM Student;
输出的结果为

查询结果
可以发现第2列不是列名而是一个表达式,使用当年的年份减去学生的年龄。
若想把列表中第二列列名显示为“Birthday"可以用如下方法:
SELECT Sname ,2017-Sage BirthdayFROM Student;
输出的结果为

查询结果
相当于给2017-Sage起了一个别名。
2、选择表中的若干元组——消除取值重复的行
查询选修了课程的学生学号
SELECT SnoFROM SC; /*选课表*/
输出结果为:

查询结果
该查询结果里包含了多个重复的行,若想去掉这些重复行必须指定关键词DISTINCT:
SELECT DISTINCT SnoFROM SC; /*选课表*/
输出结果为:

查询结果
——查询满足条件的元组
1.大小比较
查询计算机科学系的全体学生的姓名
SELECT SnameFROM StudentWHERE Sdept=CS;
2.确定范围
查询年龄在20-30岁之间的学生姓名
SELECT SnameFROM StudentWHERE Sage BETWEEN 20 AND 23;
查询年龄不在20-30岁之间的学生姓名
SELECT SnameFROM StudentWHERE Sage NOT BETWEEN 20 AND 23;
3.确定集合
查询计算机科学系、数学系和信息系学生的姓名和性别
SELECT Sname,SsexFROM StudentWHERE Sdept IN(CS,MA,IS);
4.字符匹配
谓词LIKE可以用来进行字符串的匹配,其一般语法为:
[NOT ]LIKE <匹配串>[ESCAPE<换码字符>]
其含义是查找指定的属性列值与<匹配串>相匹配的元组。<匹配串>可以是一个完整的字符串,也可以是含有通配符%和_。
.%(百分号)代表任意长度的字符串
._(下划线)代表任意单个字符
查询所有姓刘的学生的姓名、学号和性别
SELECT Sname,Sno,SsexFROM StudentWHERE Sname LIKE 刘%;
注意:数据库中字符集为ASCII时一个汉字需要两个_,当字符集为GBK时只需要一个_。
5.涉及空值的查询
某些学生选修了课程后没有参加考试,所以有选课记录,但是没有考试成绩。查询缺少成绩的学生的学号和相应的课程号,
SELECT Sno ,CnoFROM SCWHERE Grade IS NULL;
注意:这里的IS不能用等号(=)代替。
6.多重条件查询
查询计算机系年龄在20岁以下的学生姓名
SELECT SnameFROM StudentWHERE Sdept=CS AND Sage<20;
3、ORDER BY 子句可以用ORDER BY 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,缺省值时为升序
查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
SELECT Sno,GradeFROM SCWHERE Cno=3ORDER BY Grade DESC;
4、聚集函数SQL提供了许多聚集函数,主要有:
COUNT([DISTINCT|ALL] *) /*统计元组个数*/COUNT([DISTINCT|ALL] <列名>)/*统计一列中值个数*/SUM([DISTINCT|ALL] <列名>)/*计算一列值的总和(此列必须为数值型)*/AVG([DISTINCT|ALL] <列名>)/*计算一列值的平均值(此列必须为数值型)*/MAX([DISTINCT|ALL] <列名>)/*求一列值中的最大值*/MIN([DISTINCT|ALL] <列名>)/*求一列值中的最小值*//*统计一列中值个数*/SUM([DISTINCT|ALL] <列名>)/*计算一列值的总和(此列必须为数值型)*/AVG([DISTINCT|ALL] <列名>)/*计算一列值的平均值(此列必须为数值型)*/MAX([DISTINCT|ALL] <列名>)/*求一列值中的最大值*/MIN([DISTINCT|ALL] <列名>)/*求一列值中的最小值*/
查询学生总数
SELECT COUNT(*)FROM Student;
查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)FROM SC;
计算选修1号课程的学生平均成绩
SELECT AVG(Grade)FROM SCWHERE Cno=1;
5、GROUP BY 子句GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。
求各个课程及相应的选课人数
SELECT Cno,COUNT(Cno)FROM SCGROUP BY Cno;
该语句对查询结果按Cno的值分组,所有具有相同Cno值得元组为一组,然后对每一组作用聚集函数COUNT计算,以求得改组的学生人数结果为:

查询结果
查询选修了3门以上课程的学生学号
SELECT SnoFROM SCGROUP BY SnoHAVING COUNT(*)>3;
WHERE 子句与HAVING 短语的区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图