数据库SQL语言
一个学生课程数据库
1查询无考试成绩的7号课程的学号。
从sc中选择sno,其中cno='7 '且等级为空
2.查询7号课程90分以上或60分以下学生的学号。
从sc中选择sno,其中grade & gt90或年级& lt60
3查询课程名称以“数据”开头的所有课程的课程号和课程名称。
Select cno,cname from c,其中cname like' data% '
4.查询每个学生所有课程的平均分,输出学号和平均分。
按sno从sc组中选择sno,avg(grade)
5.查询每门课程的选修人数,输出课程号和选修人数。
Select cno,count(*) from sc group by cno
6.查询选修课程7的学生的学号、姓名和性别。
Select s.sno,sname,ssex from s,sc其中s.sno=sc.sno,cno = '7 '
7询问选修课程7的学生的平均年龄。
Select avg(sage) from s,sc其中s.sno=sc.sno,cno = '7 '
8.查询30多名学生选择的课程号。
通过具有count(*)& gt;的cno从sc组中选择sno。30
9查询到目前为止没有考砸的学生的学号。
答:从s中选择sno,其中sno不在(从sc中选择sno,其中等级& lt60 )
b:从sc组中选择sno,sno具有min(等级)>=60
二
1用可选课程号C2查询学生的学号和成绩。
选择sno,从sc分级,其中cno =“C2”
找出学生编号和选修课编号C4的名字。
Select s.sno,sname from s,sc其中s.sno=sc.sno,cno='C4 '
找出名为数学的选修课的学号和名字。
从s,sc,c中选择s.sno,sname
其中s.sno=sc.sno,c.cno=sc.cno,cname = 'Maths '
找出C2或C4的学生编号。
从sc中选择不同的sno,其中cno在(' C2 ',' C4 ')
或者:选择不同的SnO from where cno =' C2 '或cno =' C4' 5找出选修C2和C4课程的学生人数。
从sc中选择sno,其中cno ='C2 '和sno in(
Select SnO from where CNO =' C4') 6找出不选C2课程的学生的姓名和年龄。
select sname,sage from s where SnO not in(select SnO from sc where cno = ' C2 ')
或者:
select sname,sage from s where not exist(select * from sc where sc . SnO = s . SnO and cno = ' C2 ')
找出所有上过数据库课程的学生的名字。(同3)
从s,sc,c中选择s.sno,sname
其中s.sno = sc.sno,c.cno = sc.cno,cname =' database '
8找出数据库课程不及格的女生名字。
嵌套:
选择snake from where ssex =' female '和snoin(选择sno from where grade
连接:
从s、sc、c中选择sname
其中s.sno = sc.sno,c.cno = sc.cno,ssex = '女性', cname = '数据库'和等级
Select cname,avg (grade) from sc,其中c . cno = sc . cno group by sc . cno 10求出每个学生的平均分,输出学生的姓名和平均分。
select sname,avg(grade) from s,sc其中s.sno=sc.sno group by sc.sno
11找出至少有30名学生选修的课程名称。
select cname from c where cno in(select cno from sc group by cno having count(*)& gt;=30 )
12找出至少修过3门课的学生的名字。
select sname from s where SnO in(select SnO from sc group by SnO having count(*)& gt;=3)
13找出所有课程成绩不低于90分的学生姓名。
select sname from s where SnO not in(select SnO from sc where grade & lt;90)
14*找出数据库课程成绩不低于本课程平均分的学生姓名。
Select sname from s where sno in(
Select sno from sc,其中sc.cno = c.cno,cname =' database' and。
年级& gt(select avg (grade) from sc,其中sc.cno = c.cno,cname =' database ')。
15找出各系男女生的平均年龄和人数。
Select sdept,ssex,avg(sage),count(*) from s
按sdept,ssex分组
16找出计算机系(JSJ)课程平均分最高的学生的学号和姓名。
Select sc.sno,sname from s,sc其中s.sno=sc.sno,sdept='JSJ '
按具有平均值(等级)的序号分组
(Select top 1 avg(grade)from sc,s其中s.sno=sc.sno,sdept='JSJ '
按sc分组。sno order by avg (grade) desc)三个客户——商品数据库包括三个表:KH、FP和ywy。
1查询工资在1000-3000元之间的男业务员姓名和办公室号。
从ywy中选择yname,Ono,其中薪金介于1000和3000之间,ysex = '男性'
2查询各办事处业务员人数,输出办事处号及对应号。
Select Ono,count(*) from YWY group by Ono
查询每个客户在2002年5月份购买的总金额,输出客户号和对应的总金额。
Select Kno,sum(Fmoney)from FP where fdate between ' 2002 . 5 . 1 ' and ' 2002 . 5 . 31 '
按Kno分组
4.查询2002年5月购买5次以上的所有客户号,并按客户号升序排序。
select Kno from FP where fdate between ' 2002 . 5 . 1 ' and ' 2002 . 5 . 31 '
Group by有计数的Kno)>五
按Kno ASC排序
查一下各个办公室男女业务员的平均工资。
按Ono,Ysex从YWY组中选择Ono,Ysex,avg(薪金)
6.查询2002年5月从王海亮业务员处购买的商品的客户号、客户名称、联系电话。
选择Kno,Kname,phone from KH where Kno in(
select kno from FP where fdate between ' 2002 . 5 . 1 ' and ' 2002 . 5 . 31 '
YNO = (Select YNO from YWY其中YNAME = '王海亮')7查询所有薪资高于NO的业务员人数、姓名、薪资。1538.
Select yno,Yname,salary from YWY where salary & gt
(从YWY中选择薪金,其中Yno='1538 ')
8.查询与业务员1538同办公室所有其他业务员的电话和姓名。
Select Yno,Yname from YWY where Yno & lt& gt1538 '和小野在(
从YWY中选择Ono,其中Yno='1538 ')
9查询总销售额最高的业务员编号。
通过Yno Having sum(Fmoney) =从FP组中选择Yno
(Select top 1 sum(Fmoney)from FP group BY Yno ORDER BY sum(Fmoney)desc)
10查询所有业务员的人数、姓名、薪资以及其他薪资高于他的业务员的平均薪资。
使用自连接
选择y1。Yno,y1。Yname,y1.salary,avg( y2。工资)从YWY y1,YWY y2
其中y1。Yno & lt& gty2。Yno和y 1 . salary & lt;y2 .工资
按y1分组。Yno
没有薪水没有薪水
1 100 1 100
2 120 2 120
3 90 3 90
4 110 4 110四中的数据库里有一张表:
学生选课表:由五个属性组成:板和代码、班号、姓名、科目、年级,关系模式如下
SC(BJDM,BNXH,XSXM,KM,CJ),其中(BJDM,BNXH)为主代码。
注:每个学生保留一份各科成绩记录,包括“语文”、“数学”、“外语”。1找出每个班级的班级代码,学生人数,平均成绩。
通过BJDM从SC组中选择BJDM,count(*),avg(CJ)
2找出每个学生的班级代码,学生姓名,考试科目数和总成绩。
从SC中选择BJDM,XSXM,count(*),sum(CJ)
按BNXH分组
输出一个表格,每个学生一条记录,包括:班级代码,姓名,语文成绩,数学成绩,外语成绩。
方法1:使用视图
将视图v1 (bjdm,xsxm,yw,sx,wy)创建为
Select bjdm,xsxm,CJ,0,0 from sc其中km =' Chinese '
联盟
Select bjdm,xsxm,0,CJ,0 from sc其中km =' mathematics '
联盟
从sc中选择bjdm,xsxm,0,0,CJ其中km = '外语'从bjdm,xsxm的v1组中选择bjdm,xsxm,sum(yw)作为语言,sum(sx)作为数学,sum(wy)作为外语。
方法2:自连接
从sc a,sc b,sc c中选择a.bjdm,a.xsxm,a.km,a.cj,b.km,b.cj,c.km,c.cj
其中a.bjdm=b.bjdm,a.bnxh= b.bnxh,b.bjdm=c.bjdm,b.bnxh= c.bnxh
A.km = '中文'和b.km= '数学'和c.km= '外语'方法三:使用存储过程(略)
输出一个表格:每一个60分以下的学生对应一条记录,包括字段:班级代码、姓名、最低分。Select bjdm,xsxm,min(CJ)from sc where grade & lt;60分组by bjdm,xsxm5输出一个表格:每一个60分以下的学生对应一条记录,包括字段:班级代码,姓名,最高分,平均分。
获取平均成绩:创建视图v1 (bjdm,bnxh,avg _ CJ)为。
select bjdm,bnxh,avg(CJ from sc其中bjdm,bnxhselect sc.bjdm,sc.xsxm,max(cj),avg_cj from sc,V1
其中sc.bjdm=v1.bjdm和sc.bnxh=V1.bnxh和cj & lt60
Group by sc.bjdm,sc.xsxm6输出一个表:每个成绩不低于60的学生对应一条记录,包括字段:班级代码、姓名、平均成绩。从sc中选择bjdm,xsxm,avg(cj)
其中sno不在(从sc中选择sno,其中等级& lt60)
Group by bjdm,xsxm7输出一个表:每个学生对应一条记录,包括字段:班级编码,姓名,去掉最低分后的平均分。
方法1:
获得每个学生的最低分数:
将视图V1 (bjdm,bnxh,min_cj)创建为
通过bjdm,bnxh从sc组中选择bjdm,bnxh,min(cj)从sc,v1中选择sc.bjdm,sc.xsxm,avg(cj)
其中sc.bjdm=v1.bjdm和sc.bnxh=v1.bnxh和sc.cj & lt& gtv1.min_cj
按bjdm、bnxh方法2分组:
select sc.bjdm,sc.xsxm,(sum(CJ)-min(CJ))/count(*)from sc
Group by bjdm,bnxh8输出一个表:每个科目对应一条记录,包括字段:科目,去掉最低分后的平均分。
方法1:
获得每门课程的最低分:
将视图V1 ( km,min_cj)创建为
按km从sc组中选择km,min(cj)
从sc,v1中选择sc.km,avg(cj)
其中sc.km=v1.km,sc.cj & lt& gtv1.min_cj
按sc.km分组
方法二:
select km,(sum(CJ)–min(CJ))/count(*)from sc
group by km Supplement 9:Output Form:每个科目对应一条记录,包括字段:科目、去除最低分和最高分后的平均分。
从sc中选择km,(sum(CJ)–min(CJ)–max(CJ))/count(*)
group by km five数据库存储了某大学自1990以来的四六级考试情况,并规定:
1英语四六级考试每年两次,分别在6月和65438+2月。
四级没过的同学不能报考六级;
3只要没考到某一级就可以重复考;
4一旦某一等级考试通过,就不能再报考该等级的考试;
你可以报名,但不能参加考试。
数据库中有两个表,对应的关系模式如下:
学生表:S(Sno,Sname,Ssex,Sage,Sdept),其中Sno为主代码。
考试形式:E(Sno,年,月,级,级),学号,年,月,级,级。
其中(Sno,年,月)为主代码。1.找出每一次四六级考试的参考人数和平均分(报名但没参加的不算)。
选择年、月、级别、计数(*)、平均(等级)
按年、月、级别2分组。找出每次四级考试平均分最高的部门(报名但没考的不算)。
A: Select sdept from s,e其中s.sno=e.sno
其中级别=4
按sdept分组
有平均成绩& gt=全部(
Select avg(grade) from s,e where s.sno=e.sno where level = 4 Group by sdept)B:Select top 1 sdept from s,e where s . SnO = e . SnO
其中级别=4
按sdept分组
排序依据(平均(等级)desc
3.找出通过六级考试的学生的学号、姓名、性别(用连线法)。
从s,e中选择s.sno,sname,ssex
其中s.sno=e.sno,level=6,grade & gt=60
4.找出同一年参加大学英语四六级考试的学生的学号。
1)从E中选择sno
其中(级别=4,等级& gt=60)或级别=6
按有计数的年份分组(*)& gt;=22)从E X中选择sno,其中level=4,grade & gt=60并且存在(
Select * from e y其中y.sno = x.sno且year = x.year且level = 6) 5 .找出六级只过一次的学生的学号。
从E中选择sno
其中级别=6
按sno分组
计数(*)=1错误。为什么?1)从E中选择sno
其中级别=6
按sno分组
具有count(*)=1和max(grade)>=602)从E中选择sno,其中level=6,grade & gt=60且sno in(
从E中选择sno,其中level=6由计数(*)=1的sno分组)
6.找出目前为止还没有通过四级考试的学生的学号(包括还没有参加考试的或者参加了考试但是两者都没有通过的)。
从E中选择sno,其中level=4
按sno分组
具有最大值(等级)& lt60
联盟
从s中选择sno,其中sno不在(从E中选择sno)
7.找出六级考试合格人数最少的考试年份和月份(如有并列,用一句SQL句子列出)。
从E中选择年、月
其中level = 6,grade & gt=60
按年、月分组
有计数(*)& lt;=全部
(从E中选择count(*),其中level=6,grade & gt=60组按年、月)
补充:查一下每门课的通过率。
1获取每门课程的选修人数2获取每门课程的合格人数3获取每门课程的合格人数/1创建视图v _ all (cno,CNT) as select cno,count (*) from sc group by cno。
2创建视图v_pass( cno,cnt_pass)作为select cno,count(*)from sc where grade & gt;=60
按cno分组
3 select cno,CNT _ pass * 1.0/CNT from v _ all,v_pass其中v_all.cno = v_pass.cno