目录
8.多重条件:单一条件结合逻辑运算符(and or not)
1.查询年龄在17~19(含边界)的学生姓名和年龄
select sname,sage
from student
where sage>=17 and sage<=19
--也可以这样,但不推荐
select sname,sage
from student
where not sage<17 and not sage>19
--等价于
--between A and B:[A,B]
select sname,sage
from student
where sage between 17 and 19
2. 确定集合:使用谓词IN或NOT IN。
--查询信息管理系和计算机系的学生姓名和性别
select sname,ssex
from student
where sdept='信息管理' or sdept='计算机'
3.或逻辑:in(常量1,常量2, ...常量n)
--确定集合:使用谓词IN或NOT IN。
--查询信息管理系和计算机系的学生姓名和性别
select sname,ssex
from student
where sdept='信息管理' or sdept='计算机'
--等价于
--in:或逻辑
--in(常量1,常量2, ...常量n)
select sname,ssex
from student
where sdept in('信息管理','计算机')
4.模糊查询
--精确查询:查询的条件是确定的,精确地
--模糊查询:查询的条件是不够确定的,不够精确地
--提示:对于模糊查询的条件表达不能用=
--模糊查询条件表达的思路:使用like与通配符结合使用
--通配符(注:代表任意的字符):%(表示任意的0或多个字符)、_(表示任意的1个字符)、[](表示或逻辑)、[^](表示对或逻辑的否定)
--查询所有李姓学生的姓名
--like :像
select sname
from student
where sname like '李%'
5. 查询名字的第2个字为”小”或“大”的学生姓名。
select sname
from student
where sname like '_[小大]%'
6.转义方法实现escape
--查询以第3至5个字为‘_系统’的课程信息。
--提示:使用模糊查询时,需要将通配符作为一般字符看待(转义方法实现escape)
select *
from course
where cname like '__\_系统%' escape '\'
--等价于
select *
from course
where cname like '__#_系统%' escape '#'
7.空值:使用谓词IS NULL或IS NOT NULL。
--查询缺少成绩的学生学号和相应课程号。
--空值:null(不确定或没有值)
--错误
select sno,cno
from sc
where grade=0
--正确
select sno,cno
from sc
where grade is null
8.多重条件:单一条件结合逻辑运算符(and or not)
--多重条件:查询异世界年龄在20岁以下的学生姓名
select sname
from student
where sdept='异世界' and sage<20
9.top子句:top n:取查询结果的前n行数据
--查询course表中的前三条记录
select top 3 *
from course
10.top n percent:取查询结果的前n%行数据
--查询course表前20%的记录
select top 20 percent *
from course
11.with ties:包括并列的结果
--查询学生年龄最小的全部信息
select top 1 with ties *
from student
order by sage
12. ORDER BY子句:对查询结果排序
--查询全体学生的信息,查询结果按系名升序排列、同一个系的学生按年龄降序排列。
select *
from student
order by sdept, sage desc
13.查询学生中年龄最小的学生姓名和年龄。
--思考:查询学生中年龄最小的学生姓名和年龄。
select sname,sage
from student
where sage = (select min(sage) from student)
14.聚集函数
--统计学生总数
select COUNT(*)
from student
--查询选课记录总数及选修了课程的学生人数
select COUNT(distinct sno) 学生人数, COUNT(distinct cno) 选课记录
from sc
--查询选修c001号课程考试成绩的平均分、最高分和最低分
select AVG(grade) 平均分,max(grade) 最高分,MIN(grade) 最低分
from sc
where cno='c001'
--查询每门课的平均分、最高分和最低分
select cno,AVG(grade) 平均分,max(grade) 最高分,MIN(grade) 最低分
from sc
group by cno
15.GROUP BY子句:对数据进行分组统计
--查询每门课程的选课人数。
select cno ,count(sno) 选课人数
from sc
group by cno
--查询每个学生的选课门数和平均成绩。
select sno, count(sno) 选课门数, avg(grade)
from sc
group by sno
--查询每个系的女生人数。
select sdept, count(sno) 女生人数
from student
where ssex = '女'
group by sdept
--查询选课门数超过3门的学生学号和选课门数
select sno ,count(sno) 选课门数
from sc
group by sno having count(sno) > 3
16.into子句:将查询结果保存到表中
--语法格式:
--select 查询列表序列 into <新表名> from 数据源
--其他条件子句、分组子句等
--将student表中所有的记录信息复制到一张新表table1中
--需求;想将查询结果保留
select * into table1
from student