您的位置:首页 > 数据库

sql基础查询语句运用

2017-11-18 00:40 411 查看
转载自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,这一行行可作为外查询的结果行,否则不能作为结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql