SQL语句练习
(完整版)sql语句练习题及答案
(完整版)sql语句练习题及答案⼀在数据库 school 中建⽴student , sc, course 表。
学⽣表、课程表、选课表属于数据库School ,其各⾃的数据结构如下:学⽣Student (Sno,Sname,Ssex,Sage,Sdept)课程表course(Cno,Cname,Cpno,Ccredit)学⽣选课SC(Sno,Cno,Grade)⼆设定主码1 Student表的主码:sno2 Course表的主码:cno3 Sc表的主码:sno,cno1写出使⽤ Create Table 语句创建表 student , sc, course 的SQL语句23 删除student表中的元组4在数据库school中删除关系student5在student表添加属性sbirthdate 类型datetimeDelete1 删除所有JSJ 系的男⽣delete from Student where Sdept=’JSJ’ and Ssex=’男’;2 删除“数据库原理”的课的选课纪录delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’);Update1 修改0001 学⽣的系科为: JSJ2 把陈⼩明的年龄加1岁,性别改为⼥。
2 修改李⽂庆的1001课程的成绩为93 分3 把“数据库原理”课的成绩减去1分Select 查询语句⼀单表1查询年龄在19⾄21岁之间的⼥⽣的学号,姓名,年龄,按年龄从⼤到⼩排列。
2查询姓名中第2个字为“明”字的学⽣学号、性别。
3查询 1001课程没有成绩的学⽣学号、课程号4查询JSJ 、SX、WL 系的年龄⼤于25岁的学⽣学号,姓名,结果按系排列5按10分制查询学⽣的sno,cno,10分制成绩(1-10分为1 ,11-20分为2 ,30-39分为3,。
90-100为10)6查询 student 表中的学⽣共分布在那⼏个系中。
数据库常用SQL语句练习(含答案)
Emp(员工表)和Dept(部门表)简单题1. 案例:查询没有上级领导的员工的编号,姓名,工资select empno,ename,sal from emp where mgr is null;2. 案例:查询emp表中没有奖金的员工的姓名,职位,工资,以及奖金select ename,job,sal,comm from emp where comm is null or comm=0;既可以是null,也可以是03. 案例:查询emp表中含有奖金的员工的编号,姓名,职位,以及奖金select ename,job,sal,comm from emp where comm>0;4. 案例:查询含有上级领导的员工的姓名,工资以及上级领导的编号select ename,sal,mgr from emp where mgr is not null;5. 案例:查询emp表中名字以‘S’开头的所有员工的姓名select ename from emp where ename like 's%'6. 案例:查询emp表中名字的最后一个字符是'S'的员工的姓名select ename from emp where ename like '%s'7. 案例:查询倒数的第2个字符是‘E’的员工的姓名select ename from emp where ename like '%e_'8. 案例:查询emp表中员工的倒数第3个字符是‘N’的员工姓名select ename from emp where ename like '%n__'9. 案例:查询emp表中员工的名字中包含‘A’的员工的姓名select ename from emp where ename like '%a%'10. 案例:查询emp表中名字不是以'K'开头的员工的所有信息select * from emp where ename not like 'k%';11. 案例:查询emp表中名字中不包含‘A’的所有员工的信息select * from emp where ename not like '%a%'12. 案例:做文员的员工人数(job= CLERK 的)select count(*) from emp where job='clerk';13. 案例:销售人员job: SALESMAN 的最高薪水select max(sal) from emp where job='salesman';14. 案例:最早和最晚入职时间select min(hiredate),max(hiredate) from emp;15. 案例:查询emp表中员工的编号,姓名,职位,工资,并且工资在1000~2000之间。
sql语句练习题完整版
1、查询Student表中的所有记录的Sname、Ssex和Class列2、查询教师所有的单位即不重复的Depart列。
3、查询Student表的所有记录。
4、查询Score表中成绩在60到80之间的所有记录。
5、查询Score表中成绩为85,86或88的记录。
6、查询Student表中“95031”班或性别为“女”的同学记录。
7、以Class降序查询Student表的所有记录。
8、以Cno升序、Degree降序查询Score表的所有记录。
9、查询“95031”班的学生人数。
10、查询Score表中的最高分的学生学号和课程号。
11、查询…3-105‟号课程的平均分。
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
13、查询最低分大于70,最高分小于90的Sno列。
14、查询所有学生的Sname、Cno和Degree列。
15、查询所有学生的Sno、Cname和Degree列。
16、查询所有学生的Sname、Cname和Degree列。
17、查询“95033”班所选课程的平均分。
18、假设使用如下命令建立了一个grade表:create table grade(low number(3,0),upp number(3),rank char(1));insert into grade values(90,100,‟A‟);insert into grade values(80,89,‟B‟);insert into grade values(70,79,‟C‟)insert into grade values(60,69,‟D‟);insert into grade values(0,59,‟E‟);commit;现查询所有同学的Sno、Cno和rank列。
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
SQL语句练习及答案
现在有一教学管理系统,具体的关系模式如下:Student (no, name, sex, birthday, class)Teacher (no, name, sex, birthday, prof, depart)Course (cno, cname, tno)Score (no, cno, degree)其中表中包含如下数据:Course表:Score表:Student表:Teacher表:根据上面描述完成下面问题:(注意:注意保存脚本,尤其是DDL和DML,以便进行数据还原)DDL1.写出上述表的建表语句。
命令:create table Student(no nvarchar(5),name nvarchar(5),sex nvarchar(1),birthday datetime,class nvarchar(5))DML2.给出相应的INSERT语句来完成题中给出数据的插入。
命令:单表查询3.以class降序输出student的所有记录(student表全部属性)命令:select*from Student order by class desc4.列出教师所在的单位depart(不重复)。
命令:select distinct depart from teacher5.列出student表中所有记录的name、sex和class列命令:select name,sex,class from student6.输出student中不姓王的同学的姓名。
命令:select name from Student where name not like'王%'7.输出成绩为85或86或88或在60-80之间的记录(no,cno,degree)命令:select*from Score where degree=85 or degree=86 or degree=88 or degree between60 and 808.输出班级为95001或性别为‘女’的同学(student表全部属性)命令:select*from Student where class='95001'or sex='女'9.以cno升序、degree降序输出score的所有记录。
sql初级练习题
sql初级练习题在数据库管理系统(DBMS)中,SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。
对于初学者来说,通过练习SQL语句可以掌握基本的查询、插入、更新和删除数据的操作。
下面将介绍一些SQL初级练习题,帮助读者提高他们的SQL技能。
1. 查询数据假设我们有一个名为"students"的表,包含以下列:id, name, age, gender。
请编写SQL语句来查询表中所有学生的信息。
```sqlSELECT * FROM students;```2. 条件查询现在我们只想查询年龄大于等于18岁的学生信息,可以使用以下SQL语句:```sqlSELECT * FROM students WHERE age >= 18;```3. 模糊查询我们想查询名字中包含"张"字的学生信息,可以使用以下SQL语句:```sqlSELECT * FROM students WHERE name LIKE '%张%';```4. 排序查询我们想按照年龄从小到大的顺序查询学生信息,可以使用以下SQL 语句:```sqlSELECT * FROM students ORDER BY age ASC;```5. 统计查询我们想知道学生表中的总学生人数,可以使用以下SQL语句:```sqlSELECT COUNT(*) FROM students;```6. 分组查询我们想按照性别统计学生的人数,可以使用以下SQL语句:```sqlSELECT gender, COUNT(*) FROM students GROUP BY gender;```7. 删除数据假设我们需要删除年龄小于18岁的学生信息,可以使用以下SQL 语句:```sqlDELETE FROM students WHERE age < 18;```8. 更新数据如果我们要将名字为"张三"的学生年龄更新为20岁,可以使用以下SQL语句:```sqlUPDATE students SET age = 20 WHERE name = '张三';```通过以上练习题,读者可以熟悉SQL语句的基本操作。
SQL语句练习及参考答案
SQL语句练习及参考答案SQL 语句练习1.设学⽣选课数据库有关系S (sno,sname,age,sex )、SC (sno,cno,grade )和C(cno,cname,teacher ),分别表⽰学⽣、选课和课程,sno 代表学号,sname 代表学⽣姓名,age 代表年龄,sex 代表性别,grade 代表成绩,cno 代表课程号,teacher 代表任课教师。
试完成表⽰下列查询。
(1)检索年龄⼤于21的男学⽣学号(sno)和姓名(sname)。
(2)建⽴性别只能为“男”、“⼥”的约束。
(3)创建⼀个视图v1,该视图⽤来查询学⽣的选课情况,要求包含:学⽣姓名(sname),课程名(cname),任课教师teacher 和成绩grade 。
(4)检索选修课程号为k1和k5的学⽣学号(sno)。
(5)检索全部学⽣都选修的课程的课程号(cno)和课程名(cname)。
(6)删除所有男同学的选课记录。
1.(1)select sno,snae from s where sex=’男’ and age>21 (2)alter table s add constraint c1 check sex in (‘男’,’⼥’)(3)create view v1 as select sname,cname,teacher,grade from s,sc,c where s.sno=sc.sno and/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o (4)select sno fromsc sc1 where cno=’k1’ and exists (se lect * fromsc sc2 where sc1.sno =sc2.sno and/doc/62176c89fe4733687e21aaca.html o=’k5’)(5)select cno,cnam from c where not exists (select * from s where not exists (select * from sc where/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o and s.sno=sc.sno)(6)delete from sc where sno in (select sno from s where sex=’男’)或delete sc from sc,s where s.sno=sc.sno and sex=’男’2.设图书借阅数据库有关系图书(图书编号,书名,作者,出版社,出版时间,图书类别)、读者(读者编号,姓名,读者类别)和借阅(读者编号, 图书编号, 借阅⽇期,还期)。
SQL语句练习题(精品文档)
S Q L语言一、选择题1.S Q L语言是()的语言,容易学习。
A.过程化B.非过程化C.格式化D.导航式2. S Q L语言的数据操纵语句包括S E L E C T、I N S E R T、U P D A T E、D E L E T E等。
其中最重要的,也是使用最频繁的语句是()。
A.S E L E C TB.I N S E R TC.U P D A T ED.D E L E T E3.在视图上不能完成的操作是()。
A.更新视图B.查询C.在视图上定义新的表D.在视图上定义新的视图4.S Q L语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,C R E A T E、D R O P、A L T E R语句是实现哪种功能()。
A.数据查询B.数据操纵C.数据定义D.数据控制5.S Q L语言中,删除一个视图的命令是()。
A.D E L E T EB.D R O PC.C L E A RD.R E M O V E6.在S Q L语言中的视图V I E W是数据库的()。
A.外模式B.模式C.内模式D.存储模式7.下列的S Q L语句中,()不是数据定义语句。
A.C R E A T E T A B L EB.D R O P V I E WC.C R E A T E V I E WD.G R A N T8.若要撤销数据库中已经存在的表S,可用()。
A.D E L E T E T A B L E SB.D E L E T E SC.D R O P T A B L E SD.D R O P S9.若要在基本表S中增加一列C N(课程名),可用()。
A.A D D T A B L E S(C N C H A R(8))B.A D D T A B L E S A L T E R(C N C H A R(8))C.A L T E R T A B L E S A D D(C N C H A R(8))D.A L T E R T A B L E S(A D D C N C H A R(8))10.学生关系模式S(S#,S n a m e,S e x,A g e),S的属性分别表示学生的学号、姓名、性别、年龄。
50条数据库sql语句及答案
select teaid from tblTeacher where teaname = '叶平')))
--练习
select stuid from tblScore where courseid in (
--11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;
------运用连接查询
SELECT DISTINCT ST.* FROM tblStudent ST, tblScore SC WHERE ST.STUID = SC.STUID
AND SC.COURSEID IN
select stuid from tblScore GROUP BY STUID HAVING max(SCORE)<60)
--10、查询没有学全所有课的同学的学号、姓名;
--练习
SELECT TS.STUID,TS.STUNAME,COUNT(TSC.SCORE) FROM tblStudent TS
TC.COURSEID INNER JOIN tblTeacher TT ON TC.TEAID = TT.TEAID
WHERE TT.TEANAME ='叶平')
--对
SELECT STUID, STUNAME FROM tblStudent WHERE STUID NOT IN(
where A.SCORE > B.SCORE
--老师讲的方法
SELECT T.* FROM tblScore T WHERE T.COURSEID = 1 AND
sql练习题
sql练习题SQL练习题在现代信息化社会中,数据的处理和管理变得愈发重要。
而SQL(Structured Query Language)作为一种用于管理和处理关系型数据库的语言,也成为了各行各业从事数据分析和管理的必备技能之一。
为了提高自己的SQL技能,我们可以通过练习题来不断巩固和提升。
练习题一:查询商品信息假设有一个商品表(Product)和一个供应商表(Supplier),其中商品表包含了商品的ID、名称、价格和供应商ID等信息,供应商表包含了供应商的ID和名称等信息。
请写出一条SQL语句,查询出所有商品的名称、价格和供应商名称。
解答一:```sqlSELECT , Product.Price, FROM ProductJOIN Supplier ON Product.SupplierID = Supplier.ID;```练习题二:统计销售额假设有一个订单表(Orders)和一个订单详情表(OrderDetails),其中订单表包含了订单的ID、日期和客户ID等信息,订单详情表包含了订单详情的ID、订单ID、商品ID和数量等信息。
请写出一条SQL语句,统计每个客户的总销售额,并按销售额降序排序。
解答二:```sqlSELECT Orders.CustomerID, SUM(Product.Price * OrderDetails.Quantity) AS TotalSalesFROM OrdersJOIN OrderDetails ON Orders.ID = OrderDetails.OrderIDJOIN Product ON OrderDetails.ProductID = Product.IDGROUP BY Orders.CustomerIDORDER BY TotalSales DESC;```练习题三:查询员工信息假设有一个员工表(Employee)和一个部门表(Department),其中员工表包含了员工的ID、姓名和部门ID等信息,部门表包含了部门的ID和名称等信息。
SQL经典50题练习
创建表及插⼊数据学⽣表Studentcreate table SC(SId varchar(10),CId varchar(10),score decimal(18,1));insert into SC values('01' , '01' , 80);insert into SC values('01' , '02' , 90);insert into SC values('01' , '03' , 99);insert into SC values('02' , '01' , 70);insert into SC values('02' , '02' , 60);insert into SC values('02' , '03' , 80);insert into SC values('03' , '01' , 80);insert into SC values('03' , '02' , 80);insert into SC values('03' , '03' , 80);insert into SC values('04' , '01' , 50);insert into SC values('04' , '02' , 30);insert into SC values('04' , '03' , 20);insert into SC values('05' , '01' , 76);insert into SC values('05' , '02' , 87);insert into SC values('06' , '01' , 31);insert into SC values('06' , '03' , 34);insert into SC values('07' , '02' , 89);insert into SC values('07' , '03' , 98);练习题⽬1. 查询" 01 "课程⽐" 02 "课程成绩⾼的学⽣的信息及课程分数1.1 查询同时存在" 01 "课程和" 02 "课程的情况1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显⽰为 null )1.3 查询不存在" 01 "课程但存在" 02 "课程的情况2. 查询平均成绩⼤于等于 60 分的同学的学⽣编号和学⽣姓名和平均成绩3. 查询在 SC 表存在成绩的学⽣信息4. 查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩(没成绩的显⽰为 null )4.1 查有成绩的学⽣信息5. 查询「李」姓⽼师的数量6. 查询学过「张三」⽼师授课的同学的信息7. 查询没有学全所有课程的同学的信息8. 查询⾄少有⼀门课与学号为" 01 "的同学所学相同的同学的信息9. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息10. 查询没学过"张三"⽼师讲授的任⼀门课程的学⽣姓名11. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩12. 检索" 01 "课程分数⼩于 60,按分数降序排列的学⽣信息13. 按平均成绩从⾼到低显⽰所有学⽣的所有课程的成绩以及平均成绩14. 查询各科成绩最⾼分、最低分和平均分:以如下形式显⽰:课程 ID,课程 name,最⾼分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90要求输出课程号和选修⼈数,查询结果按⼈数降序排列,若⼈数相同,按课程号升序排列15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15.1 按各科成绩进⾏排序,并显⽰排名, Score 重复时合并名次16. 查询学⽣的总成绩,并进⾏排名,总分重复时保留名次空缺16.1 查询学⽣的总成绩,并进⾏排名,总分重复时不保留名次空缺17. 统计各科成绩各分数段⼈数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分⽐18. 查询各科成绩前三名的记录19. 查询每门课程被选修的学⽣数20. 查询出只选修两门课程的学⽣学号和姓名21. 查询男⽣、⼥⽣⼈数22. 查询名字中含有「风」字的学⽣信息23. 查询同名同性学⽣名单,并统计同名⼈数24. 查询 1990 年出⽣的学⽣名单25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列26. 查询平均成绩⼤于等于 85 的所有学⽣的学号、姓名和平均成绩27. 查询课程名称为「数学」,且分数低于 60 的学⽣姓名和分数28. 查询所有学⽣的课程及分数情况(存在学⽣没成绩,没选课的情况)29. 查询任何⼀门课程成绩在 70 分以上的姓名、课程名称和分数30. 查询不及格的课程31. 查询课程编号为 01 且课程成绩在 80 分以上的学⽣的学号和姓名32. 求每门课程的学⽣⼈数33. 成绩不重复,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成绩34. 成绩有重复的情况下,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成 绩35. 查询不同课程成绩相同的学⽣的学⽣编号、课程编号、学⽣成绩36. 查询每门功成绩最好的前两名37. 统计每门课程的学⽣选修⼈数(超过 5 ⼈的课程才统计)。
sql语句练习50题
sql语句练习50题Student(Sid,Sname,Sage,Ssex) 学⽣表Course(Cid,Cname,Tid) 课程表SC(Sid,Cid,score) 成绩表Teacher(Tid,Tname) 教师表练习内容:1.查询“某1”课程⽐“某2”课程成绩⾼的所有学⽣的学号;SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b WHEREa.score>b.score AND a.sid=b.sid;此题知识点,嵌套查询和给查出来的表起别名2.查询平均成绩⼤于60分的同学的学号和平均成绩;SELECT sid,avg(score) FROM sc GROUP BY sid having avg(score) >60;此题知识点,GROUP BY 语句⽤于结合合计函数,根据⼀个或多个列对结果集进⾏分组。
group by后⾯不能接where,having代替了where3.查询所有同学的学号、姓名、选课数、总成绩SELECT Student.sid,Student.Sname,count(SC.cid),sum(score)FROM Student left Outer JOIN SC on Student.sid=SC.cid GROUP BY Student.sid,Sname4.查询姓“李”的⽼师的个数;select count(teacher.tid)from teacher where teacher.tname like'李%'5.查询没学过“叶平”⽼师课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student WHERE sid not in (SELECT distinct( SC.sid) FROM SC,Course,Teacher WHERE SC.cid=Course.cid AND Teacher.id=Course.tid AND Teacher.Tname='叶平');此题知识点,distinct是去重的作⽤6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名;select a.SID,a.SNAME from (select student.SNAME,student.SID from student,course,sc where cname='c++'and sc.sid=student.sid and sc.cid=course.cid) a,(select student.SNAME,student.SID from student,course,sc where cname='english'and sc.sid=student.sid and sc.cid=course.cid) b where a.sid=b.sid;标准答案(但是好像不好使)SELECT Student.S#,Student.Sname FROM Student,SC WHERE Student.S#=SC.S# ANDSC.C#='001'and exists( SELECT * FROM SC as SC_2 WHERE SC_2.S#=SC.S# AND SC_2.C#='002');此题知识点,exists是在集合⾥找数据,as就是起别名7.查询学过“叶平”⽼师所教的所有课的同学的学号、姓名;select a.sid,a.sname from (select student.sid,student.sname from student,teacher,course,scwhere teacher.TNAME='杨巍巍' and teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid) a标准答案:SELECT sid,Sname FROM Student WHERE sid in (SELECT sid FROM SC ,Course ,Teacher WHERE SC.cid=Course.cid AND Teacher.tid=Course.tid AND Teacher.Tname='杨巍巍' GROUP BY sid having count(SC.cid)=(SELECT count(cid) FROM Course,Teacher WHERE Teacher.tid=Course.tid AND Tname='杨巍巍'))8.查询课程编号“”的成绩⽐课程编号“”课程低的所有同学的学号、姓名;select a.sid,a.sname from(select student.SID,student.sname,sc.SCORE from student,sc where student.sid=sc.sid and sc.cid=1) a, (select student.SID,student.sname,sc.score from student,sc where student.sid=sc.sid and sc.cid=2) b where a.score<b.score anda.sid=b.sid标准答案:SELECT sid,Sname FROM (SELECT Student.sid,Student.Sname,score ,(SELECT score FROM SC SC_2 WHERE SC_2.sid=Student.sid AND SC_2.cid=1) score2 FROM Student,SCWHERE Student.sid=SC.sid AND cid=1) S_2 WHERE score2 <score;9.查询所有课程成绩⼩于分的同学的学号、姓名;SELECT sid,Sname FROM Student WHERE sid not in (SELECT Student.sid FROM Student,SC WHERE Student.sid=SC.sid AND score>60);此题知识点,先查出⼤于60分的,然后not in 就是⼩于60分的了10.查询没有学全所有课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student,SCWHERE Student.sid=SC.sid GROUP BY Student.sid,Student.Sname having count(cid) <(SELECT count(cid) FROM Course);11.查询⾄少有⼀门课与学号为“”的同学所学相同的同学的学号和姓名;12.查询⾄少学过学号为“”同学所有⼀门课的其他同学学号和姓名;SELECT student.sid,student.Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHERE sid=1)此题知识点,SELECT sid,Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHEREsid=1)这样写是错误的,因为from后⾯是两个表,不能明确是哪个表⾥⾯的sid和sname所以错误提⽰是“未明确定义列”13.把“SC”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩;update sc set score=(select avg(score) from sc,course,teacher where course.cid=sc.cid and course.tid=teacher.tid andteacher.tname='杨巍巍')14.查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;SELECT sid FROM SC WHERE cid in (SELECT cid FROM SC WHERE sid=6) GROUP BY sid having count(*)=(SELECT count(*) FROM SC WHERE sid=6);此题知识点,⽤数量来判断15.删除学习“叶平”⽼师课的SC表记录;delete from sc s where s.cid in (select c.cid from teacher t,course c where t.tid = c.tid and tname='李⼦')此题知识点,嵌套查询可以分布考虑,先查出李⼦⽼师都交了什么课的id,然后再删除那些id的值16.向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、课程的平均成绩;Insert into SC SELECT sid,2,(SELECT avg(score) FROM SC WHERE cid=2) FROM Student WHERE sid not in (SELECT sid FROM SC WHERE cid=2);17.按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:学⽣ID,,数据库,企业管理,英语,有效课程数,有效平均分;(没做出来)18.查询各科成绩最⾼和最低的分:以如下形式显⽰:课程ID,最⾼分,最低分;select cid as 课程号,max(score)as 最⾼分,min(score) as 最低分 from sc group by cid标准答案(但是运⾏不好使)SELECT L.cid As 课程ID,L.score AS 最⾼分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.cid = R.cid ANDL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.cid = IL.cid AND IM.sid=IL.sidGROUP BY IL.cid)AND R.Score = (SELECT MIN(IR.score) FROM SC AS IR WHERE R.cid = IR.cid GROUP BY IR.cid );19.按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序26.查询每门课程被选修的学⽣数select sc.cid,count(sc.sid) from sc,course where sc.cid=course.cid group by sc.cid27.查询出只选修了⼀门课程的全部学⽣的学号和姓名SELECT SC.sid,Student.Sname,count(cid) AS 选课数 FROM SC ,StudentWHERE SC.sid=Student.sid GROUP BY SC.sid ,Student.Sname having count(cid)=1;32.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列SELECT Cid,Avg(score) FROM SC GROUP BY cid ORDER BY Avg(score),cid DESC ;37.查询不及格的课程,并按课程号从⼤到⼩排列SELECT cid,sid FROM sc WHERE score <60 ORDER BY cid38.查询课程编号为且课程成绩在分以上的学⽣的学号和姓名;select student.sid,student.sname from sc,student where sc.cid=1 and sc.score>60 and sc.sid=student.sid40.查询选修“叶平”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩select student.sname,sc.score from sc,student,teacher,course c where teacher.tname='李⼦'and teacher.tid=c.tid and c.cid=sc.cid and sc.sid=student.sid and sc.score=(select max(score)from sc where sc.cid=c.cid)41.查询各个课程及相应的选修⼈数select sc.cid ,count(sc.sid)from sc,student where sc.sid=student.sid group by sc.cid43.查询每门功成绩最好的前两名44.统计每门课程的学⽣选修⼈数(超过⼈的课程才统计)。
SQL查询语句练习作业
一、创建名为“student”的表,结构见表1,内容见表2表1 student表结构字段名类型宽度学号字符型10姓名字符型10性别字符型 4出生日期日期型8专业字符型20年级数值型10表2 student表二、练习SQL查询语句——基础的select格式: select 字段名 from 表名1、写出查找student表中所有字段的语句,并在命令窗口测试2、写出查找student表中学号的语句,并在命令窗口测试3、写出查找student表中姓名的语句,并在命令窗口测试4、写出查找student表中性别的语句,并在命令窗口测试5、写出查找student表中出生日期的语句,并在命令窗口测试6、写出查找student表中专业的语句,并在命令窗口测试7、写出查找student表中年级的语句,并在命令窗口测试8、写出查找student表中学号和姓名的语句,并在命令窗口测试(注意逗号是英文状态)9、写出查找student表中学号、姓名和性别的语句,并在命令窗口测试10、写出查找student表中学号、姓名、性别和出生日期的语句,并在命令窗口测试11、写出查找student表中学号、姓名、性别、出生日期和专业的语句,并在命令窗口测试12、写出查找student表中学号、姓名、性别、出生日期、专业和年级的语句,并在命令窗口测试三、练习SQL查询语句——where条件查询格式: select 字段名 from 表名 where 条件1、查找student表中学号是101001的学生,写出语句,并在命令窗口测试2、查找student表中李玲的个人信息,写出语句,并在命令窗口测试3、查找student表中所有的男学生,写出语句,并在命令窗口测试4、查找student表中的在1992年3月1日(含)之后出生的学生,写出语句,并在命令窗口测试5、查找student表中信息管理专业的学生,写出语句,并在命令窗口测试6、查找student表中2012级的学生,写出语句,并在命令窗口测试四、练习SQL查询语句——where条件查询AND OR格式: select 字段名 from 表名 where 条件1 and/or 条件21、查找student表中学号为121001和131005的学生信息,写出语句,并在命令窗口测试2、查找student表中李泽田和王海东的个人信息,写出语句,并在命令窗口测试3、查找student表中工商管理专业的男生信息,写出语句,并在命令窗口测试4、查找student表中在1992年和1993年出生的学生,写出语句,并在命令窗口测试5、查找student表中信息管理专业和工商管理专业的女学生,写出语句,并在命令窗口测试6、查找student表中2012级和2013级中1993年出生的学生,写出语句,并在命令窗口测试五、练习SQL查询语句——where条件查询like格式: select 字段名 from 表名 where 字段名like 套式1、查找student表中姓王的学生信息,写出语句,并在命令窗口测试2、查找student表中姓王和姓贾的学生信息,写出语句,并在命令窗口测试3、查找student表中姓王、姓贾和姓李的学生信息,写出语句,并在命令窗口测试4、查找student表中姓名中含“泽”的学生信息,写出语句,并在命令窗口测试5、查找student表中姓名中含“文”的学生信息,写出语句,并在命令窗口测试6、查找student表中姓名中最后1个字是“玲”的学生信息,写出语句,并在命令窗口测试7、查找student表中姓名中最后1个字是“文”的学生信息,写出语句,并在命令窗口测试8、查找student表中姓名有3个字,中间的字是“文”的学生,写出语句,并在命令窗口测试9、查找student表中姓王的男生信息,写出语句,并在命令窗口测试10、查找student表中姓王和姓李的女生信息,写出语句,并在命令窗口测试11、查找student表中姓名中含“文”的女生信息,写出语句,并在命令窗口测试六、练习SQL查询语句——where条件查询between格式: select 字段名 from 表名 where 字段名between 值1 and 值2 1、查找student表中在1992年出生的学生,写出语句,并在命令窗口测试2、查找student表中在1992年和1993年出生的学生,写出语句,并在命令窗口测试3、查找student表中在2010级、2011级、2012级的学生,写出语句,并在命令窗口测试七、练习SQL查询语句——where条件查询order by格式: select 字段名 from 表名 where 条件 order by 字段名 asc/desc 1、把student表中的学生信息按学号降序排列显示,写出语句,并在命令窗口测试2、把student表中的学生信息按姓名降序排列显示,写出语句,并在命令窗口测试3、把student表中的学生信息按姓名升序排列显示,写出语句,并在命令窗口测试4、把student表中的学生信息按年龄升序排列显示,写出语句,并在命令窗口测试5、把student表中的学生信息按年龄降序排列显示,写出语句,并在命令窗口测试6、查找student表中所有的男生,并按学号降序排列,写出语句,并在命令窗口测试6、查找student表中所有的女生,并按姓名升序排列,写出语句,并在命令窗口测试7、查找student表中的在1992年出生的学生,并按年龄降序排列,写出语句,并在命令窗口测试8、查找student表中信息管理专业的学生,并按照姓名降序排列,写出语句,并在命令窗口测试9、把student表中的学生信息按性别分类显示,男生在前,女生在后,男生和女生,各自按照姓名升序排列,写出语句,并在命令窗口测试八、练习SQL查询语句——where条件查询count格式: select count(*) from 表名 where 条件1、统计student表中的学生总人数,写出语句,并在命令窗口测试2、统计student表中男生人数,写出语句,并在命令窗口测试3、统计student表中姓王的人数,写出语句,并在命令窗口测试。
(完整版)sql练习题+答案
(一) 新建以下几个表student(学生表):其中约束如下:(1)学号不能存在相同的(2)名字为非空(3)性别的值只能是’男’或’女’(4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系(5)出生日期为日期格式(6)年龄为数值型,且在0~100之间cs(成绩表):其中约束如下:(1)sno和cno分别参照student和course表中的sno,cno的字段(2)cj(成绩)只能在0〜100之间,可以不输入值create table cs (sno smallint not null referencesstudent ( sno ), ----定义成外键cno smallint not null referencescourse ( cno ), ----定义成外键cj smallint constraint e check (cj between0 and 100 ),---- 检查约束一—j(成绩)只能在~100之间,可以不输入值constraint f primary key ( sno , cno )---- 定义学生学号和课程号为sc表的主键)course(课程表)其约束如下:(1)课程号(cno)不能有重复的(2)课程名(cname非空(三)针对学生课程数据库查询(1)查询全体学生的学号与姓名。
Select sno , sname from student(2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。
(3)查询全体学生的详细记录。
select * from student(4)查全体学生的姓名及其出生年份。
select sname , birth from student(5)查询学校中有哪些系。
select distinct dept from student(6)查询选修了课程的学生学号。
select sno from cs where eno is not null(7)查询所有年龄在20岁以下的学生姓名及其年龄。
sql语句练习
SQL习题集数据库拆表原则1.简单字段中的复合字段:解决方法:向上打通,或拆成两表2.完全依赖:知道a就能知道b,返过来就不一定.实现:将同一个主题的东西放在一起3.无传递依赖。
将传递依赖转为直接依赖。
原因:减少插入冗余。
减少增删异常。
4.当出现一对多时不能横拆,一定拆成两个表,特别的固定范围可以横拆(签到管理)5.多对多必有中间表6.代码表,大量重复的或枚举型可以用代码表.7.能计算的字段不要数据定义语句DDLcreate alter drop数据控制语句DCLgrant deny revoke数据操纵语句DMLselect update insert delete一.SQL Server 2000Select 变化集锦1.查询所有字段(效率低)查询所有的老师select *from dbo.教师2.字段枚举查询教师的ID,及姓名两项select 教师_ID,教师名from dbo.教师3.字段取别名方法有二1)as可以省略select 教师名as teacherfrom dbo.教师2)select teacher = 教师名from dbo.教师4.字段的可计算性1) 简单字段计算教师工资的10%select 工资*0.1from dbo.教师2)把一个检索结果作为查询字段本学校的师生比例select(select count(*)from dbo.教师)/1.0/(select count(*)from dbo.学生)5 取检索结果的前几个select top 3 教师_IDfrom dbo.教师6 取检索结果总数的百分比select top 30 percent 教师_IDfrom dbo.教师7 去掉重复记录select distinct 性别_IDfrom dbo.教师8 在聚合统计函数中统计不重复指定字段select count(distinct 系_ID )from dbo.教师9 case when then else end在seelct中的应用从教师表中查询,将性别_id是1的显示为男,是2的显示为女select(casewhen 性别_ID=1 then '男'when 性别_ID=2 then '女'end)from dbo.教师横向查询男女人数selectsum(casewhen 性别_ID=1 then 1else 0end) as 'nan',sum(casewhen 性别_ID=2 then 1else 0end) as 'nv'from dbo.教师10 可以重复列出表的的字段select *,*,*from 教师11 检索结果放常量select 教师名, '出生于',出生日期from dbo.教师-----------------------------------From变化集锦1.从一个表中检索select *from dbo.教师2 从一个检索结果中再检索即从临时表中检索select *from(select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_IDfrom dbo.教师)lin –sqlserver2000中临时表通常要起别名where lin.教师_ID <43.从多表中检索,构成迪卡尔乘积(效率低)select dbo.教师.*,系名from dbo.教师,dbo.系where dbo.教师.系_ID=dbo.系.系_ID4 多表的联接查询1)左连接(尊重左边)select *from dbo.系left join dbo.教师on dbo.系.系_ID=dbo.教师.系_ID2)右连接(尊重右边)select *from dbo.系right join dbo.教师on dbo.系.系_ID=dbo.教师.系_ID3)内连接(都不尊重,即两边都得有)下例为两个以上表的连接写法select *from dbo.系inner join dbo.教师on dbo.系.系_ID=dbo.教师.系_ID inner join dbo.教师认课on dbo.教师.教师_ID=dbo.教师认课.教师_ID4)全连接(都尊重)select *from dbo.系full join dbo.教师on dbo.系.系_ID=dbo.教师.系_ID5. 给被检索表起别名注意:起了别名就一定用别名引用字段错误的select dbo.教师.教师名from dbo.教师js正确的select js.教师名from dbo.教师jswhere集锦1.常规关系运算>、>=、<、<=、!=、<>、=select 教师_IDfrom dbo.教师where 教师_ID<>1只检索表结构不要任何数据Select *From dbo.教师Where 1!=12.常规逻辑运算not 、and 、orselect 教师_IDfrom dbo.教师where not( 教师_ID>=1 and 教师_ID<=8 )3.区间教师_ID>=1 并且教师_ID<=8select 教师_IDfrom dbo.教师where 教师_ID between 1 and 84.检索null值select 教师_IDfrom dbo.教师where 出生日期is null5.关于字符的模糊查询1)姓张的所有老师select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师where 教师名like '%张' --%代表任意多个字2)姓张的但名字只有两个字的老师select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师where 教师名like '_张' --_ 只代表一个字3)名字中含有国字的老师select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师where 教师名like '%国%'4)教师名的第一个字母在a-m之间的教师select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师where 教师名like '[a-m]%'5)教师名的第一个字母在不在a-m之间的教师select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师where 教师名like '[^a-m]%'6)教师名的第一个字母是a或b或m的教师select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师where 教师名like '[a,b,m]%'7) 教师名的第一个字母是a到k之间或o到x之间的教师select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_IDfrom dbo.教师where 教师名like '[a-k,o-x]%'6.关于IN的用法1)枚举型select *from dbo.教师where 教师_ID in ( 1,3,5)select *from dbo.教师where 教师_ID not in ( 1,3,5)2)嵌套子查询型有课上的老师select *from dbo.教师where 教师_ID in(select 教师_IDfrom dbo.教师认课)7. exists 判断子查询是否有结果(强调有无,不关心具体是什么)select *from dbo.教师where exists --存在(select *from dbo.教师认课where dbo.教师认课.教师_ID=dbo.教师.教师_ID)8. any 其中一个教师ID大于所有教师ID中任意一个的教师(相当于大于最小的教师ID) select *from dbo.教师where 教师_ID > any(select 教师_IDfrom dbo.教师认课)9.all 全部相当于大于最大maxselect *from dbo.教师where 教师_ID > all(select 教师_IDfrom dbo.教师认课)Group by 集锦1.group by 通常与聚合函数(avg ,sum ,count,max,min)配合使用查询出学生表中男女生人数select count(*) as renshufrom dbo.学生group by 性别_ID2针对多字段的分组每个系的男女生人数select count(*) as renshufrom dbo.学生group by 性别_ID,系_ID3 多表查询中的分组应用select count(*) as rs,系名from dbo.学生xs inner join dbo.系xion xs.系_ID = xi.系_IDgroup by 系名4 对于计算字段的分组应用查询出计算机系学生数和其它系的学生数select count(*),(casewhen 系_ID=1 then 'jsjx'else 'qt'end)from dbo.学生group by(casewhen 系_ID=1 then 'jsjx'else 'qt'end)5 分组条件having的用法系人数在10人以上的系select count(*) as shu ,系_IDfrom dbo.学生group by 系_IDhaving count(*) >10或写成select *from(select count(*) as shu ,系_IDfrom dbo.学生group by 系_ID) linshiwhere linshi.shu >10order by集锦1.对单个字段的排序(asc升序可省略desc降序)select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_IDfrom dbo.教师order by 教师名2.多字段的排序(先按第一个字段排序,如果相同再按第二个字段排序)写法1。
SQL查询语句练习(50题)
SQL查询语句练习(50题)Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;2、查询平均成绩大于60分的同学的学号和平均成绩;3、查询所有同学的学号、姓名、选课数、总成绩;4、查询姓“李”的老师的个数;5、查询没学过“叶平”老师课的同学的学号、姓名;6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;9、查询所有课程成绩小于60分的同学的学号、姓名;10、查询没有学全所有课的同学的学号、姓名;11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;15、删除学习“叶平”老师课的SC表记录;16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、002号课的平均成绩;17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分19、按各科平均成绩从低到高和及格率的百分数从高到低顺序20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)21、查询不同老师所教不同课程平均分从高到低显示22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]24、查询学生平均成绩及其名次25、查询各科成绩前三名的记录:(不考虑成绩并列情况)26、查询每门课程被选修的学生数27、查询出只选修了一门课程的全部学生的学号和姓名28、查询男生、女生人数29、查询姓“张”的学生名单30、查询同名同性学生名单,并统计同名人数31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数35、查询所有学生的选课情况;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;37、查询不及格的课程,并按课程号从大到小排列38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;39、求选了课程的学生人数40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩41、查询各个课程及相应的选修人数42、查询不同课程成绩相同的学生的学号、课程号、学生成绩43、查询每门功成绩最好的前两名44、统计每门课程的学生选修人数(超过10人的课程才统计)。
SQL语句练习
SQL语句练习单表练习employee表:create table employee(id int,name varchar(20),sex varchar(10),birthday date,salary float,resume text);insert into employee values(1,"zhangsan","male","1980-11-25",2000,"good body"); insert into employee values(2,"lisi","male","1980-04-25",1000,"good body");insert into employee values(3,"xiaohong","female","1978-11-25",4000,"good girl");1.将所有员⼯薪⽔修改为5000元。
2.将姓名为’zhangsan’的员⼯薪⽔修改为3000元。
3.将姓名为’lisi’的员⼯薪⽔修改为4000元,sex改为female。
4.将xiaohong的薪⽔在原有基础上增加1000元。
答案:/*将所有员⼯薪⽔修改为5000元。
*/UPDATE employee SET salary=5000;SELECT * FROM employee;/*将姓名为’zhangsan’的员⼯薪⽔修改为3000元。
*/UPDATE employee SET salary=3000 WHERE NAME='zhangsan';SELECT * FROM employee;/*将姓名为’lisi’的员⼯薪⽔修改为4000元,sex改为female。
基本的SQL语句练习
基本的SQL语句练习(学生课程表)创建表[c-sharp]view plaincopyprint?1.DROP TABLE IF EXISTS student;2.CREATE TABLE student(3.sno int auto_increment primary key,4.sname varchar(8),5.ssex varchar(3),6.sage int ,7.sclass varchar(6)8.) ENGINE=InnoDB DEFAULT CHARSET=utf8;9.INSERT INTO student(sname,ssex,sage,sclass) VALUES('李勇','男',20,'y01');10.INSERT INTO student(sname,ssex,sage,sclass) VALUES('刘晨','男',21,'y02');11.INSERT INTO student(sname,ssex,sage,sclass) VALUES('王敏','女',19,'y02');12.INSERT INTO student(sname,ssex,sage,sclass) VALUES('张力','男',25,'y05');13.DROP TABLE IF EXISTS course;14.CREATE TABLE course(o int auto_increment primary key,ame varchar(20),redit int18.) ENGINE=InnoDB DEFAULT CHARSET=utf8;19.INSERT INTO course(cname,ccredit) VALUES('C语言',5);20.INSERT INTO course(cname,ccredit) VALUES('数据库',5);21.INSERT INTO course(cname,ccredit) VALUES('开发模式_VB',5);22.DROP TABLE IF EXISTS sc;23.CREATE TABLE sc(24.sno int references student(sno) on delete cascade,o int references course(cno) on delete cascade,26.grade int27.) ENGINE=InnoDB DEFAULT CHARSET=utf8;28.INSERT INTO sc VALUES(1,1,90);29.INSERT INTO sc VALUES(1,2,95);30.INSERT INTO sc VALUES(2,1,55);31.INSERT INTO sc VALUES(4,3,null);select s.sname,sc.grade from student s,sc where s.sno = sc.sno and sc.grade<60;11、查询年龄在19-20岁(包括19、20)之间的同学姓名、班级、年龄select sname,sclass,sage from student where sage in (19,20);(19、20 比较特殊选项少可以使用in)select sname,sclass,sage from student where sage between 19 and 20;select sname,sclass,sage from student where sage>=19 and sage<=20;12、查询年龄不在19-20岁之间的同学姓名、班级、年龄select sname,sclass,sage from student where sage not in (19,20);select sname,sclass,sage from student where sage not between 19 and 20;select sname,sclass,sage from student where sage<19 or sage>20;13、查询y02班级和y05班的同学的姓名、性别select sname,sclass from student where sclass in ('y02','y05');select sname,sclass from student where sclass='y02' or sclass='y05';14、查询不是y02或者y05班的同学的姓名、性别select sname,sage from student where sclass not in('y02','y05');select sname,sage from student where sclass!='y02' and sclass!='y05';select sname,sage from student where not sclass='y02' and not sclass='y05';15、查所有姓刘的同学的姓名、学号、性别( " % "表示一个或者多个," _ "表示只占一个字符)select sname,sno,ssex from student where sname like'刘%';16、查所有姓张且全名只有2个汉子的同学的所有信息select * from student where sname like'张_';17、某些学生未考试查缺成绩的同学的学号和课程号select sno,cno,grade from sc where grade is null;18、查询所有成绩的同学的学号、课程号和成绩select sno,cno,grade from sc where grade is not null;19、查y02班年龄在20岁一下的姓名和年龄select sname,sage from student where sclass='y02' and sage<20;20、查选修1号课程的同学的学号和成绩,按成绩降序排序select sno,grade from sc where cno=1 order by grade desc;21、查全体同学信息查询结果按所在班级的班级名称按降序排列,同班同学按年龄升序排列select * from student order by sclassdesc,sageasc;22、查询学员的总人数select count(sno) from student;23、查选修课程学院人数select count(*) from sc;24、统计1号课的学院平均成绩select avg(grade) 平均成绩from sc where cno=1;25、查选修1号课和同学最高成绩select max(grade) from sc where cno=1;26、求各个课程号及相应选课人数select cno,count(*) 选课人数from sc group by cno;27、查选取1门以上课程的同学学号和课程个数select sno,count(cno) from sc group by sno having count(cno)>1;28、查每个学员及其选修课程情况select sno,cno from sc;29、查每个学员及其选修课程情况对没有选课的也要输出其姓名、学号、性别、班级(注意:是作外连接student是主表)select st.sname,st.sno,st.ssex,st.sclass,o,sc.gradefrom student st left join sc onst.sno = sc.sno order by st.sname;30、查选取2号课程且成绩在90分以上的同学select * from sc where cno=2 and grade>90;31、查询每个同学学号姓名,选课程名称及其成绩select stu.sno,stu.sname,ame,sc.gradefrom student stu join sc on stu.sno = sc.snojoin course c on o = o;或者select stu.sno,stu.sname,ame,sc.gradefrom student stu,coursec,scwhere stu.sno=sc.sno and o= oorder by o desc;32、查与刘晨在一个班的同学select * from student where sclass=(select sclass from student where sname='刘晨'); 33、选取C语言的同学学号和姓名select s.sno,s.snamefrom student s join sc on s.sno=sc.snojoin course c on o=owhere ame='C语言';或者select sno,sname from student where sno in(select sno from sc where cno in(select cno from course where cname='C语言'));34、查其他班级中比y02班某一同学大的同学姓名和年龄select sname,sage from studentwhere sclass<>'y02' andsage > (select min(sage) from student where sclass='y02');或者(加入any 关键字)select sname,sage from studentwhere sclass<>'y02' andsage >any (select sage from student where sclass='y02');35、查其他班中比y02班同学全部都大的同学姓名和年龄select sname,sage from studentwhere sclass!='y02' andsage > (select max(sage) from student where sclass='y02');或者(加入all 关键字)select sname,sage from studentwhere sclass!='y02' andsage >all (select sage from student where sclass='y02');36、查选取1号课程的学员的姓名(在与查询的集合的包含关系时,最好使用in 、any、all)select s.sname from student s,scwhere s.sno = sc.sno and o=1;或者(子查询)select sname from student where sno in(select sno from sc where cno=1);37、查没有选取1号课程的学员的姓名(注意:要过滤已经选取过1号的同学,因为可能某同学多选修课程)说明:如果是过滤集合,就只能用in/all/anyselect sname from student where sno not in(select sno from sc where cno=1);38、查y02班同学及年龄不大于19岁的学员(union)select * from student where sclass='y02' unionselect * from student where sage<=19;解析:y02班级的同学与全年纪年龄不大于19岁的学生,而(sage<=19 and sclass='y02')表示为y02班级同学“且”年龄不大于19岁的同学,与题意不符。
sql语句基础题
sql语句基础题好的,以下是几个基础的SQL 语句题目:1. 查询所有学生信息:sql复制代码:SELECT * FROM students;2. 查询名为"张三" 的学生信息:sql复制代码:SELECT * FROM students WHERE name = '张三';3. 查询年龄大于20 岁的学生信息:sql复制代码:SELECT * FROM students WHERE age > 20;4. 查询年龄小于等于20 岁的学生信息:sql复制代码:SELECT * FROM students WHERE age <= 20;5. 查询年龄等于20 岁的所有学生信息,但名字不为"李四":sql复制代码:SELECT * FROM students WHERE age = 20 AND name != '李四';6. 查询名字中包含"王" 字的学生信息:sql复制代码:SELECT * FROM students WHERE name LIKE '%王%';7. 查询年龄在18 到25 岁之间的学生信息:sql复制代码SELECT * FROM students WHERE age BETWEEN 18 AND 25;8. 查询名字为"张三" 或"李四" 的学生信息:sql复制代码:SELECT * FROM students WHERE name IN ('张三', '李四');9. 查询名字为"张三" 但年龄不是20 岁的学生信息:sql复制代码:SELECT * FROM students WHERE name = '张三' AND age != 20;10. 查询所有学生的平均年龄:sql复制代码:SELECT AVG(age) FROM students;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
);
1. 列出至少有一个员工的所有部门。
SELECT D.DEPTNO, D.DNAME,COUNT(E.DEPTNቤተ መጻሕፍቲ ባይዱ) FROM DEPT AS D INNER JOIN EMP AS E ON
D.DEPTNO= E.DEPTNO GROUP BY E.DEPTNO HAVING COUNT(E.DEPTNO)>=1; #1
WHERE E.JOB=(SELECT JOB FROM EMP WHERE ENAME ='SCOTT'); #10
SELECT ENAME,SAL FROM EMP WHERE SAL IN(SELECT SAL FROM EMP
WHERE DEPTNO = 30); #11
SELECT count(deptno), CEILING(avg(sal)),ceil(avg(hiredate)) from emp GROUP by deptno;
14. 列出所有员工的姓名、部门名称和工资。
select ename,dname,sal FROM dept as d inner join emp as e on d.deptno=e.deptno ;
SELECT E.ENAME,D.DNAME,E.SAL FROM DEPT AS D INNER JOIN EMP AS E
ON D.DEPTNO= E.DEPTNO; #14
SELECT clerk.empno,clerk.ename,clerk.job ,clerk.hiredate,mananger.hiredate from emp clerk ,emp mananger where clerk.mgr=mananger.empno && clerk.hiredate<mananger.hiredate;
SELECT EMPNO,ENAME,SAL*12 FROM EMP ORDER BY SAL; #18
SELECT ename,sal,dname FROM dept as d inner join emp as e on d.deptno=e.deptno where sal>(SELECT sum(sal) from emp where deptno=30 );
13.(f) 列出每个部门工作的员工的数量、平均工资和平均服务期限。
11. 列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。
SELECT sal,ename,deptno from emp where sal in (SELECT sal FROM emp where deptno=30);
12. 列出薪金高于在部门30工作的所有员工的薪金的员工和薪金、部门名称。
SELECT EMPNO, ENAME,JOB,MGR,HIREDATE,SAL,DEPTNO FROM EMP WHERE SAL > 800; #2
SELECT DNAME,EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM FROM DEPT AS D
SELECT E.ENAME,E.SAL,D.DNAME FROM DEPT AS D INNER JOIN EMP AS E
ON D.DEPTNO= E.DEPTNO WHERE E.SAL>(SELECT MAX(SAL) FROM EMP WHERE DEPTNO =30); #12
LEFT JOIN EMP AS E ON D.DEPTNO= E.DEPTNO; #5
2. 列出薪金比“SMITH”多的所有员工。
select ename ,sal from emp WHERE sal>(SELECT sal from emp where ename='SMITH');
5. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
select dname,empno,ename,job,mgr,hiredate,sal,comm from dept as d left join emp as e on d.deptno=e.deptno ;
6. 列出所有“CLERK”(办事员)的姓名及其部门名称、部门的人数。
SELECT E.DEPTNO,DNAME,LOC,COUNT(E.DEPTNO) FROM DEPT AS D LEFT JOIN EMP AS E
ON D.DEPTNO= E.DEPTNO GROUP BY E.DEPTNO; #15
15. 列出所有部门的详细信息和部门人数。
select d.deptno,dname,count(e.deptno) FROM dept as d left join emp as e on d.deptno=e.deptno group by dname;
16. 列出各种工作的最低工资及从事此工作的雇员姓名。
3. 列出所有员工的姓名及其直接上级的姓名。
SELECT clerk.ename,mananger.empno,mananger.ename,clerk.mgr from emp clerk ,emp mananger where clerk.mgr=mananger.empno;
4.(f) 列出受雇日期早于其直接上级的所有员工的编号、姓名、部门名称。
SELECT COUNT(DEPTNO),'平均工资'(AVG(SAL)),'平均服务年限'(AVG(HIREDATE)) FROM EMP
GROUP BY DEPTNO; #13 报错!!!
7. 列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数。
SELECT job,count(job) from emp where sal<2000 group by job ;
8. 列出在部门“SALES”(销售部)工作的员工的姓名。
select ename FROM dept as d inner join emp as e on d.deptno=e.deptno where dname='SALES';
SELECT JOB,COUNT(JOB) FROM EMP WHERE SAL > 1500 GROUP BY JOB; #7
SELECT E.ENAME FROM DEPT AS D INNER JOIN EMP AS E ON D.DEPTNO= E.DEPTNO
SELECT DNAME,EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM FROM DEPT AS D
LEFT JOIN EMP AS E ON D.DEPTNO= E.DEPTNO; #5
SELECT * FROM emp
WHERE sal IN(
SELECT max(sal)
FROM (SELECT e.empno no,e.sal sal,s.grade grade FROM emp e
LEFT JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal) t
SELECT DNAME,ENAME,COUNT(E.DEPTNO) FROM DEPT AS D LEFT JOIN EMP AS E
ON D.DEPTNO= E.DEPTNO GROUP BY HAVING WHERE E.JOB='CLERK'; #6 报错!!!
9. 列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级。
10. 列出与“SCOTT”从事相同工作的所有员工及部门名称。
select ename,dname FROM dept as d inner join emp as e on d.deptno=e.deptno where job=(select job from emp where ename='scott');
select dname,avg(sal) FROM dept as d inner join emp as e on d.deptno=e.deptno group by dname;
SELECT D.DEPTNO, D.DNAME,COUNT(E.DEPTNO) FROM DEPT AS D INNER JOIN EMP AS E ON
select sum(sal) ,count(e.deptno) FROM dept as d left join emp as e on d.deptno=e.deptno where dname LIKE '%s%' group by e.deptno;
21. 求出部门平均月薪最高的部门名和平均月薪。
17. 列出各个部门的MANAGER(经理)的最低薪金。
18. 列出所有员工的年工资,按年薪从低到高排序。
select ename,sal*12 from emp order by sal;
19. 查出上级主管月薪超过3000的员工信息
20. 求出部门名称中带“S”字符的部门员工的工资合计、部门人数。
WHERE D.DNAME = 'SALES'; #8
SELECT E.ENAME,D.DNAME FROM DEPT AS D INNER JOIN EMP AS E ON D.DEPTNO= E.DEPTNO
D.DEPTNO= E.DEPTNO GROUP BY E.DEPTNO HAVING COUNT(E.DEPTNO)>=1; #1
SELECT EMPNO, ENAME,JOB,MGR,HIREDATE,SAL,DEPTNO FROM EMP WHERE SAL > 800; #2