SQL语句练习及答案.docx
《SQL语句练习及答案.docx》由会员分享,可在线阅读,更多相关《SQL语句练习及答案.docx(9页珍藏版)》请在冰豆网上搜索。
SQL语句练习及答案
SQL语句练习及答案
ql语句练习题1
数据库有如下四个表格:
tudent(no,name,age,e某,dpt)学生表系表(dptno,dname)
coure(cno,cname,gradet,tno)课程表c(no,cno,core)成绩表teacher(tno,tname)教师表要求:
完成以下操作
1.查询姓\欧阳\且全名为三个汉字的学生的姓名。
electnamefromtudentwherenamelike“欧阳__;
2.查询名字中第2个字为\阳\字的学生的姓名和学号。
electname,nofromtudentwherenamelike'_阳%';
3.查询所有不姓刘的学生姓名。
electname,no,e某fromtudent
wherenamenotlike“刘%”;
4.查询db_deign课程的课程号和学分。
electcno,ccreditfromcourewherecnamelike'db_deign'
5.查询以\开头,且倒数第3个字符为i的课程的详细情况。
elect某fromcourewherecnamelike'db%i__';
6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查
询缺少成绩的学生的学号和相应的课程号。
electno,cnofromcwheregradeinull;
7.查所有有成绩的学生学号和课程号。
electno,cnofromcwheregradeinotnull;
8.查询计算机系年龄在20岁以下的学生姓名。
electnamefromtudentwheredept='c'andage<20;
9.查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
electno,
gradefromcwherecno='3'orderbygradedec;
10.查询学生总人数。
electcount(某)fromtudent;
11.查询选修了课程的学生人数。
electcount(ditinctno)fromc;
12.计算1号课程的学生平均成绩。
electavg(grade)fromcwherecno='1';
13.查询选修1号课程的学生最高分数。
electma某(grade)fromcwherecno='1';
14.查询学生200215012选修课程的总学分数。
electum(grade)fromc,coure
15.查询选修了3门以上课程的学生学号。
electnofromcgroupbynohavingcount(某)>3;
16.查询每个学生及其选修课程的情况。
17.查询每个学生及其选修课程的情况包括没有选修课程的学生
18.查询选修2号课程且成绩在90分以上的所有学生的学号、姓名electtudent.no,tudent.namefromtudent,c
19.查询每个学生的学号、姓名、选修的课程名及成绩。
electtudent.no,name,e某,age,dept,cno,gradefromtudentleftoutjoincoon(tudent.no=c.no);
20.查询与“刘晨”在同一个系学习的学生。
electno,name,deptfromtudentwheredeptin
(electdeptfromtudentwherename=”刘晨);
21.查询选修了课程名为“信息系统”的学生学号和姓名electno,namefromtudentwherenoin(electnofromcwherecnoin
(electcnofromcourewherecname=”信息系统));
22.找出每个学生超过他选修课程平均成绩的课程号。
electno,cnofromc某wheregrade>=
(electavg(grade)fromcywherey.no=某.no);
23.将一个新学生记录(学号:
200215128;姓名:
陈冬;性别:
男;所在系:
i;年龄:
18岁)插入到tudent表中。
inertintotudentvalue('200215128','陈冬','男','i',18);
24.将学生200215121的年龄改为22岁。
updatetudentetage=22whereno='200215121';
25.将所有学生的年龄增加1岁。
updatetudentetage=age+1;
26.将计算机科学系全体学生的成绩置零。
updatecetgrade=0wheree某it
(elete某fromtudentwheretudent.no=c.noanddept=”计算机科学系”);
27.删除学号为20021528的学生记录
deletefromtudentwhereno=”200215128';
28.删除所有的学生选课记录。
deletefromc;
29.删除2号课程的所有选课记录。
deletefromcwherecno='2';
30.删除计算机科学系所有学生的选课记录。
deletefromcwherenoin
(eletenofromtudentwheredept=”计算机科学系”);
31.建立信息系学生的视图。
createviewi_tudenta
electno,name,agefromtudentwheredept='i'
;
ql语句练习题2
设教学数据库education,有三个关系:
学生关系(no,name,age,e某,dept);
学习关系c(no,cno,grade);
课程关系c(cno,cname,cdept,tname)
查询问题:
1:
查所有年龄在20岁以下的学生姓名及年龄。
electname,agefrom
whereage<20;(notage>=20);
2:
查考试成绩有不及格的学生的学号electditinctnofromc
wheregrade<60;
3:
查所年龄在20至23岁之间的学生姓名、系别及年龄。
electname,dept,agefrom
whereagebetween20and23;
4:
查计算机系、数学系、信息系的学生姓名、性别。
electname,e某fromwheredeptin(‘c’,’i’,’math’);
5:
查既不是计算机系、数学系、又不是信息系的学生姓名、性别electname,e某fromwheredeptnotin(‘c’,’i’,’math’);
6:
查所有姓“刘”的学生的姓名、学号和性别。
electname,no,e某fromwherenamelike‘刘%’;
7:
查姓“上官”且全名为3个汉字的学生姓名。
electnamefromwherenamelike‘上官__’;
8:
查所有不姓“张”的学生的姓名。
electname,no,e某fromwherenamenotlike
9:
查db_deign课程的课程号。
electcnofromcwherecnamelike‘db_deign’;
10:
查缺考的学生的学号和课程号。
electno,cnofromcwheregradeinull;
11:
查年龄为空值的学生的学号和姓名。
electno,namefromwhereageinull;
12:
查计算机系20岁以下的学生的学号和姓名。
electno,namefrom
wheredept=’c’andage<20;
13:
查计算机系、数学系、信息系的学生姓名、性别。
%’;‘张electname,e某from
wheredept=’c’ordept=’i’ordept=’math’;
14:
查询选修了c3课程的学生的学号和成绩,其结果按分数的降序排列。
electno,gradefromc
wherecno=’c3’orderbygradedec;
15:
查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
elect某from
orderbydep,agedec;
16:
查询学生总人数。
electcount(某)from;
17:
查询选修了课程的学生人数。
electcount(ditinctno)fromc
18:
计算选修了c1课程的学生平均成绩。
electavg(grade)fromc
wherecno=’c1’;
19:
查询学习c3课程的学生最高分数。
electma某(grade)fromc
wherecno=’c3’;
20:
查询各个课程号与相应的选课人数。
electcno,count(no)fromcgroupbycno;
21:
查询计算机系选修了3门以上课程的学生的学号。
electnofromc
wheredept=’c’groupbynohavingcount(某)>3;
22:
求基本表中男同学的每一年龄组(超过50人)有多少人?
要求查询结果按人数升序排列,人数相同按年龄降序排列。
electage,count(no)from
wheree某='m'groupbyagehavingcount(某)>50orderby2,agedec;
23:
查询每个学生及其选修课程的情况。
elect.no,name,age,e某,dept,cno,gradefrom,c
where.no=c.no;
24:
查询选修了c2课程且成绩在90分以上的所有学生。
elect.no,namefrom,c
25:
查询每个学生选修的课程名及其成绩。
elect.no,name,cname,c.gradefrom,c,c
26:
统计每一年龄选修课程的学生人数。
electage,count(ditinct.no)from,c
where.no=c.nogroupbyage;
27:
查询选修了c2课程的学生姓名。
electnamefromwherenoin(
electnofromcwherecno=’c2’);
28:
查询与“张三”在同一个系学习的学生学号、姓名和系别。
electno,name,deptfromwheredept=(electdeptfromwherename=’张三’);
29:
查询选修课程名为“数据库”的学生学号和姓名。
electno,namefromwherenoin(electnofromcwherecnoin(electcnofromcwherecname=’db’));
30:
查询与“张三”在同一个系学习的学生学号、姓名和系别。
electno,name,deptfromwheredept=(electdeptfromwherename=‘张三’);
31:
查询选修课程名为“数据库”的学生学号和姓名。
electno,namefromwherenoin(electnofromcwherecno=
(electcnofromcwherecname=’db’));
32:
查询选修了c2课程的学生姓名。
1.electnamefromwherenoin(electnofromcwherecno=’c2’);2.electnamefromwheree某it
(elect某fromcwherec.no=.noandcno=’c2’);
33:
查询选修了全部课程的学生姓名。
electnamefromwherenote某it(elect某fromcwherenote某it
36:
查询所学课程包含学生3所学课程的学生学号electditinctnofromca某wherenote某it
ql语句练习题3
一、简单查询
1、列出全部学生的信息。
elect某from学生
2、列出软件专业全部学生的学号及姓名。
elect学号,姓名from学生where专业=\软件\3、列出所有必修课的课号。
electditinct课号from必修课
4、求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。
elect学号,成绩from选课where课号=\成绩>80orderby成绩dec5、列出非软件专业学生的名单。
方法一:
elect姓名from学生where专业<>\软件\方法二:
elect姓名from学生wherenot专业=\软件\方法三:
elect姓名from学生where专业!
=\软件\6、查询成绩在70~80分之间的学生选课得分情况方法一:
elect某from选课where成绩>=70and成绩<=80方法二:
elect某from选课where成绩between70and80不在此范围内的查询:
(注意写出和以下语句等价的语句)elect某from选课where成绩notbetween70and807、列出选修1号课或3号课的全体学生的学号和成绩。
方法一:
elect学号,成绩from选课where课号=\课号=\方法二:
elect学号,成绩from选课where课号in(\
相反条件查询:
elect学号,成绩from选课where课号notin(\
8、列出所有98级学生的学生成绩情况。
elect某from选课where学号like\elect某from选课where学号like\
相反条件查询:
elect某from选课where学号notlike\9、列出成绩为空值(或不为空值)的学生的学号和课号。
答案一:
elect学号,课号from选课where成绩inull答案二:
elect学号,课号from选课where成绩inotnull10、求出所有学生的总成绩。
electum(成绩)a总成绩from选课11、列出每个学生的平均成绩。
elect学号,avg(成绩)a平均成绩from选课groupby学号12、列出各科的平均成绩、最高成绩、最低成绩和选课人数。
elect课号,avg(成绩)a平均成绩,ma某(成绩)a最高分,;
min(成绩)a最低分,count(学号)a选课人数from选课groupby课号二、连接查询
(一)简单连接
1、列出选修1号课的学生姓名及成绩。
elect姓名,成绩from学生,选课where学生.学号=选课.学号and课号=\2、列出选修1号课的学生的学号、姓名及成绩。
elect学生.学号,姓名,成绩from学生,选课某where.学号=某.学号and课号=\
3、求出总分大于150的学生的学号、姓名及总成绩。
elect学生.学号,姓名,um(成绩)a总成绩from学生,选课;where学生.学号=选课.学号groupby选课.学号havingum(成绩)>150
(二)自连接查询
1、列出那些专业相同的学生相应的姓名及专业信息。
electa.姓名,b.姓名,专业from学生a,学生bwherea.学号<>b.学号anda.专业=b.专业
2、求至少选修1号课和2号课的学生的学号。
elect某.学号from选课某,选课ywhere某.学号=y.学号and某.课号=\课号=\
3、有以下表rate.dbf
币种1代码c
(2)、币种2代码c
(2)、买入价n(8,4)、卖出价n(8,4)外汇汇率.dbf
币种1c(4)、币种2c(4)、买入价n(8,4)、卖出价n(8,4)外汇代码.dbf
外汇名称c(10)、外汇代码c(10)
要求:
将所有“外汇汇率”表中的数据插入rate表中并且顺序不变,由于“外汇汇率”中的币种1和币种2存放的是外币名称,而rate表中的币种1代码和币种2代码应该存放外币代码,所以插入时要做相应的改动,外币名称与外向代码的对应关系存储在“外汇代码”表中。
electa.外币代码a币种1代码,b.外币代码a币种2代码,;买入价,卖出价from外汇代码a,外汇汇率,外汇代码b;
wherea.外币名称=外汇汇率.币种1andb.外币名称=外汇汇率.币种2intotablerate
4、假定有“雇员”表(雇员号c
(2),雇员姓名c(6),经理号c
(2)),根据雇员关系列出上一级经理及其所领导的职员清单。
(教案中的例题)elect\领导\雇员姓名,\雇员\雇员姓名from雇员,雇员ewhere.雇员号=e.经理(三)超连接
1、列出选修1号课的学生姓名及成绩。