例5.1
查询表student中女生的相关信息。
select * from student
where sex=‘女’
例5.2
列出所有course的职员课程号、课程名和学分。
select courseno,cname,credit
from course
例5.3
查询表student中入学成绩在780分以上的学生的学号、姓名和电话信息。
select studentno,sname,phone
from student
where point<780
例5.4
查询表student中入学成绩在780分以上的学生的学号、姓名、电话和班级名称信息。在FROM子句中使用AS关键字为表指派一个临时名称。
select studentno,sname,phone,classname
from student as 学生,class as 班级
where point>780 and 班级.classno=学生.classno
例5.6
查询选修课称号为c05109或c06108且期末成绩大于等于85分学生的学号、课程号和成绩。
select studentno,courseno,usually,final
from score
where(courseno=‘c05109’ or courseno=‘c06108’) and final>=85
例5.7
查询计算机学院的具有高级职称教师的教师号、姓名和从事专业。
select teacherno,tname,major
from teacher
where department=‘计算机学院’ and (prof=‘副教授’
or prof=‘教授’)
利用SELECT INTO 可将几个表或视图中的数据组合成一个表。也可用于创建一个包含选自链接服务器的数据的新表。
例5.8
利用SELECT…INTO创建新表。在teaching数据库中创建一个新表学生成绩 st_score,包括学生学号、姓名、课程号和期末成绩。
select student.studentno,student.sname,
courseno,final
into st_score
from student,score
限定查询返回的结果集,可以在WHERE子句中指定搜索条件来过滤数据。常用的过滤类型有比较运算、字符串运算、逻辑运算、指定范围或指定列值及未知值的运算。
涉及空值的查询用NULL来表示。在列中允许存在被称为NULL的特殊数值,不同于数据库中的其他任何值。在SELECT语句中,WHERE子句通常会返回比较的计算结果为真的行。
where子句的通用格式如下:
column is not null
例5.9
查询数据库test01中“奖学金”表中获得奖学金的学生的学号、班级号、综合测评和班级名次情况。
update test01.dbo.奖学金 --将奖学金为0的列值替换为null
set 奖学金=null
where 奖学金=0
select 学号,班级编号,综合测评,班级名次
from 奖学金
where 奖学金 is not null
例5.10
在student表中1989年以后出生的学生的学号、姓名、入学成绩和Email。
select studentno,sname,point,Email
from student
where year(birthday)>1989 --where birthday>‘1989-12-31’(另一种日期时间比较方法)
例5.11
在student表中显示所有姓何或姓韩的学生的姓名、生日和Email。
select sname,birthday,Email
from student
where sname like ‘何%’ or sname like ‘韩%’
例5.12
在student表中显示手机号开始3位不是131的学生姓名、电话和Email。
select sname,phone,Email
from student
where phone not like’131%’
选择条件中的逻辑表达式,可以将对某两个值的比较看作一个子条件,多个子条件之间可以用逻辑运算符AND、OR、NOT连接,最终构成更为复杂的选择条件,要注意一些逻辑运算中存在如LIKE、IN、BETEEN、IS等运算的用法
例5.13
在student表中显示所有1989年或1月份出生的学生的姓名、生日和Email。
select sname,birthday,Email
from student
where year(birthday)==1989 or month(birthday)==1
(
select sname,birthday,Email
from student
where birthday like ‘%1989%’ or birthday like’%01%’
)
在WHERE子句中,使用BETWEEN搜索条件时,使用BETWEEN搜索条件相当于用AND连接两个比较条件,如“ x BETWEEN 10 AND 27” 相当于表达式“ x>=10 AND x<=27 ”。
例5.14
查询选修课程号为c05109 的学生学号和期末成绩,并且要求平时成绩在88到95之间。
select studentno,final
from score
where courseno=‘c05109’ and usually between 88 and 95
例5.15
查询选修课程号为c05103 的学生学号和总评成绩,并且要求期末成绩不在78到90之间。其中,总评成绩的计算公式为:
总评成绩 = Final 0.7+ usually0.3
select studentno,final0.7+usually0.3
from score
where courseno=‘c05103’ and final not between 78 and 90
在WHERE子句中,可以使用IN搜索条件检索指定值列表的匹配行。使用IN搜索条件时,使用IN搜索条件相当于用OR连接两个比较条件,如“ x IN(10,15)” 相当于表达式“ x=10 OR x=15 ”。
例5.16
查询学号分别为的0824113307、0925111109和0935222201的学生学号、课程号、平时成绩和期末成绩。
select studentno,courseno,usually,final
from score
where studentno in (‘0824113307’,‘0925111109’,‘0935222201’)
为了阅读起来更加方便,可以用AS关键字实现给SELECT子句中的各项取别名,以增加结果集的可读性。
语法格式:
select 项的原名 as 别名
例5.17
在student表中查询出生日期在1989年以后的学生的学号、姓名、电话和年龄。
select studentno as ‘学号’,sname as ‘姓名’,phone as ‘手机号’,year(birthday) as ‘年龄’
from student
where birthday>‘1989-12-31’
例5.19
在student表中查询学号大于0923000000的学生的学号、姓名、电话和Email,并按照姓名的升序排序。
select studentno,sname,phone,Email
from student
where studentno>‘0923000000’
order by sname asc
例5.20
在score表中查询总评成绩大于85的学生的课程号、和总评成绩学号,并先按照课程号的升序、再按照总评成绩的降序排列。
select courseno,usually0.2+final0.8 as ‘总评’,studentno
from score
where usually0.2+final0.8>85
order by courseno asc,usually0.2+final0.8 desc
例5.23
利用SELECT 语句从student表中返回入学成绩排在前35%的学生的学号、姓名、分数和电话。
select top 35 percent studentno,sname,point,Email
from student
order by point desc
例5.25
5.25 统计student表中的男女学生的人数。
select sex as ‘性别’,count(*) as ‘人数’
from student
group by sex