sql基础查询语句运用

来源:互联网 发布:淘宝助理5官方下载 编辑:程序博客网 时间:2024/06/05 01:53

转载自Last updated
暂且 用这个表来做一下sql基本查询知识的总结

Student(S#,Sname,Sage,Ssex) 学生表 S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别
Course(C#,Cname,T#) 课程表 C#,课程编号;Cname:课程名字;T#:教师编号
SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩
Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字

问题及答案:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.S# from (select s#,score from SC where C#=’001′) a,(select s#,score
from SC where C#=’002′) b
where a.score>b.score and a.s#=b.s#;

答:a,b作为查询课程的这个结果集的别名

2、查询平均成绩大于60分的同学的学号和平均成绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;

答:
avg()是得出平均数的函数
group by是根据查询出来的数据进行分组。例如这里就是根据查询出来的S#这个学号来分组。

having,是用于和函数一起使用的过滤条件(where无法与函数关键字一起用)

 ***where用于group by 前,而having用于group by之后***

WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
GROUP BY 子句用来分组 WHERE 子句的输出。
HAVING 子句用来从分组的结果中筛选行。

3、查询所有同学的学号、姓名、选课数、总成绩;
select Student.S#,Student.Sname,count(SC.C#),sum(score) fromStudent left
Outer join SC on Student.S#=SC.S# group by Student.S#,Sname

答:count()计算个数,sum()计算总数。
left join 是left Outer join简写,左外连接,将左表的全部查询结果显示,右表根据匹配信息显示,若没有则直接显示null.

4、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;

答:distinct()返回唯一不同的值,即出现了两个相同的数据,但是只显示一个。
like 操作字,意思为包含,以…. 。
NOT LIKE :不包含
LIKE ‘%d’ :以d结尾的
LIKE ‘d%’ :以d开头的
LIKE ‘%d%’ :包含d的

5、查询没学过“叶平”老师课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’);

答:根据给出的信息Teacher.Tname=’叶平’

6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#=’001’and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);

将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。

原创粉丝点击