[例3.19]查全体学生的姓名及出生年份。
-- 2021减去年龄就是出生日期
SELECT Sname,2021-Sage
FROM Student;
【例3.20】查询全体学生的姓名
--小写 LOWER(),'Year of Birth:'可以方便阅读
SELECT Sname,'Year of Birth:',2021-Sage,LOWER(Sdept)
FROM Student
SELECT Sname NAME,'Year of Birth:' BIRTH ,2021-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student
查询条件 | 谓词 |
---|---|
比较 | =,<,>,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符 |
确定范围 | BETWEEN AND,NOT BETWEEN AND |
确定集合 | IN,NOT IN |
字符匹配 | LIKE,NOT LIKE |
空 值 | IS NULL,IS NOT NULL(注意:= NULL是错误表达方式) |
多重条件(逻辑运算) | AND,OR,NOT |
【例3.21】查询选修课程的学生学号
-- SELECT (ALL) Sno FROM SC;没有指定DISTINCT关键词 ,则缺省ALL
SELECT DISTINCT Sno
FROM SC;
【例3.22】查询计算机科学系全体学生的名单
SELECT Sname
FROM Student
WHERE Sdept='CS'
【例3.23】查询所有年龄在20岁以下的血红色呢个姓名及其年龄。
SELECT Sname,Sage
FROM Student
WHERE Sage<20
【例3.24】查询考试成绩有不及格的学生的学号
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60
【例3.25】查询年龄在20~23(包括20岁和23岁)之间的学生的姓名,系别和年龄
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23
【例3.26】查询年龄不在在20~23(包括20岁和23岁)之间的学生的姓名,系别和年龄
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23
【例3.27】查询计算机科学系(cs),数学系(ma)和信息系(is)血红色呢个的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ('CS','MA','IS')
执行结果
【例3.28】查询不是计算机科学系(cs),数学系(ma)和信息系(is)血红色呢个的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN ('CS','MA','IS')
[NOT] LIKE ‘<匹配串>’[ESCAPE‘<换吗字符>’]
<匹配串>可以是一个完整的字符串,也可以含有通配符%和 _
%代表任意长度(长度可以为0)的字符串
代表任意单个字符
数据库字符集为ASCII时,一个汉字需要两个
数据库字符集为 GBK 时,一个汉字需要一个_
匹配串为固定字符串
【例3.29】查询学号为2015121的学生的详细情况
SELECT *
FROM Student
WHERE Sno LIKE '201215121'
--等价于
--SELECT*
--FROM Student
--WHERE Sno='201215121'
匹配串为含通配符的字符串
[例3.30] 查询所有姓刘学生的姓名、学号和性别。
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE'刘%'
[例3.31] 查询姓"欧阳"且全名为三个汉字的学生的姓名。
我这里数据库字符集为 GBK 一个_就可以查
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE'欧阳_'
[例3.32] 查询名字中第2个字为"阳"字的学生的姓名和学号。
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '_阳%'
[例3.33] 查询所有不姓刘的学生姓名、学号和性别。
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname NOT LIKE '刘%'
[例3.34] 查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE'\'
[例3.35] 查询以"DB_"开头,且倒数第3个字符为 i的课程的
详细情况。
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%I__' ESCAPE'\'
[例3.36] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
SELECT Sno,Cno
FROM sc
WHERE Grade IS NULL
我这里都是有成绩的所以查询为空
[例3.37] 查所有有成绩的学生学号和课程号。
SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NULL
逻辑运算符:AND和 OR来连接多个查询条件
1.AND的优先级高于OR
2.可以用括号改变优先级
[例3.38] 查询计算机系年龄在20岁以下的学生姓名。
SELECT Sname
FROM Student
WHERE Sdept='CS' AND Sage<20
改写[例3.27]
[例3.27] 查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept='CS' OR Sdept='MA' OR Sdept='IS'
ORDER BY
可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为ASC
对于空值,排序时显示的次序由具体系统实现来决定
[例3.39]查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC
[例3.40]查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC
◼ 统计元组个数 COUNT(*)
◼ 统计一列中值的个数 COUNT([DISTINCT|ALL] <列名>)
◼ 计算一列值的总和 SUM([DISTINCT|ALL] <列名>)
◼ 计算一列值的平均值 AVG([DISTINCT|ALL] <列名>)
◼ 求一列中的最大值和最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
[例3.41] 查询学生总人数。
SELECT COUNT(*)
FROM Student
[例3.42] 查询选修了课程的学生人数。
SELECT COUNT(DISTINCT Sno)
FROM SC
[例3.43] 计算1号课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno='1'
[例3.44] 查询选修1号课程的学生最高分数。
SELECT MAX(Grade)
FROM SC
WHERE Cno='1'
[例3.45 ] 查询学生201215012选修课程的总学分数。
SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='201215121' AND
SC.Cno=Course.Cno
[例3.46] 求各个课程号及相应的选课人数。
SELECT Cno,COUNT(Sno) 选课人数
FROM SC
GROUP BY Cno
[例3.47] 查询选修了2门以上课程的学生学号。
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>=2