一. 单表查询。
1. 选择表中的若干列(即关系代数中的“投影”运算)
1) 查询指定列。
例1 查询全体学生的学号和姓名。
select 学号,姓名。
from 学生;
2) 查询全部列。
例2 查询全体学生的详细记录。
select *
from 学生;
3) 查询经过计算的值。
例3 查询全体学生的姓名及其年龄。
select 姓名,round ( date()-出生日期 ) 365,1 ) as 年龄。
from 学生;
2. 选择表中的若干记录(即关系代数中的“选择”运算)
1) 消除取值重复的行。
例4 查询选修了课程的学生学号。
select distinct 学号。
from 成绩;
2) 查询满足条件的记录。
a) 比较大小。
例5 查询所有少数民族同学的姓名和民族。
select 姓名,民族。
from 学生。
where民族<>”汉”
b) 字符匹配(模糊查询)
例6 查询所有姓李的学生的姓名和性别。
select 姓名,性别。
from 学生。
where 姓名 like “李*”;
例7 查询所有名字第2个字为“小”的学生姓名和性别。
select 姓名,性别。
from 学生。
where 姓名 like “?小*”;
c) 涉及空值的查询。
例8 查询缺少成绩的学生的学号和相应的课程号。
select 学号, 课程编号。
from 成绩。
where 成绩 is null;
d) 多重条件查询。
例9 查询所有白族男同学的姓名。
select 姓名。
from 学生。
where 性别=”男” and 民族=”白族”;
3. 对查询结果排序。
例10查询选修了 s0105 课程的学生的学号及其成绩,查询结果按分数降序排列。
select 学号,成绩。
from 成绩。
where 课程编号=”s0105”
order by 成绩 desc;
例11 查询全体学生情况,查询结果按所属院系的编号升序排列,同一系的学生按年龄升序排列。
select *
from 学生。
order by 所属院系 asc,出生日期 desc;
4. 使用集函数。
count ([distinct | all统计记录个数。
count ([distinct | all] <统计一列中值的个数。
sum ([distinct | all] <计算一列值的总和(此列必须是数值型)
**g ([distinct | all] <计算一列值的平均值(此列必须是数值型)
max ([distinct | all] <求一列值中的最大值。
min ([distinct | all] <求一列值中的最小值。
例12 查询学生总人数。
select count(*)
from 学生;
例13 查询选修了课程的学生人数。
select count (学号) as 人数。
from {
select distinct 学号 from 成绩 )
例14 计算s0101课程的学生平均成绩。
select **g(成绩)
from 成绩。
where 课程编号=”s0101”;
例15 查询选修s0101课程的学生最高分数。
select max(成绩)
from 成绩。
where 课程编号=”s0101”;
5. 对查询结果分组。
group by 《列名》 [h**ing 《条件表达式》 ]
group by子句将查询结果表按某一列或多列值分组,值相等的为一组。
若分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用h**ing短语指定筛选条件。
where子句与h**ing短语的区别在于作用对象不同。where子句作用于基本表或视图,从中选择满足条件的记录。h**ing短语作用于组,从中选择满足条件的组。
例16 求各个课程号及相应的选课人数。
select 课程编号,count(学号)
from 成绩。
group by 课程编号;
例17 查询选修了3门以上课程的学生学号。
select 学号。
from 成绩。
group by 学号 h**ing count(*)3;
例18 查询不同性别各个少数民族的学生人数。
select 性别, 民族, count(民族)
from 学生。
group by 性别, 民族 h**ing 民族<>"汉族";
或。select 性别, 民族, count(民族)
from 学生。
where民族<>"汉族"
group by 性别, 民族 ;
二. 连接查询。
1. 自然连接。
例18 查询每个学生及其选修课程的情况。
select 学生。学号,姓名,性别,民族,政治面貌,出生日期,所属院系,简历,课程编号,成绩。
from 学生,成绩。
where 学生。学号=成绩。学号;
2. 复合条件连接。
例19 查询选修s0105课程且成绩在80分以上的所有学生姓名。
select 学生。学号,姓名。
from 学生,成绩。
where 学生。学号=成绩。学号 and 成绩。课程编号=”s0105” and 成绩。成绩=80 ;
例20 查询每个学生的学号、姓名、选修的课程名及其成绩。
select 学生。学号,姓名,课程名称,成绩。
from 学生,成绩,课程。
where 学生。学号=成绩。学号 and 成绩。课程编号=课程。课程编号 ;
三. 嵌套查询。
1. 带有in谓词的子查询。
例21 查询与“李小红”在同一个系学习的学生姓名及其院系名称。
先分步完成此查询,然后再构造嵌套查询。
1) 确定“李小红”所在系的编号。
select 所属院系。
from 学生。
where 姓名="李小红" ;
结果为“02”。
2) 查找“02”号系的名称及在该系学习的学生。
select 姓名, 院系名称。
from 学生, 院系。
where 所属院系=院系编号 and 所属院系 =”02” ;
3) 将第(1)步查询嵌入到第(2)步查询的条件中,构造嵌套查询。
select 姓名, 院系名称。
from 学生, 院系。
where 所属院系=院系编号 and 所属院系 in
(select 所属院系。
from 学生。
where 姓名="李小红")
例22 查询选修了课程名为“数学规划”的学生学号和姓名。
select 学号,姓名最后在“学生”表中取出学号和姓名。
from 学生。
where 学号 in
(select 学号然后在“成绩”表中找出选修了编号为。
from 成绩s0105”的课程的学生学号。
where 课程编号 in
select 课程编号首先在“课程”表中找出“数学规划”
from 课程课程的编号,结果为“s0105”
where 课程名称 = 数学规划" )
2. 带有any或all谓词的子查询。
any 大于子查询结果中的某个值。
all 大于子查询结果中的所有值。
=any 大于等于子查询结果中的某个值。
=all 大于等于子查询结果中的所有值。
=any 大于等于子查询结果中的某个值。
=all 大于等于子查询结果中的所有值。
any 等于子查询结果中的某个值。
>any 不等于子查询结果中的某个值。
>all 不等于子查询结果中的任何一个值。
例23 查询其他系中比“01”号系某一学生年龄小的学生姓名、年龄和所属院系。
select 姓名, 出生日期, 所属院系。
from 学生。
where 出生日期 >any (select 出生日期。
from 学生。
where 所属院系="01" )
and 所属院系<>"01" ;
access执行此查询时,首先处理子查询,找出“01”号系中所有的学生的出生日期,构成一个集合(1992-12-9,……1990-7-19),然后处理父查询,找所有不是“01”号系且年龄小于该集合中任一个的学生。
3. 带有exists谓词的子查询。
带有exists(not exists)谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
例24 查询所有选修了s0105号课程的学生姓名。
select 姓名。
from 学生。
where exists
(select *
from 成绩。
where 学号=学生。学号 and 课程编号= "s0105")
SQL查询语句练习
1 查询student表中的所有记录的sname ssex和class列。语句 select sname,ssex,class from student 查询结果 2 查询教师所有的单位即不重复的depart列。语句 select distinct depart from teacher 查询结果 ...
SQL语句查询练习
1.检索出课程表中所有信息所有字段,查询名为 sql课程表查询 2.检索出学生来自于那些民族,只显示 民族 字段,要求消除重复行,查询名为 sql民族查询 3.检索出 学号 课程号 及 总评成绩 字段,并按总评成绩降序排列,查询名为 sql成绩查询 4.检索出1993年出生的学生的 姓名 性别 和 ...
sql查询语句练习
student s sname,sage,ssex 学生表 course c cname,t 课程表 sc s c score 成绩表 teacher t tname 教师表。问题 1 查询 001 课程比 002 课程成绩高的所有学生的学号 2 查询平均成绩大于60分的同学的学号和平均成绩 3 查...