sql查询练习题含答案

合集下载

sql练习题及答案

sql练习题及答案

sql练习题及答案SQL练习题及答案在学习SQL(Structured Query Language)时,练习题是非常重要的一部分。

通过练习题,我们可以巩固和应用所学的SQL知识,提高自己的实践能力。

本文将介绍几个常见的SQL练习题,并提供相应的答案,希望对大家的学习有所帮助。

1. 查询员工表中所有员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表;```2. 查询员工表中薪水大于5000的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 薪水 > 5000;```3. 查询员工表中职位为经理的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 职位 = '经理';```4. 查询员工表中薪水在4000到6000之间的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 薪水 BETWEEN 4000 AND 6000;```5. 查询员工表中薪水最高的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 薪水 = (SELECT MAX(薪水) FROM 员工表);```6. 查询员工表中没有分配部门的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 部门 IS NULL;```7. 查询员工表中按照薪水从高到低排列的前5名员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表ORDER BY 薪水 DESCLIMIT 5;```8. 查询员工表中每个部门的员工数量。

答案:```sqlSELECT 部门, COUNT(*) AS 员工数量FROM 员工表GROUP BY 部门;```9. 查询员工表中薪水排名在第3到第5位的员工的姓名和薪水。

SQL语句练习题(包含有多表查询)-答案

SQL语句练习题(包含有多表查询)-答案

SQL语句练习题1、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。

select ename,sal from emp where job='CLERK' or job='MANAGER';2、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。

select ename,deptno,sal,job from emp where deptno between 10 and 30;3、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。

select ename,sal,job from emp where ename like 'J%';4、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。

select ename,job,sal from emp where sal<=2000 order by sal desc;5、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。

select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=’CLERK’;6、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。

select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000;7、查询所有雇员的姓名、SAL与COMM之和。

select ename,sal+nvl(comm,0) “sal-and-comm” from emp;8、查询所有81年7月1日以前来的员工姓名、工资、所属部门的名字select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and hiredate<=to_date(‘1981-07-01’,’yyyy-mm-dd’);9、查询列出来公司就职时间超过24年的员工名单select ename from emp where hiredate<=add_months(sysdate,-288);10、查询于81年来公司所有员工的总收入(SAL和COMM)select sum(sal+nvl(comm,0)) from emp where to_char(hiredate,’yyyy’)=’1981’;11、查询显示每个雇员加入公司的准确时间,按××××年××月××日时分秒显示。

SQL查询练习参考答案

SQL查询练习参考答案

SQL查询练习参考答案1.分别查询学生表和学生修课表中的全部数据.select * from studentselect * from sc2.查询计算机系的学生的姓名、年龄。

select 姓名,年龄from student where 所在系='计算机系'3.查询选修了c01号课程的学生的学号和成绩。

select 学号,成绩from sc where 课程号='c01'4.查询成绩在70到80分之间的学生的学号,课程号和成绩.select 学号,课程号,成绩from sc where 成绩between 70 and 805.查询计算机系年龄在18到20之间且性别为"男"的学生的姓名和年龄.select 姓名,年龄from student where 所在系='计算机系' and 性别='男' and 年龄between 18 and 206.查询9512101号学生的修课情况.select * from sc where 学号='9512101'7.查询c01号课程成绩最高的分数.select max(成绩) 最高分from sc where 课程号='c01'select 学号,课程号,成绩最高分from sc where 成绩=(select max(成绩) from sc where 课程号='c01')8.查询学生都修了哪些课程,要求列出课程号select distinct 课程号from sc9.查询Northwind 数据库中orders表的OrderID,CustomerID和OrderDate,并奖最新的订购日期(OrderDate)列在前面.use Northwindselect OrderDate,OrderID,CustomerID from orders10.查询Northwind 数据库中orders表的ShipCountry列以B,C,D,F开始且第三个字符为"a"的OrderID,CustomerID和ShipCountry信息.select OrderID,CustomerID,ShipCountry from orders where ShipCountry like '[BCDF]_a%'11.查询Northwind 数据库中orders表的ShipCountry列不以A,B,C,D,E,F开始且最后一个字母是"a"的OrderID,CustomerID和ShipCountry信息.select OrderID,CustomerID,ShipCountry from orders where ShipCountry like '[^ABCDEF]%A' 12.查询学生数据库中学生的最大年龄和最小年龄.use sqllxselect max(年龄) 最大年龄,min(年龄) 最小年龄from student13.查询修了c02号课程的所有学生的平均成绩,最高成绩,最低成绩.select avg(成绩) 平均成绩,max(成绩) 最高成绩,min(成绩) 最低成绩from sc where 课程号='c02'14.统计每个系的学生人数.select 所在系, count(*) 人数from student group by 所在系15.统计每门课程的修课人数和考试最高分.select 课程号,count(*) 修课人数,max(成绩) 最高分from sc group by 课程号16.统计每个学生的选课门数,并按选课门数的递增顺序显示结果select 学号,count(课程号) 选课门数from sc group by 学号order by count(课程号)17.统计各系的修课的学生总数和考试的平均成绩.select 所在系,count(*) 学生总数,avg(成绩) 平均成绩from student st join sc on st.学号=sc.学号group by 所在系18.查询选课门数超过两门的学生的平均成绩和选课门数.select 学号,count(课程号) 选课门数,avg(成绩) 平均成绩from sc group by 学号having count(课程号)>219.列出总成绩超过200分的学生,要求列出学号,总成绩select 学号,sum(成绩) 总成绩from sc group by 学号having sum(成绩)>20020.平均价格超过12.0元的书的类型(type),平均价格,要求只计算有确定价格的图书的情况。

sql查询举例(含答案)

sql查询举例(含答案)

查询练习一、简单查询(无条件查询):1、查询“学生档案”表中所有的记录SELECT * FORM 学生档案2、查询“学生档案”表中全体学生的姓名、学号、家庭地址SELECT 姓名, 学号, 家庭地址 FROM 学生档案二、有条件查询1、查询“成绩管理”表中语文成绩在80分以下的学生的学号。

SELECT 学号 FROM 成绩管理 WHERE 语文<802、查询“成绩管理”表中语文成绩在80分到90分之间的学生的学号,语文,数学,英语成绩。

SELECT 学号,语文,数学,英语FROM成绩管理WHERE 语文 >= 80 AND 语文<=90==(语文 BETWEEN 80 AND 90)3、查询“成绩管理”表中数学成绩不在75分到85分之间的学生的学号,语文,数学,英语成绩。

SELECT 学号,语文,数学,英语FROM 成绩管理WHERE 数学 NOT BETWEEN 75 AND 854、查询“学生档案”表中李成刚,刘艺梅,郑莉三名学生的信息。

SELECT *FROM 学生档案WHERE 姓名 IN (“李成刚”,“刘艺梅”,“郑莉”)==(姓名 =“李成刚” OR 姓名=“刘艺梅” OR 姓名=“郑莉”)5、查询“学生档案”表中所有姓张的学生的姓名、学号和性别SELECT 姓名,学号,性别 FROM学生档案WHERE 姓名 LIKE “张*”6、查询“学生档案”表中所有姓张且全名为三个汉字的学生的姓名SELECT 姓名FROM 学生档案WHERE姓名 LIKE “张??”7、查询“学生档案”表中第二个字符为“建”字的学生的学号和姓名SELECT 学号,姓名FROM 学生档案WHERE姓名 LIKE “?建*”8、查询“学生档案”表中家庭住址为“人民路”和“育才路”的学生学号,姓名,性别和家庭住址。

SELECT 学号,姓名,性别,家庭住址FROM 学生档案WHERE家庭住址 LIKE “人民路*” OR家庭住址 LIKE “育才路*”9、查询“学生档案”表中所有团员的学生班级和姓名。

sql查询举例(含答案)

sql查询举例(含答案)

sql查询举例(含答案)查询练习⼀、简单查询(⽆条件查询):1、查询“学⽣档案”表中所有的记录SELECT * FORM 学⽣档案2、查询“学⽣档案”表中全体学⽣的姓名、学号、家庭地址SELECT 姓名, 学号, 家庭地址 FROM 学⽣档案⼆、有条件查询1、查询“成绩管理”表中语⽂成绩在80分以下的学⽣的学号。

SELECT 学号 FROM 成绩管理 WHERE 语⽂<802、查询“成绩管理”表中语⽂成绩在80分到90分之间的学⽣的学号,语⽂,数学,英语成绩。

SELECT 学号,语⽂,数学,英语FROM成绩管理WHERE 语⽂ >= 80 AND 语⽂<=90==(语⽂ BETWEEN 80 AND 90)3、查询“成绩管理”表中数学成绩不在75分到85分之间的学⽣的学号,语⽂,数学,英语成绩。

SELECT 学号,语⽂,数学,英语FROM 成绩管理WHERE 数学 NOT BETWEEN 75 AND 854、查询“学⽣档案”表中李成刚,刘艺梅,郑莉三名学⽣的信息。

SELECT *FROM 学⽣档案WHERE 姓名 IN (“李成刚”,“刘艺梅”,“郑莉”)==(姓名 =“李成刚” OR 姓名=“刘艺梅” OR 姓名=“郑莉”)5、查询“学⽣档案”表中所有姓张的学⽣的姓名、学号和性别SELECT 姓名,学号,性别 FROM学⽣档案WHERE 姓名 LIKE “张*”6、查询“学⽣档案”表中所有姓张且全名为三个汉字的学⽣的姓名SELECT 姓名FROM 学⽣档案WHERE姓名 LIKE “张??”7、查询“学⽣档案”表中第⼆个字符为“建”字的学⽣的学号和姓名SELECT 学号,姓名FROM 学⽣档案WHERE姓名 LIKE “?建*”8、查询“学⽣档案”表中家庭住址为“⼈民路”和“育才路”的学⽣学号,姓名,性别和家庭住址。

SELECT 学号,姓名,性别,家庭住址FROM 学⽣档案WHERE家庭住址 LIKE “⼈民路*” OR家庭住址 LIKE “育才路*”9、查询“学⽣档案”表中所有团员的学⽣班级和姓名。

sql练习题答案

sql练习题答案

sql练习题答案1. 查询employee表中所有员工的姓名和工资信息。

SELECT Name, SalaryFROM employee;2. 查询employee表中工资大于5000的员工的姓名和工资信息。

SELECT Name, SalaryFROM employeeWHERE Salary > 5000;3. 查询employee表中部门号为10且工资大于3000的员工的姓名和工资信息。

SELECT Name, SalaryFROM employeeWHERE DepartmentID = 10 AND Salary > 3000;4. 查询employee表中部门号为20或30的员工的姓名和工资信息。

SELECT Name, SalaryFROM employeeWHERE DepartmentID IN (20, 30);5. 查询employee表中工资在2000到5000之间的员工的姓名和工资信息。

SELECT Name, SalaryFROM employeeWHERE Salary BETWEEN 2000 AND 5000;6. 查询employee表中所有员工的姓名和入职日期信息,并按照入职日期降序排列。

SELECT Name, HireDateFROM employeeORDER BY HireDate DESC;7. 查询employee表中工资最高的员工的姓名和工资信息。

SELECT Name, MAX(Salary) AS MaxSalaryFROM employee;8. 查询employee表中每个部门的员工数量和平均工资,并按照部门编号升序排列。

SELECT DepartmentID, COUNT(*) AS EmployeeCount, AVG(Salary) AS AvgSalaryFROM employeeGROUP BY DepartmentIDORDER BY DepartmentID ASC;9. 查询employee表中每个部门的员工数量和最高工资,并按照最高工资降序排列。

sql查询题目及答案

sql查询题目及答案

1、查询所有数学系学生的信息。

--select * from s where 系='数学系'2、查询李老师所教的课程号、课程名--select 课程号,课程名from c where 教师like '李%'3、查询年龄大于20岁的女同学的学号和姓名。

--select 学号,姓名from s where year(getdate())-year(出生日期)+1>20 and 性别='女'4、查询学号为‘H0301’所选修的全部课程成绩。

--select 成绩from sc where 学号= 'H0301'5、查询平均成绩都在80分以上的学生学号及平均成绩。

--select 学号,AVG(成绩) from sc group by 学号having AVG(成绩)>=806、查询至少有6人选修的课程号。

--select 课程号from sc group by 课程号having count(*)>67、查询C02号课程得最高分的学生的学号--select 学号from sc where 课程号='c02' and 成绩=(select max(成绩) from sc where 课程号='c02')8、查询学号为’J0101’的学生选修的课程号和课程名--select 课程号,课程名from c,sc where 学号='j0101' and c.课程号=sc.课程号9、‘李小波’所选修的全部课程名称。

--Select c.课程名from s,c,sc where s.学号=sc.学号and c.课程号=sc.课程号and 姓名='李小波'10、所有成绩都在70分以上的学生姓名及所在系。

--select 姓名,系from s,sc where s.学号=sc.学号group by 学号having min(成绩)>=7011、英语成绩比数学成绩好的学生--select sc2.学号from c c1,c c2,sc sc1,sc sc2 where c1.课程名='英语'--and c2.课程名='数学' and sc1.成绩>sc2.成绩and sc1.学号=sc2.学号--and c1.课程号=sc1.课程号and c2.课程号=sc2.课程号12、至少选修了两门课及以上的学生的姓名和性别select 姓名,性别from s,sc--where s.学号=sc.学号group by 学号having count(*)>=213、选修了李老师所讲课程的学生人数--select count(*) from C,sc where 教师like '李%' and c.课程号=sc.课程号group by sc.课程号14、‘操作系统’课程得最高分的学生的姓名、性别、所在系--select 姓名,性别,系from s,sc--where s.学号=sc.学号and 成绩=--(select max(成绩) from c,sc where sc.课程号=c.课程号and 课程名='操作系统')15、显示所有课程的选修情况。

sql基础查询题

sql基础查询题

以下是一些基础的SQL查询题,请根据题目要求进行回答。

假设有一个名为"employees"的表,包含以下列:id、name、department、salary。

请问如何查询该表中所有员工的名字和工资?sqlSELECT name, salary FROM employees;假设有一个名为"orders"的表,包含以下列:order_id、product_name、quantity、price。

请问如何查询该表中所有订单的总价?sqlSELECT SUM(price * quantity) AS total_price FROM orders;假设有一个名为"customers"的表,包含以下列:customer_id、name、email。

请问如何查询该表中所有客户的名字和电子邮件地址,并且只返回不重复的记录?sqlSELECT DISTINCT name, email FROM customers;假设有一个名为"products"的表,包含以下列:product_id、product_name、category。

请问如何查询该表中属于某个特定类别的所有产品?sqlSELECT product_name FROM products WHERE category = '特定类别';假设有一个名为"employees"的表,包含以下列:id、name、department。

请问如何查询该表中属于某个特定部门的所有员工?sqlSELECT name FROM employees WHERE department = '特定部门';。

SQL高级查询——50句查询(含答案)

SQL高级查询——50句查询(含答案)

SQL⾼级查询——50句查询(含答案)--⼀个题⽬涉及到的50个Sql语句--(下⾯表的结构以给出,⾃⼰在数据库中建⽴表.并且添加相应的数据,数据要全⾯些. 其中Student表中,SId为学⽣的ID)------------------------------------表结构----------------------------------------学⽣表tblStudent(编号StuId、姓名StuName、年龄StuAge、性别StuSex)--课程表tblCourse(课程编号CourseId、课程名称CourseName、教师编号TeaId)--成绩表tblScore(学⽣编号StuId、课程编号CourseId、成绩Score)--教师表tblTeacher(教师编号TeaId、姓名TeaName)-----------------------------------------------------------------------------------问题:--1、查询“001”课程⽐“002”课程成绩⾼的所有学⽣的学号;Select StuId From tblStudent s1Where (Select Score From tblScore t1 Where t1.StuId=s1.stuId And t1.CourseId='001')>(Select Score From tblScore t2 Where t2.StuId=s1.stuId And t2.CourseId='002')--2、查询平均成绩⼤于60分的同学的学号和平均成绩;Select StuId,Avg(Score) as AvgScore From tblScoreGroup By StuIdHaving Avg(Score)>60--3、查询所有同学的学号、姓名、选课数、总成绩;Select StuId,StuName,SelCourses=(Select Count(CourseId) From tblScore t1 Where t1.StuId=s1.StuId),SumScore=(Select Sum(Score) From tblScore t2 Where t2.StuId=s1.StuId)From tblStudent s1--4、查询姓“李”的⽼师的个数;Select Count(*) From tblTeacher Where TeaName like '李%'--5、查询没学过“叶平”⽼师课的同学的学号、姓名;Select StuId,StuName From tblStudentWhere StuId Not In(Select StuID From tblScore scInner Join tblCourse cu ON sc.CourseId=cu.CourseIdInner Join tblTeacher tc ON cu.TeaId=tc.TeaIdWhere tc.TeaName='叶平')--6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;Select StuId,StuName From tblStudent stWhere (Select Count(*) From tblScore s1 Where s1.StuId=st.StuId And s1.CourseId='001')>0 And(Select Count(*) From tblScore s2 Where s2.StuId=st.StuId And s2.CourseId='002')>0--7、查询学过“叶平”⽼师所教的所有课的同学的学号、姓名;Select StuId,StuName From tblStudent st Where not exists(Select CourseID From tblCourse cu Inner Join tblTeacher tc On cu.TeaID=tc.TeaIDWhere tc.TeaName='叶平' And CourseID not in(Select CourseID From tblScore Where StuID=st.StuID))--8、查询课程编号“002”的成绩⽐课程编号“001”课程低的所有同学的学号、姓名;Select StuId,StuName From tblStudent s1Where (Select Score From tblScore t1 Where t1.StuId=s1.stuId And t1.CourseId='001')> (Select Score From tblScore t2 Where t2.StuId=s1.stuId And t2.CourseId='002')--9、查询所有课程成绩⼩于60分的同学的学号、姓名;Select StuId,StuName From tblStudent stWhere StuId Not IN(Select StuId From tblScore sc Where st.StuId=sc.StuId And Score>60)--10、查询没有学全所有课的同学的学号、姓名;Select StuId,StuName From tblStudent stWhere (Select Count(*) From tblScore sc Where st.StuId=sc.StuId)<(Select Count(*) From tblCourse)--11、查询⾄少有⼀门课与学号为“1001”的同学所学相同的同学的学号和姓名;------运⽤连接查询Select DistInct st.StuId,StuName From tblStudent stInner Join tblScore sc ON st.StuId=sc.StuIdWhere sc.CourseId IN (Select CourseId From tblScore Where StuId='1001')------嵌套⼦查询Select StuId,StuName From tblStudentWhere StuId In(Select Distinct StuId From tblScore Where CourseId In (Select CourseId From tblScore Where StuId='1001'))--12、查询⾄少学过学号为“1001”同学所有课程的其他同学学号和姓名;Select StuId,StuName From tblStudentWhere StuId In(Select Distinct StuId From tblScore Where CourseId Not In (Select CourseId From tblScore Where StuId='1001')--13、把“SC”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩; (从⼦查询中获取⽗查询中的表名,这样也⾏)--创建测试表Select * Into Sc From tblScoregoUpdate Sc Set Score=(Select Avg(Score) From tblScore s1 Where s1.CourseId=sc.CourseId)Where CourseId IN(Select CourseId From tblCourse cs INNER JOIN tblTeacher tc ON cs.TeaID=tc.TeaID WHERE TeaName ='叶平')--14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;Select StuID,StuName From tblStudent stWhere StuId <> '1002'AndNot Exists(Select * From tblScore sc Where sc.StuId=st.StuId And CourseId Not In (Select CourseId From tblScore Where StuId='1002')) AndNot Exists(Select * From tblScore Where StuId='1002' And CourseId Not In (Select CourseId From tblScore sc Where sc.StuId=st.StuId))--15、删除学习“叶平”⽼师课的SC表记录;Delete From tblScore Where CourseId IN(Select CourseId From tblCourse cs INNER JOIN tblTeacher tc ON cs.TeaId=tc.TeaId Where tc.TeaName='叶平')--16、向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、'002'号课的平均成绩;Insert Into tblScore (StuId,CourseId,Score)Select StuId,'002',(Select Avg(Score) From tblScore Where CourseId='002') From tblScore WhereStuId Not In (Select StuId From tblScore Where CourseId='003')--17、按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:学⽣ID,,数据库,企业管理,英语,有效课程数,有效平均分Select StuId,数据库=(Select Score From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where CourseName='数据库' And sc.StuID=st.StuId),企业管理=(Select Score From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where CourseName='企业管理' Andsc.StuID=st.StuId),英语=(Select Score From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where CourseName='英语' Andsc.StuID=st.StuId),有效课程数=(Select Count(Score) From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where (CourseName='数据库' or CourseName='企业管理' or CourseName='英语') And sc.StuID=st.StuId),有效平均分=(Select Avg(Score) From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where (CourseName='数据库' or CourseName='企业管理' or CourseName='英语') And sc.StuID=st.StuId)From tblStudent stOrder by 有效平均分 Desc--18、查询各科成绩最⾼和最低的分:以如下形式显⽰:课程ID,最⾼分,最低分Select CourseId as 课程ID, 最⾼分=(Select Max(Score) From tblScore sc Where sc.CourseId=cs.CourseId ),最低分=(Select Min(Score) From tblScore sc Where sc.CourseId=cs.CourseId )From tblCourse cs--19、按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序 (百分数后如何格式化为两位⼩数??)Select 课程ID,平均分,及格率 From(Select CourseId as 课程ID, 平均分=(Select Avg(Score) From tblScore sc Where sc.CourseId=cs.CourseId ),及格率=Convert(varchar(10),((Select Count(*) From tblScore sc Where sc.CourseId=cs.CourseId And sc.Score>=60)*10000/(Select Count(*) From tblScore sc Where sc.CourseId=cs.CourseId))/100)+'%'From tblScore cs) as tmpGroup by 课程ID,平均分,及格率Order by 平均分, Convert(float,substring(及格率,1,len(及格率)-1)) Desc--20、查询如下课程平均成绩和及格率的百分数(⽤"1⾏"显⽰): 企业管理(001),马克思(002),OO&UML (003),数据库(004)Select 课程ID=sc.CourseId,课程名称=cs.CourseName,平均成绩=Avg(Score),及格率 =Convert(varchar(10),((Select Count(Score) From tblScore Where CourseId=sc.CourseId AndScore>=60)*10000/Count(Score))/100.0)+'%'From tblScore scInner Join tblCourse cs ON sc.CourseId=cs.CourseIdWhere sc.CourseId like '00[1234]'Group By sc.CourseId,cs.CourseName--21、查询不同⽼师所教不同课程平均分从⾼到低显⽰Select 课程ID=CourseId,课程名称=CourseName,授课教师=TeaName,平均成绩=(Select Avg(Score) From tblScore WhereCourseId=cs.CourseId)From tblCourse csInner Join tblTeacher tc ON cs.TeaId=tc.TeaIdOrder by 平均成绩 Desc--22、查询如下课程成绩第 3 名到第 6 名的学⽣成绩单:企业管理(001),马克思(002),UML (003),数据库(004)格式:[学⽣ID],[学⽣姓名],企业管理,马克思,UML,数据库,平均成绩Select * From(Select Top 6 学⽣ID=StuId,学⽣姓名=StuName,企业管理=(Select Score From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where CourseName='企业管理' And sc.StuID=st.StuId),马克思=(Select Score From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where CourseName='马克思' Andsc.StuID=st.StuId),UML=(Select Score From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where CourseName='UML' Andsc.StuID=st.StuId),数据库=(Select Score From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where CourseName='数据库' Andsc.StuID=st.StuId),平均成绩=(Select Avg(Score) From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where (CourseName='数据库' or CourseName='企业管理' or CourseName='UML'or CourseName='马克思') And sc.StuID=st.StuId),排名=Row_Number() Over(Order by(Select Avg(Score) From tblScore sc Inner Join tblCourse cs On sc.CourseId=cs.CourseId Where (CourseName='数据库' or CourseName='企业管理' or CourseName='UML'or CourseName='马克思') And sc.StuID=st.StuId) DESC) From tblStudent stOrder by 排名) as tmpWhere 排名 between 3 And 6--23、统计列印各科成绩,各分数段⼈数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]Select 课程ID=CourseId, 课程名称=CourseName,[100-85]=(Select Count(*) From tblScore sc Where CourseId=cs.CourseId And Score between 85 And 100),[85-70]=(Select Count(*) From tblScore sc Where CourseId=cs.CourseId And Score between 70 And 84),[70-60]=(Select Count(*) From tblScore sc Where CourseId=cs.CourseId And Score between 60 And 69),[<60]=(Select Count(*) From tblScore sc Where CourseId=cs.CourseId And Score <60)From tblCourse cs--24、查询学⽣平均成绩及其名次Select 学号=st.StuId, 姓名=StuName,平均成绩=sc.AvgScore,名次=(Dense_Rank() Over(Order by sc.AvgScore Desc)) From tblStudent st Inner Join (Select StuId,Avg(Score) as AvgScore From tblScore Group by StuId) as sc On sc.StuId=st.StuIdOrder by 学号--25、查询各科成绩前三名的记录:(不考虑成绩并列情况)Select 学号=StuId,课程号=CourseId,分数=ScoreFrom(Select Row_Number() Over(order by CourseId,Score Desc) as i,* From tblScore) as tmp --得到⼀个临时的排名表,其中i表⽰编号Where i In(Select Top 3 i From (Select Row_Number() Over(order by CourseId,Score Desc) as i,* From tblScore) as t1 Wheret1.CourseId=tmp.CourseId)--26、查询每门课程被选修的学⽣数Select 课程ID=CourseId,选修⼈数=(Select Count(*) From (Select Distinct StuId From tblScore Where CourseId=cs.CourseId) as tmp) From tblCourse cs--27、查询出只选修了⼀门课程的全部学⽣的学号和姓名Select 学号=StuId,姓名=StuNameFrom tblStudent stWhere (Select Count(*) From (Select Distinct CourseId From tblScore Where StuId=st.StuId) as tmp)=1--28、查询男⽣、⼥⽣⼈数Select 男⽣⼈数=(select Count(*) From tblStudent Where StuSex='男'),⼥⽣⼈数=(select Count(*) From tblStudent Where StuSex='⼥')--29、查询姓“张”的学⽣名单Select * From tblStudent Where StuName like '张%'--30、查询同名同性学⽣名单,并统计同名⼈数Select Distinct 学⽣姓名=StuName,同名⼈数=(Select Count(*) From tblStudent s2 Where s2.StuName=st.StuName) From tblStudent st Where (Select Count(*) From tblStudent s2 Where s2.StuName=st.StuName)>=2--31、1981年出⽣的学⽣名单(注:Student表中Sage列的类型是datetime)Select * From tblStudent Where Year(Sage)=1981--32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select 课程ID=CourseId,课程名称=CourseName,平均成绩=(Select Avg(Score) From tblScore Where CourseId=cs.CourseId)From tblCourse csOrder by 平均成绩,CourseId Desc--33、查询平均成绩⼤于85的所有学⽣的学号、姓名和平均成绩Select 学号=StuId,姓名=StuName,平均成绩=(Select Avg(Score) From tblScore Where StuId=st.StuId) From tblStudent stWhere (Select Avg(Score) From tblScore Where StuId=st.StuId)>85--34、查询课程名称为“数据库”,且分数低于60的学⽣姓名和分数Select 姓名=StuName,分数=Score From tblScore scInner Join tblStudent st On sc.StuId=st.StuIdInner Join tblCourse cs On sc.CourseId=cs.CourseIdWhere CourseName='数据库' And Score<60--35、查询所有学⽣的选课情况;Select 学号=StuId,选课数=(Select Count(*) From (Select Distinct CourseId From tblScore Where StuId=st.StuId) as tmp)From tblStudent stSelect distinct 姓名=StuName,选修课程=CourseName From tblScore scInner Join tblStudent st On sc.StuId=st.StuIdInner Join tblCourse cs On sc.CourseId=cs.CourseId--36、查询任何⼀门课程成绩在70分以上的姓名、课程名称和分数;Select 姓名=StuName,课程名称=CourseName,分数=Score From tblScore scInner Join tblStudent st On sc.StuId=st.StuIdInner Join tblCourse cs On sc.CourseId=cs.CourseIdWhere Score>=70--37、查询不及格的课程,并按课程号从⼤到⼩排列Select * From tblScore Where Score<60 order by CourseId Desc--38、查询课程编号为003且课程成绩在80分以上的学⽣的学号和姓名;Select StuId,StuName From tblStudentWhere StuId in(Select StuId From tblScore Where CourseId='003' And Score>=80)--39、求选了课程的学⽣⼈数Select 选了课程的学⽣⼈数=Count(*) From tblStudent st Where StuId IN (Select StuID From tblScore)--40、查询选修“叶平”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩Select CourseId,CourseName,该科最⾼学⽣=(Select StuName From tblStudent Where StuId in (Select Top 1 StuID From tblScore Where CourseId=cs.CourseId Order by Score Desc)),成绩=(Select Top 1 Score From tblScore Where CourseId=cs.CourseId Order by Score Desc)From tblCourse cs Inner Join tblTeacher tc ON cs.TeaId=tc.TeaIdWhere TeaName='叶平'--41、查询各个课程及相应的选修⼈数Select 课程ID=CourseId,选修⼈数=(Select Count(*) From (Select Distinct StuId From tblScore Where CourseId=cs.CourseId) as tmp) From tblCourse cs--42、查询不同课程成绩相同的学⽣的学号、课程号、学⽣成绩Select 学号=StuId, 课程号=CourseId, 成绩=Score From tblScore scWhere Exists (Select * From tblScore Where Score=sc.Score And StuId=sc.StuId And CourseId <>sc.CourseId)Order by 学号,成绩--43、查询每门功成绩最好的前两名Select 课程号=CourseId,第1名=(Select Top 1 StuId From tblScore Where CourseId=cs.CourseId Order by Score DESC),第2名=(Select Top 1 StuID From (Select Top 2 StuId,Score From tblScore Where CourseId=cs.CourseId Order by Score DESC) as tmp Order by Score)From tblCourse cs--44、统计每门课程的学⽣选修⼈数(超过10⼈的课程才统计)。

sql查询练习题含答案

sql查询练习题含答案

--(1)查询20号部门的所有员工信息。

select * from emp e where =20;--(2)查询奖金(COMM)高于工资(SAL)的员工信息。

select * from emp where comm>sal;--(3)查询奖金高于工资的20%的员工信息。

select * from emp where comm>sal*;--(4)查询10号部门中工种为MANAGER和20号部门中工种为CLERK的员工的信息。

select * from emp ewhere =10 and ='MANAGER')or =20 and ='CLERK')--(5)查询所有工种不是MANAGER和CLERK,--且工资大于或等于2000的员工的详细信息。

select * from empwhere job not in('MANAGER','CLERK') and sal>=2000;--(6)查询有奖金的员工的不同工种。

select * from emp where comm is not null;--(7)查询所有员工工资和奖金的和。

select +nvl,0)) from emp e;--(8)查询没有奖金或奖金低于100的员工信息。

select * from emp where comm is null or comm<100;--(9)查询员工工龄大于或等于10年的员工信息。

select * from emp where (sysdate-hiredate)/365>=10;--(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。

select initcap(ename) from emp;select upper(substr(ename,1,1))||lower(substr(ename,2)) from emp;--(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,--若月份相同则按入职的年份排序。

SQL试题及答案

SQL试题及答案

SQL试题及答案一、选择题1. 以下哪个SQL语句用于创建数据库?A. CREATE DATABASEB. CREATE TABLEC. CREATE INDEXD. CREATE VIEW答案:A2. 在SQL中,以下哪个操作符用于比较两个值是否相等?A. =B. ==C. ===D. !=答案:A3. 以下哪个SQL语句用于从数据库中删除表?A. DROP TABLEB. DELETE TABLEC. DROP DATABASED. DELETE DATABASE答案:A二、填空题1. 在SQL中,用来查询数据库中表的记录的语句是__________。

答案:SELECT2. 在SQL中,用来插入新记录到表的语句是__________。

答案:INSERT INTO3. 在SQL中,用来更新表中现有记录的语句是__________。

答案:UPDATE三、简答题1. 简述SQL中的主键(Primary Key)和外键(Foreign Key)的概念。

答案:主键是表中一个或多个列的组合,用于唯一标识表中的每条记录。

一个表只能有一个主键,且主键列的值不能为空或重复。

外键是一个表中的一个列或列组合,它是另一个表的主键。

外键用于建立两个表之间的关系,确保数据的完整性。

2. 请解释SQL中的INNER JOIN和LEFT JOIN的区别。

答案:INNER JOIN(内连接)返回两个表中有匹配的记录。

如果没有匹配的记录,则不会返回任何结果。

LEFT JOIN(左连接)返回左表中的所有记录,即使右表中没有匹配的记录。

如果左表中的记录在右表中没有匹配,则结果集中右表的列将以NULL填充。

四、编程题1. 编写一个SQL查询,从“员工”表中查询所有员工的名字和部门名称,假设“员工”表有“员工ID”、“姓名”和“部门ID”列,而“部门”表有“部门ID”和“部门名称”列。

答案:```sqlSELECT 员工.姓名, 部门.部门名称FROM 员工INNER JOIN 部门 ON 员工.部门ID = 部门.部门ID;```2. 编写一个SQL查询,更新“订单”表中所有订单的价格,使其价格上涨10%。

sql查询题目及答案

sql查询题目及答案

数据库中有如下三个表:学生表(学号id,姓名name,性别sex,系部depart,年龄age)8个学生记录选课表(学号id,课程号cid,成绩grade) 12门课程课程表(课程号cid,课程名cname,学分Ccredit) 6门课程学生-课程模式 S-T :学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)1.从学生表中查询所有同学的所有信息select*from学生表2.从学生表中查询所有学生的信息,并分别赋予一个别名select学号as xuehao,姓名as xingming,性别as xingbie,系部as xibu,年龄as nianling from学生表3.从学生表中查询姓名是Allen的学生的信息select*from学生表where姓名='Allen'4.从学生表中查询学号在1101到1199之间的所有学生的信息select*from学生表where学号between 1101 and 11995.从学生表中查询年龄小于18和大于20的所有学生的学号和姓名select学号,姓名from学生表where年龄<18 or年龄>206.从学生表中查询计算机系年龄小于20的所有学生的信息select*from学生表where系部='computer'and年龄<207.从学生表中查询姓名以A开头的学生的信息select*from学生表where姓名LIKE'A%'8.从学生表中查询姓名的第三个字符是A的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'__A%'9.从学生表中查询姓名中包含“llen”的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'10.从学生表中查询姓名中包含“llen”且姓名只有5个字符的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'and len(姓名)=511.从学生表中查询有年龄信息的学生的学号和姓名select学号,姓名from学生表where年龄is not null12.从学生表中查询最大年龄和最小年龄select max(年龄)最大年龄,min(年龄)最小年龄from学生表13.从学生表中查询所有学生的平均年龄select avg(年龄)平均年龄from学生表14.从学生表中查询学校所有系的名字select distinct系部from学生表15.从学生表中查询学校共有多少个系select count(distinct系部)系部总和from学生表16.从选课表中查询所有学生的选课情况select distinct课程号from选课表17.从选课表中查询选修课程号为C01课程的学生的学号select学号from选课表where课程号='C01'18.从选课表中查询所有没有选C02课程的学生的学号select distinct学号from选课表where课程号!='C02'19.从选课表中查询有选修C01或C02课程的学生的学号select distinct学号from选课表where课程号='C01' or 课程号='C02'20.从选课表中查询学号为1101的学生的选课情况select课程号from选课表where学号='1101'21.从选课表中查询所有选课信息,即学号、课程号、成绩,并给成绩加8分select学号,课程号,成绩=成绩+8 from选课表22.从选课表中查询学号为1101的学生的所有选修课程成绩的总和select sum(成绩)成绩总和from选课表where学号='1101'23.从选课表中查询选修课程好为C02所有学生的成绩平均值并赋予“平均成绩24.”列名select avg(成绩)平均成绩from选课表where课程号='C02'25.从选课表中查询选修课程号C02且该门课程考试及格的学生的学号select学号from选课表where课程号='C02'and成绩>=6026.从选课表中查询所有无考试成绩的学生的学号和课程的课程号select学号,课程号from选课表where成绩is null27.从选课表中查询选修了课程号以C开头的学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'C%'28.从选课表中查询选修了课程号以C、D或E开头学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'[CDE]%'29.从选课表中查询选修了课程号中包含DB的学生的学号和课程号select学号,课程号from选课表where课程号LIKE'%DB%'30.从选课表中查询选修了课程的学生的学号select distinct学号from选课表where课程号is not null31.从选课表中查询选修了课程的学生的人数select count(distinct学号)总人数from选课表31.找出姓名以D开头的学生姓名和所有成绩select学生表.姓名,选课表.成绩from学生表join选课表on学生表.学号=选课表.学号where学生表.姓名LIKE'D%'32.查找的所有学生姓名与学号,结果按学号降序排序select 学号,姓名from学生表order BY学号DESC33.查找成绩介于80和90之间的学生姓名,结果按成绩和姓名升序排序select学生表.姓名from选课表join学生表on学生表.学号=选课表.学号where选课表.成绩between 80 and 90order BY选课表.成绩,学生表.姓名34.查找english系的所有学生姓名,结果按成绩和姓名升序排序select学生表.姓名,学生表.学号,选课表.成绩from选课表join学生表on学生表.学号=选课表.学号where学生表.系部='english'35.查找同时选修了C01及C02两门课程的学生姓名及学号select学生表.姓名,A.学号from选课表as A join选课表as B on A.学号=B.学号join学生表on学生表.学号=A.学号where A.课程号='C01'and B.课程号='C02'36.查找所有选修了课程的学生姓名及所在系别select distinct学生表.姓名,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号is not null37.查找成绩高于90分的学生姓名、学号及系别select学生表.姓名,学生表.学号,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.成绩>=9038.找出选修了C01课程的学生姓名select学生表.姓名from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号='C01'39.查询English系学生人数select count(*) English 系总人数from学生表where系部='English'40.分别查询各系的学生人数select系部,count(*)人数from学生表group by系部41.创建一个角色uus.CREATE ROLE uus;42.给uus授权SELECT,UPDATE,INSERT .GRANT SELECT,UPDATE,INSERTON StuTO uus43.增加一个登录,登录名为tp,密码为123,默认的数据库为stuEXEC sp_addlogin 'tp', '123', 'stu'44.将登录tp增加为test库的一个用户,并连接到test库。

SQL查询及答案

SQL查询及答案

SQL查询及答案一、单表查询练习1、查询<学生信息表>,查询学生"张三"的全部基本信息Select *from A_studentinfowhere sname='张三'2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息Select *from A_studentinfowhere sname='张三'or sname='李四'3、查询<学生信息表>,查询姓"张"学生的基本信息Select *from A_studentinfowhere sname like '张%'4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息Select *from A_studentinfowhere sname like '%四%'5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。

select *from A_studentinfowhere sname like '李_强'6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。

Select *from A_studentinfowhere sname like '张%'or sname like '李%'7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息Select *from A_studentinfowhere sname like '张%'and province='北京'8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息Select *from A_studentinfowhere province in ('北京','上海','新疆','山东')9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息Select *from A_studentinfowhere sname like '张%'and province !='北京'10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序select *from A_studentinfoorder by sex,province,class11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份select distinct province as 省份from A_studentinfo12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩Select *from A_studentcoursewhere score is null13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序Select *from A_studentcoursewhere score is not nullorder by score desc二、聚合函数练习1、统计<学生信息表>,统计共有多少个学生Select count (*) as 学生数量from A_studentinfo2、统计<学生信息表>,统计年龄大于20岁的学生有多少个Select count(*) as 学生数量from A_studentinfowhere (2021-yearofbirth)>203、统计<学生信息表>,统计入学时间在1980年至1982年的学生人数select count(*) as 学生数量from A_studentinfowhere enrollment between '1998-01-01' and '2021-12-30'对比以下查询方式,看看有何不同,为什么?select count(*) as 学生数量from A_studentinfowhere enrollment between '1998' and '2021'。

sql经典练习题库(附答案)

sql经典练习题库(附答案)

SQL练习题库表结构Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表试题:1、查询“0001”课程比“C002”课程成绩高的所有学生的学号;Select s# from scWhere c#='0001' and score>any(select score from sc c#='0002')2、查询平均成绩大于60分的同学的学号和平均成绩;select s#,avg(score) from SCgroup by s#having avg(score)>603、查询所有同学的学号、姓名、选课数、总成绩;select student.s#,student.sname,count(sc.c#)as 选课数,sum(score)总成绩from student,scwhere student.s#=sc.s#group by student.s#,student.sname4、查询姓“张”的老师的个数;select count(*)人数from teacherwhere tname like'张%'5、查询没学过“叶平”老师课的同学的学号、姓名;select student.s#,student.sname from student,course,teacher,scwhere student.s#=sc.s# and course.t#=teacher.t# and teacher.t# not in(select t# from teacher where tname='张丽芬') group by student.s#,student.sname6、查询学过“0001”并且也学过编号“0002”课程的同学的学号、姓名;select sc.s#,sname from sc,studentwhere sc.c# = '0001' and student.s# = sc.s# and sc.s# in (select s# from sc where sc.c# = '0002')--并(两表值)select student.s#,student.sname from student,scwhere student.s#=sc.s# and sc.c#='0001'unionselect student.s#,student.sname from student,scwhere student.s#=sc.s# and sc.c#='0002'--交(有相同值)select student.s#,student.sname from student,scwhere student.s#=sc.s# and sc.c#='0001'intersectselect student.s#,student.sname from student,scwhere student.s#=sc.s# and sc.c#='0002'--差(不同值)select student.s#,student.sname from student,scwhere student.s#=sc.s# and sc.c#='0001'exceptselect student.s#,student.sname from student,scwhere student.s#=sc.s# and sc.c#='0002'7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select student.s#,student.sname from student,course,teacher,scwhere student.s#=sc.s# and course.t#=teacher.t# and teacher.t# in(select t# from teacher where tname='张丽芬')group by student.s#,student.sname8、查询课程编号“001”的成绩比课程编号“002”课程低的所有同学的学号、姓名;select student.s#,sname,score from student,scwhere student.s#=sc.s# and score in(( select score from sc where c#='0001' )<all( select score from sc where c#='0002' )) 9、查询所有课程成绩小于60分的同学的学号、姓名;select student.s#,sname from studentwhere s# in(select s# from sc where score<60)10、查询没有学全所有课的同学的学号、姓名;select student.s#,student.sname from student,scwhere student.s#=sc.s#group by student.s#,student.snamehaving count(c#)<(select count(c#) from course)11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select student.s#,student.sname from student,scwhere student.s#=sc.s# and c#=any(select c# from scwhere s#='1001')group by student.s#,student.sname12、查询至少学过学号为“0001”同学所有一门课的其他同学学号和姓名;Select sc.s#,sname from sc inner join student on sc.s#=student.s#Where c# in (select c# from sc where s#=’0001’)13、把“SC”表中“赵雁南”老师教的课的成绩都更改为此课程的平均成绩;update scset score=(select avg(sc.score) from sc,teacher,coursewhere sc.c#=course.c# and course.t#=teacher.t# and teacher.tname='赵雁南')where sc.c#=(select c# from course,teacher where course.t#=teacher.t# and tname='赵雁南' )14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select student.s#,sname from student,scwhere student.s#=sc.s# and sc.c#=all(select c# from sc where s#='1005') and student.s#<>'1005'15、删除学习“朱玉文”老师课的SC表记录;delete from scwhere c# in(select c# from sc where c# in (select c# from course,teacher where teacher.t#=course.t# and teacher.tname='朱玉文' ) )16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“0002”课程的同学学号、号课的平均成绩;insert into scvaluesselect s# from sc where s# not in (select s# from sc where c#='0002'select avg(score) as 平均成绩from sc where c#='0002'17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分select sc.s#,ame,sc.score,avg(score)as 平均成绩from sc inner join course on sc.c#=course.c#where sc.c# in(select c# from course where cname=any(select cname from course where cname in('计算机基础','Oracle','软件工程')))group by sc.s#,ame,sc.scoreorder by avg(score) descSELECT S# as 学生ID,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='0001') AS 计算机基础,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='0002') AS Oracle,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='0011') AS 软件工程,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩FROM sc AS tGROUP BY S#ORDER BY avg(t.score) desc18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分select c# 课程ID,max(score) 最高分,min(score) 最低分from scgroup by c#19、按各科平均成绩从低到高和及格率的百分数从高到低顺序select c#, avg(score) from scwhere score>60group by c#20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(),马克思(),OO&UML (),数据库()21、查询不同老师所教不同课程平均分从高到低显示select course.t#,avg(sc.score) as 平均分from sc,coursewhere sc.c#=course.c#group by course.t#order by avg(sc.score) desc22、查询如下课程成绩第3 名到第6 名的学生成绩单:企业管理,马克思,UML,数据库[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩select student.s#,student.sname,sc.score,ame from student inner join sc on student.s#=sc.s#inner join course on sc.c#=course.c#where ame in('oracle','电路分析','计算机基础')order by ame,sc.score desc23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]select sc.c#,ame,count(*)人数from sc,coursewhere course.c#=sc.c#group by sc.c#,ame24、查询学生平均成绩及其名次select sc.s#,avg(score) from scgroup by sc.s#order by avg(score) desc25、查询各科成绩前三名的记录考虑成绩并列情况select s#,c# ,score from scwhere score in (select distinct top 3 score from scgroup by c#,score)order by score desc26、查询每门课程被选修的学生数select c# as 课程号,count(c#)as 选修人数from scgroup by c#order by count(c#) desc27、查询出只选修了一门课程的全部学生的学号和姓名select sc.s#,student.sname from sc inner join student on student.s#=sc.s#group by sc.s#,student.snamehaving count(c#)=128、查询男生、女生人数select ssex, count(*) as 总人数from studentgroup by ssex29、查询姓“张”的学生名单select sname from studentwhere sname like '张%'30、查询同名同性学生名单,并统计同名人数select ssex,count(*) from studentgroup by ssex31、同年出生的学生名单(注:Student表中Sage列的类型是datetime)32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列select c#,avg(score)平均成绩from scgroup by c#order by avg(score) asc33、查询平均成绩大于的所有学生的学号、姓名和平均成绩select top 1 student.s#,student.sname,avg(score)平均成绩from student inner join sc on student.s#=sc.s#group by student.s#,student.snameorder by avg(score) desc34、查询课程名称为“数据库”,且分数低于80的学生姓名和分数select student.sname,sc.score from sc,student,coursewhere student.s#=sc.s# and sc.c#=course.c# and ame='计算机基础' and sc.score<80group by student.sname,sc.score35、查询所有学生的选课情况;select student.s#,sname,c# from student left join sc on student.s#=sc.s#36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;select student.sname,ame,sc.score from student,sc,coursewhere student.s#=sc.s# and sc.c#=course.c# and sc.score>70order by score desc37、查询不及格的课程,并按课程号从大到小排列select c#,score from scwhere score<60order by c#38、查询课程编号为0001且课程成绩在70分以上的学生的学号和姓名;select student.s#,sname from sc,studentwhere c#='0001' and score>70 and student.s#=sc.s#39、求选了课程的学生人数select count(s#)人数from scwhere sc.score<>040、查询选修“oracle”课程的学生中,成绩最高的学生姓名及其成绩select top 1 student.sname,max(sc.score)成绩最高from student inner join sc on student.s#=sc.s# inner join course on sc.c#=course.c#where ame='oracle'group by student.snameorder by max(sc.score) desc41、查询各个课程及相应的选修人数select ame,count(sc.c#) as 选修人数from sc inner join course on sc.c#=course.c#group by ameorder by count(sc.c#) desc,ame asc42、查询不同课程成绩相同的学生的学号、课程号、学生成绩43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 score FROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#44、统计每门课程的学生选修人数(超过人的课程才统计)。

sql实验习题答案

sql实验习题答案

sql实验习题答案SQL实验习题答案在学习SQL(Structured Query Language)时,习题是一种非常有效的学习方式。

通过实践操作,我们可以更好地理解SQL语言的各种概念和用法。

下面是一些常见的SQL实验习题及其答案,希望对大家的学习有所帮助。

1. 查询某个表的所有数据答案:SELECT * FROM 表名;2. 查询某个表的前n行数据答案:SELECT * FROM 表名 LIMIT n;3. 查询某个表中满足某个条件的数据答案:SELECT * FROM 表名 WHERE 条件;4. 查询某个表中某个字段的最大值答案:SELECT MAX(字段名) FROM 表名;5. 查询某个表中某个字段的最小值答案:SELECT MIN(字段名) FROM 表名;6. 查询某个表中某个字段的总和答案:SELECT SUM(字段名) FROM 表名;7. 查询某个表中某个字段的平均值答案:SELECT AVG(字段名) FROM 表名;8. 查询某个表中某个字段的记录数答案:SELECT COUNT(字段名) FROM 表名;9. 查询某个表中某个字段的记录数,并按照字段值进行分组答案:SELECT 字段名, COUNT(字段名) FROM 表名 GROUP BY 字段名;10. 查询某个表中满足多个条件的数据答案:SELECT * FROM 表名 WHERE 条件1 AND 条件2;11. 查询某个表中满足多个条件中的任意一个条件的数据答案:SELECT * FROM 表名 WHERE 条件1 OR 条件2;12. 查询某个表中满足某个条件,并按照某个字段进行排序的数据答案:SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名;13. 查询某个表中满足某个条件,并限制结果的行数答案:SELECT * FROM 表名 WHERE 条件 LIMIT n;14. 查询某个表中满足某个条件,并跳过前n行的数据答案:SELECT * FROM 表名 WHERE 条件 OFFSET n;15. 查询某个表中满足某个条件,并按照某个字段进行分页显示答案:SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名 LIMIT n OFFSET m;这些习题涵盖了SQL语言的基本操作和常用函数。

sql高级查询选择题

sql高级查询选择题

SQL高级查询选择题以下是三个SQL高级查询选择题,请选择正确的答案:1.假设有一个名为"employees"的表,其中包含"id"、"name"和"salary"等列。

要查询工资高于平均工资的员工,可以使用以下哪个SQL语句?A. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees);B. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees)C. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees);D. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees)2.假设有一个名为"orders"的表,其中包含"order_id"、"customer_id"和"order_date"等列。

要查询在过去30天内下单的所有客户,可以使用以下哪个SQL语句?A. SELECT customer_id FROM orders WHERE order_date >= CURRENT_DATE -30;B. SELECT customer_id FROM orders WHERE order_date <= CURRENT_DATE -30;C. SELECT customer_id FROM orders WHERE order_date >= CURRENT_DATE -INTERVAL 30 DAY;D. SELECT customer_id FROM orders WHERE order_date <= CURRENT_DATE -INTERVAL 30 DAY;3.假设有一个名为"products"的表,其中包含"product_id"、"product_name"和"price"等列。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

--(1)查询20号部门的所有员工信息。

select * from emp e where e.deptno=20;--(2)查询奖金(COMM)高于工资(SAL)的员工信息。

select * from emp where comm>sal;--(3)查询奖金高于工资的20%的员工信息。

select * from emp where comm>sal*0.2;--(4)查询10号部门中工种为MANAGER和20号部门中工种为CLERK的员工的信息。

select * from emp ewhere (e.deptno=10 and e.job='MANAGER')or (e.deptno=20 and e.job='CLERK')--(5)查询所有工种不是MANAGER和CLERK,--且工资大于或等于2000的员工的详细信息。

select * from empwhere job not in('MANAGER','CLERK') and sal>=2000;--(6)查询有奖金的员工的不同工种。

select * from emp where comm is not null;--(7)查询所有员工工资和奖金的和。

select (e.sal+nvl(m,0)) from emp e;--(8)查询没有奖金或奖金低于100的员工信息。

select * from emp where comm is null or comm<100;--(9)查询员工工龄大于或等于10年的员工信息。

select * from emp where (sysdate-hiredate)/365>=10;--(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。

select initcap(ename) from emp;select upper(substr(ename,1,1))||lower(substr(ename,2)) from emp;--(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,--若月份相同则按入职的年份排序。

select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'MM') month from emporder by month,year;--(12)查询在2月份入职的所有员工信息。

select * from emp where to_char(hiredate,'MM')='02'--(13)查询所有员工入职以来的工作期限,用“**年**月**日”的形式表示。

select e.ename,floor((sysdate-e.hiredate)/365)||'年'||floor(mod((sysdate-e.hiredate),365)/30)||'月'||floor(mod(mod((sysdate-e.hiredate),365),30))||'日'from emp e;--(14)查询从事同一种工作但不属于同一部门的员工信息。

select a.ename,a.job,a.deptno,b.ename,b.job,b.deptnofrom emp a,emp bwhere a.job=b.job and a.deptno<>b.deptno;--(15)查询各个部门的详细信息以及部门人数、部门平均工资。

select d.deptno,count(e.empno),avg(e.sal),d.dname,d.locfrom emp e ,dept dwhere e.deptno=d.deptnogroup by d.deptno,d.dname,d.loc--(16)查询10号部门员工以及领导的信息。

select * from emp where empno in(select mgr from emp where deptno=10) or deptno=10;--(17)查询工资为某个部门平均工资的员工信息。

select * from empwhere sal in(select avg(sal) from emp group by deptno);--(18)查询工资高于本部门平均工资的员工的信息。

select * from emp e1where sal >(select avg(sal) from emp e2 where e2.deptno=e1.deptno);--(19)查询工资高于本部门平均工资的员工的信息及其部门的平均工资。

select e.*,a.avgsalfrom emp e,(select deptno,avg(sal) as avgsal from emp group by deptno) a where a.deptno=e.deptno and e.sal>a.avgsal;--(20)统计各个工种的人数与平均工资。

select count(*),e.job,avg(e.sal) from emp egroup by e.job--(21)统计每个部门中各个工种的人数与平均工资。

select deptno,job,count(empno),avg(sal) from emp egroup by e.deptno,e.job--(22)查询所有员工工资都大于1000的部门的信息。

select * from dept where deptno in(select deptno from empwhere deptno not in(select distinct deptno from emp where sal<1000));--(23)查询所有员工工资都大于1000的部门的信息及其员工信息。

select * from emp e join dept don d.deptnoin (select deptno from empwhere deptno not in(select distinct deptno from emp where sal<1000))and d.deptno=e.deptno;--(24)查询所有员工工资都在900~3000之间的部门的信息。

select * from deptwhere deptno not in(select deptno from empwhere sal not between 900 and 3000);--(25)查询所有工资都在900~3000之间的员工所在部门的员工信息。

select * from emp awhere a.deptno in(select distinct e.deptno from emp ewhere e.sal between 900 and 3000);--(26)查询每个员工的领导所在部门的信息。

select d.* from dept dwhere d.deptno in(select distinct e2.deptno from emp e1,emp e2where e1.empno=e2.mgr);--(27)查询人数最多的部门信息。

select * from deptwhere deptno in(select deptno from (select count(*) count,deptno from emp group by deptno) where count in(select max(count)from (select count(*) count ,deptno from emp group by deptno)));--(28)查询30号部门中工资排序前3名的员工信息。

select * from(select sal from emp where deptno=30 order by sal desc) ewhere rownum<4--(29)查询'JONES'员工及所有其直接、间接下属员工的信息。

select e.* from emp estart with ename='JONES'connect by prior empno=mgr;---(30)查询SCOTT员工及其直接、间接上级员工的信息。

select e.* from emp estart with ename='SCOTT'connect by prior mgr=empno;--(31)以树状结构查询所有员工与领导之间的层次关系。

select substr(sys_connect_by_path(ename,'->'),3),levelfrom empstart with mgr is nullconnect by prior empno=mgr;--(32)向emp表中插入一条记录,员工号为1357,员工名字为oracle,--工资为2050元,部门号为20,入职日期为2002年5月10日。

--(33)将各部门员工的工资修改为该员工所在部门平均工资加1000。

update emp e set sal=1000+(select avg(sal) from emp where deptno=e.deptno);--(34)查询工作等级为2级,1985年以后入职的工作地点为DALLAS的员工编号、--姓名和工资。

select e.ename,e.empno,e.sal from emp e,salgrade s,dept dwhere (e.sal between s.losal and s.hisal)and (s.grade=2)and to_char(e.hiredate,'yyyy')>1985and e.deptno=d.deptnoand d.loc='DALLAS';--35.部门平均薪水最高的部门编号select * from(select avg(sal) avgsal,deptnofrom emp group by deptno order by avgsal desc)where rownum=1;select deptno,avg(sal) from emp group by deptno having avg(sal)=(select max(avg(sal)) avgsalfrom emp group by deptno)--36,部门平均薪水最高的部门名称select d.* from dept d where deptno in(select deptno from emp group by deptno having avg(sal)=(select max(avg(sal)) avgsalfrom emp group by deptno))--37.平均薪水最低的部门的部门名称select d.* from dept d where deptno in(select deptno from emp group by deptno having avg(sal)=(select min(avg(sal)) avgsalfrom emp group by deptno))--38.平均薪水等级最低的部门的部门名称select d.dname from dept dwhere d.deptno in(select a.deptno from(select e.deptno from emp e,salgrade swhere (e.sal between s.losal and s.hisal)group by e.deptno order by avg(s.grade)) awhere rownum=1);--39.部门经理人中,薪水最低的部门名称select dname from dept where deptno=(select deptno from(select deptno from emp where job='MANAGER' group by deptnoorder by min(sal)) where rownum=1)--40.比普通员工的最高薪水还要高的经理人名称select ename from emp where sal>(select max(sal) from emp where job not in('MANAGER','PRESIDENT')) and job='MANAGER' or job='PRESIDENT'--41.删除重复部门,但是留下一项insert into dept values(70,'RESEARCH','DALLAS')select deptno,dname,rowid from deptdelete from dept dwhere rowid<>(select min(rowid) from dept where dname=d.dname and d.loc=loc)--42.更新员工工资为他的主管的工资,奖金update emp e set sal=(select sal from emp where empno=e.mgr),comm=(select comm from emp where empno=e.mgr)update emp e set (sal,comm)=(select sal,comm from emp where empno=e.mgr)rollback;select * from emp;。

相关文档
最新文档