目录
单表查询
1.查询满足条件的元组
(1)比较大小
[例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;
(2)确定范围
❖谓词:
BETWEEN … AND …
NOT BETWEEN … AND
[例3.25] 查询年龄在10~20岁(包括20岁和23岁)之间的学生 的姓名、系别和年龄
select Sname,Sdept,Sage
from Student
where Sage Between 10 and 20;
使用< ,>符号也是一样的
select Sname,Sdept,Sage
from Student
where Sage >=10 and Sage <= 20;
[例3.26] 查询年龄不在10~19岁之间的学生姓名、系别和年龄
select Sname,Sdept,Sage
from Student
where Sage not between 10 and 19;
(3)确定集合
[例3.27]查询计算机科学系(CS)、数学系(MA)和信息 系(IS)学生的姓名和性别。
select Sname,Ssex
from Student
where Sdept in('CS','MA','IS');
[例3.28]查询既不是计算机科学系、数学系,也不是信息系 的学生的姓名和性别。
select Sname,Ssex
from Student
where Sdept not in('CS','MA','IS');
(4)字符匹配
(4.1)匹配串为固定字符串
[例3.29] 查询学号为201215121的学生的详细情况。
select *
from Student
where Sno like '201215121';
--等价于
select *
from Student
where Sno='201215121';
(4.2)匹配串为含通配符的字符串
[例3.30] 查询所有姓张学生的姓名、学号和性别。
select Sname,Sno,Ssex
from Student
where Sname like '张%';
[例3.31] 查询姓"欧阳"且全名为三个汉字的学生的姓名。
【注】数据库字符集为ASCII时,一个汉字需要两个_ 数据库字符集为 GBK 时,一个汉字需要一个_
select Sname
from Student
where Sname like '欧阳_';
[例3.32] 查询名字中第2个字为"阳"字的学生的姓名和学号。
同样,不同的字符集_个数不一样
[例3.33] 查询所有不姓刘的学生姓名、学号和性别。
select Sname,Sno,Ssex
from Student
where Sname not like '刘%';
(4.3)使用换码字符将通配符转义为普通字符
[例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 '\' ;
(5)涉及空值的查询
❖谓词: IS NULL 或 IS NOT NULL
“IS” 不能用 “=” 代替
[例3.36] 某些学生选修课程后没有参加考试,所以有选课 记录,但没 有考试成绩。查询缺少成绩的学生的学号和相 应的课程号。
select Sno,Cno
from SC
where Grade is NULL ;
如果用‘=’
[例3.37] 查所有有成绩的学生学号和课程号。
select Sno,Cno
from SC
where Grade is not NULL ;
(6)多重条件查询
❖逻辑运算符:AND和 OR来连接多个查询条件
◼ AND的优先级高于OR
◼ 可以用括号改变优先级
[例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 in('CS','MA','IS');
--改写为
select Sname,Ssex
from Student
where Sdept ='CS'or Sdept= 'MA'or Sdept='IS';
2.ORDER BY子句
❖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;
如果不写desc 默认asc
补充
lower()函数
--将大写字符数据转换为小写字符数据
语法:lower(character_expression)
--character_expression是指定要进行转换的字符串
附表
Student1
Student2
SC
Course