SQL查询语句练习

发布 2021-05-09 08:47:28 阅读 4999

一. 单表查询。

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 查...