数据查询
- 单表查询
选择表中的若干列
- 查询指定列
查询全体学生的学号与姓名
Select sno,sname
From student;
查询全体学生的姓名、学号、所在系
Select sname,sno,sdept
From student ;
(2) 查询全部列
查询全体学生的详细记录
Select *
From student ;.
等价于
Select sno , sname ,ssex ,sage ,sdept
From student ;
(3) 查询经过计算的值
查询全体学生的姓名及其出生年份
Select sname,2014-sage /*查询结果的第2列是一个算数表达式,是用当前的年份(假设是2014年)减去学生的年龄,这样所得的是学生的出生年份*/
From student ;
选择表中的若干元组
- 消除取值重复的行(如果想去掉表中的重复行,必须指定distinct
查询选修了课程的学生学号
Select distinct sno
From sc ;
- 查询满足条件的元组
- 比较大小 用于比较大小的运算符一般包括 = , > ,< ,>= ,<= ,!= 或<>(不等于) , !> ,!<
查询计算机科学系全体学生的名单
Select name
From student
Where sdept=’计算机科学系’ ;
查询所有年龄在20岁以下的学生姓名及年龄
Select sname ,sage
From student
Where sage<20 ;
查询考试成绩不及格的学生的学号
Select distinct sno
From sc
Where grade<60 ;
b.确定范围
谓词 between ....and 和 not between...and ...可以用来查找属性值在(或不在)指定范围内的元组,其中between后是范围的下限(即低值),and后是范围的上限(即高值)
查询年龄在20~35岁之间的学生的姓名、系别、年龄
Select sname,sage,sdept
From student
Where sage between 20 and 35 ;
C.确定集合
谓词in 可以用来查找属性值属于指定集合的元组,与in相对的谓词是 not in ,用于查找属性值不属于指定集合的元组。
查询计算机科学系cs ,数学系ma,信息系is 学生的姓名和性别。
Select sname ,sex
From student
Where sdept in (‘cs’,’ma’,’is’) ;
D.字符匹配
谓词 like 可以用来进行字符串的匹配
其含义是查找指定的属性列值与<匹配串>相匹配的元组。<匹配串>可以是一个完整的字符串,也可以含有通配符%和 _
%(百分号)代表任意长度(长度可以是0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。如acb ,addagb ,ab 等都满足该匹配串。
_ (下横线)代表任意单个字符。如a_b 表示以a 开头,以 b 结尾 的长度为3 的任意字符串。 如acb ,afb 等都满足该匹配串 。
查询学号为 201215121 的学生的详细情况。
Select *
From student
Where sno like ‘201215121’ ;
查询所有姓刘的学生的姓名、学号、性别
Select sno, sage , ssex
From student
Where sname like ‘刘%’ ;
e.涉及空值的查询
查询缺少成绩的学生的学号和相应的课程号
Select sno,cno
From sc
Where grade is null ;
f. 多重条件查询
查询计算机科学系年龄在20岁以下的学生姓名
Select sname
From student
Where sdept = ‘计算机科学系’ and sage<20 ;
3. Oeder by 子句
用户可以使用order by 子句对查询结果按照一个或多个属性列的升序(ASC) 或降序(desc)排列,默认值为升序
4.聚集函数
Count(*) 统计元组个数
Count( [distinct|all] ) 统计一列中值的个数
sum( [distinct|all] ) 计算一列值的总和(此列必须是数值型)
avg( [distinct|all] ) 计算一列值的平均值(此列必须是数值型)
max( [distinct|all] ) 求一列值中的最大值
min( [distinct|all] ) 求一列值中的最小值
注意:where子句中不能用聚集函数作为条件表达式 ,聚集函数只能能用于select子句和group by中的having子句
5.group by子句
group by 子句将查询结果按某一列或多列的值分组,值相等的为一组。
求各个课程号及相应的选课人数
Select cno ,count(sno)
From sc
Group by cno ;