SQL查询练习题
sql 五十题
sql 五十题以下是一些SQL练习题,共50题:1. 什么是SQL?2. 什么是关系型数据库?3. 什么是主键?4. 什么是外键?5. 什么是索引?6. 什么是查询?7. 什么是插入操作?8. 什么是更新操作?9. 什么是删除操作?10. 什么是聚合函数?11. 什么是分组操作?12. 什么是排序操作?13. 什么是联接操作?14. 什么是子查询?15. 什么是视图?16. 什么是存储过程?17. 什么是触发器?18. 如何使用WHERE子句进行过滤?19. 如何使用ORDER BY子句进行排序?20. 如何使用GROUP BY子句进行分组?21. 如何使用HAVING子句进行分组过滤?22. 如何使用JOIN操作联接表?23. 如何使用聚合函数SUM、AVG、MIN、MAX?24. 如何使用聚合函数COUNT、COUNT()和COUNT(列名)的区别?25. 如何使用子查询嵌套查询?26. 如何创建视图并查询视图数据?27. 如何创建存储过程并调用存储过程?28. 如何创建触发器并触发触发器?29. 如何使用INSERT INTO语句插入数据?30. 如何使用UPDATE语句更新数据?31. 如何使用DELETE语句删除数据?32. 如何使用TRUNCATE TABLE语句清空表数据?33. 如何使用UNION操作符合并多个查询结果?34. 如何使用UNION ALL操作符合并多个查询结果(包括重复行)?35. 如何使用IN操作符筛选符合条件的多个值?36. 如何使用LIKE操作符进行模糊查询?37. 如何使用NOT操作符进行否定筛选?38. 如何使用BETWEEN操作符筛选范围值?39. 如何使用EXISTS操作符检查子查询结果是否存在?40. 如何使用NOT EXISTS操作符检查子查询结果是否存在(否定筛选)?41. 如何使用CASE语句进行条件判断和值转换?42. 如何使用DISTINCT关键字去除查询结果的重复行?43. 如何使用LIMIT关键字限制查询结果的行数?44. 如何使用JOIN操作连接多个表并筛选数据?45. 如何使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别和用法?46. 如何使用视图提高查询效率和维护数据安全性?47. 如何使用存储过程存储复杂的业务逻辑和重复使用的查询语句?48. 如何使用触发器自动执行特定事件或数据修改操作?49. 如何优化SQL查询性能,提高数据库的响应速度?50. 如何安全地管理和维护数据库,确保数据的完整性和可靠性?。
sql考试题及答案
sql考试题及答案SQL考试题及答案一、选择题(每题2分,共20分)1. 下列哪个SQL语句用于查询数据?A. SELECTB. INSERTC. UPDATED. DELETE答案:A2. 以下哪个SQL语句用于删除表中的数据?A. DROP TABLEB. DELETE FROMC. TRUNCATE TABLED. ALTER TABLE答案:B3. SQL中的主键约束是什么?A. UNIQUEB. PRIMARY KEYC. FOREIGN KEYD. CHECK答案:B4. 以下哪个函数用于计算字符串的长度?A. CONCAT()B. SUBSTRING()C. LENGTH()D. UPPER()答案:C5. 以下哪个语句用于添加新的数据表?A. CREATE DATABASEB. CREATE TABLEC. ALTER TABLED. DROP TABLE答案:B6. SQL中的LIKE语句用于什么?A. 排序B. 条件搜索C. 聚合数据D. 连接表答案:B7. 以下哪个语句用于修改表结构?A. CREATE TABLEB. ALTER TABLEC. DROP TABLED. TRUNCATE TABLE答案:B8. SQL中的GROUP BY语句用于什么?A. 排序结果B. 聚合数据C. 过滤数据D. 连接表答案:B9. 以下哪个语句用于删除数据库?A. DROP TABLEB. DROP DATABASEC. DELETE FROMD. TRUNCATE TABLE答案:B10. SQL中的INNER JOIN用于什么?A. 内连接B. 外连接C. 全连接D. 交叉连接答案:A二、填空题(每空2分,共20分)1. SQL中的______语句用于插入数据到表中。
答案:INSERT INTO2. 要查询所有列,可以使用SQL中的______关键字。
答案:*3. 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查询练习题含答案
--(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)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,--若月份相同则按入职的年份排序。
SQL查询习题
SQL查询习题一、单表查询练习1、查询<学生信息表>,查询学生"张三"的全部基本信息select *from xsbwhere xm='张三'2、查询<学生信息表>,查询学生"张三"和”张四”的基本信息select *from xsbwhere xm='张三'or xm='张四'3、查询<学生信息表>,查询姓"张"学生的基本信息select *from xsbwhere xm like '张%'4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息select *from xsbwhere xm like '%四%'5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。
select *from xsbwhere xm like '李_强'6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。
select *from xsbwhere xm like '张%'or xm='李%'7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息select *from xsbwhere xm like '张%'and jg='北京'8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息select *from xsbwhere jg='北京'or jg='上海'or jg='山东'or jg='新疆' orselect *from xsbwhere jg in ('北京','上海','山东','新疆')9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息select *from xsbwhere xm like '张%'and jg!='北京'orselect *from xsbwhere xm like '张%'and jg<>'北京'orselect *from xsbwhere xm like '张%'and jg not like '%北京%'10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序select *from xsborder by xb,jg,bj11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份select distinct jgfrom xsb12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩select xh,kch,cjfrom cjbwhere cj is null13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序select *from cjbwhere cj is not nullorder by cj desc14、找出两个姓张的同学信息,只显示对应学生的姓名,性别和班级Select top 2 xm,xb,bjFrom xsbWhere xm like '张%'二、聚合函数练习1、统计<学生信息表>,统计共有多少个学生select count (*)from xsb2、统计<学生信息表>,统计年龄大于20岁的学生有多少个select count (*)from xsbwhere nl>='20'orselect count (*)from xsbwhere year(getdate())-year(csrq)>203、统计<学生信息表>,统计入学时间在1998年至2000年的学生人数select count (*)from xsbwhere rxrq>='1998-1-1' and rxrq<='2000-12-31'where rxrq between ‘1998-1-1’ and ‘2000-12-31’4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩select AVG(cj)from cjbwhere xh='1'ORselect CONVERT(DECIMAL(18,2),AVG(cj)) ||保留小数点两位from cjbwhere xh='1'5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩select sum(cj)from cjbwhere xh='1'6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩select max(cj)from cjbwhere kch='23'7、统计<学生信息表>,查询所有学生中的最大年龄是多少select max(nl)from xsb三、分组查询练习1、统计<学生选修信息表>,统计每个课程的选修人数select kch,count(*)from cjbgroup by kch2、统计<学生选修信息表>,统计每个同学的总成绩select sum(cj)from cjbgroup by xh3、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序select bj,xb,count(*)from xsbgroup by bj,xb4、统计<学生选修信息表>,统计每门课程的平均成绩,并按照平均成绩降序排序select kch,AVG(cj)from cjbgroup by kchorder by AVG(cj) desc5、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号select xhfrom cjbwhere cj<'60'group by xhhaving count(*)>='2' 分组后的条件判断6、统计<学生信息表>,统计每个班级中的最大年龄是多少select bj,SUM(nl)from xsbgroup by bj四、嵌套查询练习1、用子查询实现,查询选修“高等数学”课的全部学生的总成绩1.课程表查课程号2.查所有高数成绩Select Sum( cj)from cjbwhere kch=( Select kchfrom kcbwhere kcm='高等数学')2、用子查询实现,统计<学生选修信息表>,显示学号为"S001"的学生在其各科成绩中,最高分成绩所对应的课程思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果学号一最高分最高分对应的课程号课程号对应课程名Select max(cj)From cjbWhere xh='1'Select kchFrom kcbWhere cj= (select max(cj ) from cjb ) and xh=’1’Select kcmFrom kcbWhere kch in ( Select kchFrom kcbWhere cj= (select max(cj ) from cjb ) and xh=’1’)3、用子查询实现,查询2班选修"数据库技术"课的所有学生的成绩之和1.班级二班学生Select xhFrom xsbWhere bj=’2’2.课程表里查课程号Select kchFrom kcbWhere kcm=’数据库技术’Select sum(cj)From cjbWhere xh in( Select xhFrom xsbWhere bj=’2’) and kch=( Select kchFrom kcbWhere kcm=’数据库技术’)4、用子查询实现,查询3班"张三"同学的"测试管理"成绩1.测试管理的课程号2.张三的学号Select xhFrom xsbWhere xm=’张三’and bj=’3’Select kchFrom kcbWhere kcm=’测试管理’Select cjFrom cjbWhere xh in ( Select xh ||in 可能有重名的多个‘张三’From xsbWhere xm=’张三’) and kcm=( Select kchFrom kcbWhere kcm=’测试管理’)五、联接查询练习1、查询"张三"的各科考试成绩,要求显示姓名、课程号和成绩查张三学号Select xhFrom xsbWhere xm=’张三’查学号对应成绩Select cj,kchFrom cjbWhere xh in(Select xhFrom xsbWhere xm=’张三’)Orselect xm, kch,cjfrom xsb,cjbwhere xsb.xh=cjb.xhand xm='张三'2、查询"张三"的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩查张三学号Select xhFrom xsbWhere xm=’张三’学号对应的没有成绩的Select cj,kchFrom cjbWhere cj is nullSelect kchFrom cjbWhere cj=( Select cjFrom cjbWhere cj is null) and xh in (Select xhFrom xsbWhere xm=’张三’)Orselect xm, kch,cjfrom xsb,cjbwhere xsb.xh=cjb.xhand xm='张三'and cj is null3、查询"张三"的各门课程成绩,要求显示姓名、课程名称和成绩查张三学号学号对应成绩select xm,kcm,cjfrom xsb,cjb,kcbwhere xsb.xh=cjb.xhand cjb.kch=kcb.kchand xm='张三'4、查询3班"张三"的"测试管理"成绩,要求显示姓名、成绩查3班张三的学号查测试管理的课程号根据学号和课程号查成绩select xm,cjfrom xsb,cjb,kcbwhere xsb.xh=cjb.xhand cjb.kch=kcb.kchand xm='张三'and kcm='测试管理'and bj=’3’5、查询所有2000年以前入学的,各班男生的各科考试平均成绩select AVG(cj),bj,kchfrom xsb,cjbwhere xsb.xh=cjb.xhand rxrq<'2000 'and xb='男'group by bj,kch六、外联接查询查询”李坚强”所有课程的成绩,并显示学号、姓名、课程号和成绩,没有成绩记录的学号包括:('S009','S010','S011')1、使用左联接2、使用右联接3、对比等值连接七、补充提高1、查询“张三”比“王三”入学早几年2、查询所在班级和该班内学生的年龄之和,其中每个人的年龄都大于20岁,每个班的年龄之和大于60岁3、计算每种产品的剩余库存量表1,为产品进货表,产品名称name[char(10)],产品数量amount[int]表2,为产品出货表,产品名称name[char(10)],产品数量amount[int]业务逻辑:表1存储产品的总进货量,表2存储每种产品每次的出货量,如产品A进货为100,出货了3次,每次分别为10、20、30,那么A产品的库存就为40表A1 | 表A2-------------------|--------------------------- name amount | name amountA 100 | A 10B 100 | A 20| A 30| B 10| B 40。
SQL查询习题及答案
36.设教学用的四个基本表(S,C,T,SC)(2)查询年龄大于23岁的女同学的学号和姓名select 姓名,学号from swhere 性别='女' and 年龄>23(3)查询至少选修了刘老师所讲授课程中的一门课程的女同学姓名select s.姓名from s,scwhere s.性别='女'and s.学号=sc.学号and sc.课程编号in(select c.课程编号from c,twhere c.教师编号=t.教师编号and t.姓名='刘%')(4)查询至少选修了2门课程的学生学号select sc.学号from scgroup by 学号having count(课程编号)>2(5)查询全部学生都选修的课程号与课程名select c.课程编号,c.课程名称from c,scwhere sc.课程编号=c.课程编号and sc.学号=(select distinct s.学号from s)(6)计算机系每个教师讲授的课程号select t.教师编号,课程编号from c,twhere t.所在系='计算机系(7)查询没有选修过任何一门课程的学生的学号select s.学号from swhere s.学号not in(select distinct sc.学号from sc)(10)统计个系教师的人数select count (教师编号)from tgroup by 所在系(11)统计出教师人数超过10人的系的名称select t.所在系from tgroup by 所在系having count(教师编号)>10(12)在选课表SC中查询成绩为NULL的学生的学号和课程号select 学号课程编号from scwhere 成绩='NULL'(13)姓王的同学的年龄、姓名、选课名称、成绩select 年龄,姓名,课程名称,成绩from s,c,scwhere s.学号=sc.学号and c.课程编号=sc.课程编号and s.姓名='王%'(14)查询年龄大于女同学平均年龄的男同学姓名和年龄select 姓名,年龄from swhere 性别='男' and 年龄>(select avg(年龄)from swhere 性别='女')37.在数据库{USER、ORDER}中,用户需要查询“所有于2009年5月25日下订单的女顾客姓名”。
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测试试题一、选择题(每题2分,共20分)在SQL中,用于查询数据的关键字是()。
A. INSERTB. SELECTC. UPDATED. DELETESQL中用于向表中插入新数据的语句是()。
A. INSERT INTOB. SELECT INTOC. UPDATED. DELETE在SQL中,要删除表中的记录,应使用()语句。
A. DELETEB. DROPC. TRUNCATED. ALTER以下哪个SQL函数用于计算某个字段的总和?()A. SUM()B. AVG()C. COUNT()D. MAX()在SQL中,如果要根据某个字段对结果进行排序,应使用()子句。
A. WHEREB. ORDER BYC. GROUP BYD. HAVING二、填空题(每空2分,共10分)SQL的全称是__________。
在SQL中,用于过滤记录的条件语句是__________。
如果要查询某个表中所有字段的数据,可以使用__________通配符。
三、简答题(每题5分,共15分)描述SQL中JOIN操作的作用及其类型。
解释SQL中聚合函数的作用,并列举至少三种常见的聚合函数。
在SQL中,GROUP BY和HAVING子句有什么区别?四、SQL语句编写题(每题10分,共30分)假设有一个名为“Employees”的表格,包含字段“ID”、“Name”和“Salary”。
编写一个SQL语句,查询工资最高的员工的姓名和工资。
假设有一个名为“Customers”的表格,包含字段“ID”、“Name”和“Age”。
编写一个SQL语句,查询年龄大于30岁的客户姓名。
假设有一个名为“Orders”的表格,包含字段“OrderID”、“CustomerID”和“OrderDate”。
编写一个SQL语句,查询每个客户的最后下单日期。
五、综合应用题(每题15分,共25分)描述一个实际的数据库应用场景,并设计相应的数据表结构。
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查询50题
sql查询50题/*⼀个项⽬涉及到的50个Sql语句问题及描述:--1.学⽣表Student(S#,Sname,Sage,Ssex) --S# 学⽣编号,Sname 学⽣姓名,Sage 出⽣年⽉,Ssex 学⽣性别--2.课程表Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号--3.教师表Teacher(T#,Tname) --T# 教师编号,Tname 教师姓名--4.成绩表SC(S#,C#,score) --S# 学⽣编号,C# 课程编号,score 分数select * from Studentselect * from Courseselect * from Teacherselect * from SC*/--创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')insert into Student values('04' , N'李云' , '1990-08-06' , N'男')insert into Student values('05' , N'周梅' , '1991-12-01' , N'⼥')insert into Student values('06' , N'吴兰' , '1992-03-01' , N'⼥')insert into Student values('07' , N'郑⽵' , '1989-07-01' , N'⼥')insert into Student values('08' , N'王菊' , '1990-01-20' , N'⼥')create table Course(C# varchar(10),Cname nvarchar(10),T# varchar(10))insert into Course values('01' , N'语⽂' , '02')insert into Course values('02' , N'数学' , '01')insert into Course values('03' , N'英语' , '03')create table Teacher(T# varchar(10),Tname nvarchar(10))insert into Teacher values('01' , N'张三')insert into Teacher values('02' , N'李四')insert into Teacher values('03' , N'王五')create table SC(S# varchar(10),C# 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)go--1、查询"01"课程⽐"02"课程成绩⾼的学⽣的信息及课程分数--1.1、查询同时存在"01"课程和"02"课程的情况--1.2、查询同时存在"01"课程和"02"课程的情况和存在"01"课程但可能不存在"02"课程的情况(不存在时显⽰为null)(以下存在相同内容时不再解释)--2、查询"01"课程⽐"02"课程成绩低的学⽣的信息及课程分数--2.1、查询同时存在"01"课程和"02"课程的情况--2.2、查询同时存在"01"课程和"02"课程的情况和不存在"01"课程但存在"02"课程的情况--3、查询平均成绩⼤于等于60分的同学的学⽣编号和学⽣姓名和平均成绩--4、查询平均成绩⼩于60分的同学的学⽣编号和学⽣姓名和平均成绩--4.1、查询在sc表存在成绩的学⽣信息的SQL语句。
数据库的sql语句练习题
数据库的sql语句练习题1. 练习题一:查询语句基础在学生表(students)中,包含以下字段:学号(id)、姓名(name)、年龄(age)、性别(gender)、班级(class)、成绩(score)。
请编写SQL语句实现以下需求:a) 查询学生表中所有学生的信息。
b) 查询学生表中的男性学生信息。
c) 查询学生表中年龄为18岁的学生信息。
d) 查询学生表中成绩大于等于90分的学生信息。
e) 查询学生表中姓“张”的学生信息。
2. 练习题二:修改语句练习在学生表(students)中,某个学生的学号为1001,需要将该学生的年龄修改为20岁,请编写相应的SQL语句实现此操作。
3. 练习题三:插入语句练习在学生表(students)中添加一条新纪录,学号为1002,姓名为李明,年龄为19岁,性别为男,班级为三年级,成绩为87分,请编写相应的SQL语句实现此操作。
4. 练习题四:删除语句练习在学生表(students)中,某个学生的学号为1003,需要将该学生的信息从表中删除,请编写相应的SQL语句实现此操作。
5. 练习题五:使用多表查询存在两张表,学生表(students)和课程表(courses)。
学生表包含字段:学号(id)、姓名(name)、班级(class);课程表包含字段:课程编号(course_id)、课程名称(course_name)。
已知约德尔学院中,学号为1001的学生参加了编号为1的课程,请编写SQL语句查询学号为1001的学生所选的课程及课程名称。
6. 练习题六:排序查询练习在学生表(students)中,查询所有学生的信息,并按照成绩从高到低进行排序。
以上是数据库的SQL语句练习题,请按照上述要求编写相应的SQL语句进行解答。
祝你练习愉快,取得好成绩!。
sql50题查询大全
首先给出表结构,表结构需要大家去分析一下他们之间的逻辑关系。
tblStudent(SId,Sname,Sage,Ssex) 学生表 tblCourse(CId,Cname,TId) 课程表 tblScore(SId,CId,Score) 成绩表 tblTeacher(TId,Tname) 教师表tblStudent(SID,Sname,Sage,Ssex) 学生表tblCourse(CID,Cname,TID) 课程表tblScore(SID,CID,Score) 成绩表tblTeacher(TID,Tname) 教师表问题:1、查询“”课程比“”课程成绩高的所有学生的学号;SELECT a.SID FROM (SELECT SId,Score FROM tblScore WHERE CID='001') a, (SELECT SId,Score FROM tblScore WHERE CID='002') bWHERE a.Score>b.Score AND a.SId=b.SId;2、查询平均成绩大于分的同学的学号和平均成绩;SELECT SID,avg(Score)FROM scGROUP BY SID having avg(Score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;SELECTtblStudent.SID,tblStudent.Sname,count(tblScore.CID),sum(Score)FROM tblStudent left Outer JOIN tblScore on tblStudent.SID=tblScore.SIDGROUP BY tblStudent.SID,Sname4、查询姓“李”的老师的个数;SELECT count(distinct(Tname))FROM tblTeacherWHERE Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;SELECT tblStudent.SID,tblStudent.SnameFROM tblStudentWHERE SID not in (SELECT distinct( tblScore.SID) FROM tblScore,tblCourse,tblTeacher WHERE tblScore.CID=tblCourse.CID AND tblTeacher.TID=tblCourse.TID AND tblTeacher.Tname='叶平');6、查询学过“”并且也学过编号“”课程的同学的学号、姓名;SELECT tblStudent.SID,tblStudent.Sname FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND tblScore.CID='001'and exists( SELECT * FROM tblScore as tblScore_2 WHERE tblScore_2.SID=tblScore.SID AND tblScore_2.CID='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;SELECT SID,SnameFROM tblStudentWHERE SID in (SELECT SID FROM tblScore ,tblCourse ,tblTeacher WHERE tblScore.CID=tblCourse.CID AND tblTeacher.TID=tblCourse.TID AND tblTeacher.Tname='叶平' GROUP BY SID having count(tblScore.CID)=(SELECT count(CID) FROM tblCourse,tblTeacher WHERE tblTeacher.TID=tblCourse.TID AND Tname='叶平'));8、查询课程编号“c001”的成绩比课程编号“”课程低的所有同学的学号、姓名;SELECT SID,Sname FROM (SELECT tblStudent.SID,tblStudent.Sname,Score ,(SELECT Score FROM tblScore tblScore_2 WHERE tblScore_2.SID=tblStudent.SID AND tblScore_2.CID='002') Score2FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND CID='001') S_2 WHERE Score2 <Score;9、查询所有课程成绩小于60分的同学的学号、姓名;SELECT SID,SnameFROM tblStudentWHERE SID not in (SELECT tblStudent.SID FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND Score>60);10、查询没有学全所有课的同学的学号、姓名;SELECT tblStudent.SID,tblStudent.SnameFROM tblStudent,tblScoreWHERE tblStudent.SID=tblScore.SID GROUP BY tblStudent.SID,tblStudent.Sname having count(CID) <(SELECT count(CID) FROM tblCourse);11、查询至少有一门课与学号为“”的同学所学相同的同学的学号和姓名;SELECT SID,Sname FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND CID in SELECT CID FROM tblScore WHERE SID='1001';12、查询至少学过学号为“”同学所有一门课的其他同学学号和姓名;SELECT distinct tblScore.SID,SnameFROM tblStudent,tblScoreWHERE tblStudent.SID=tblScore.SID AND CID in (SELECT CID FROM tblScore WHERE SID='001');13、把“tblScore”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update tblScore set Score=(SELECT avg(tblScore_2.Score)FROM tblScore tblScore_2WHERE tblScore_2.CID=tblScore.CID ) FROM tblCourse,tblTeacher WHERE tblCourse.CID=tblScore.CID AND tblCourse.TID=tblTeacher.TID AND tblTeacher.Tname='叶平');14、查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;SELECT SID FROM tblScore WHERE CID in (SELECT CID FROM tblScore WHERE SID='1002')GROUP BY SID having count(*)=(SELECT count(*) FROM tblScore WHERE SID='1002');15、删除学习“叶平”老师课的tblScore表记录;Delect tblScoreFROM tblCourse ,tblTeacherWHERE tblCourse.CID=tblScore.CID AND tblCourse.TID= tblTeacher.TID AND Tname='叶平';16、向tblScore表中插入一些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、、号课的平均成绩;Insert tblScore SELECT SID,'002',(SELECT avg(Score)FROM tblScore WHERE CID='002') FROM tblStudent WHERE SID not in (SELECT SID FROM tblScore WHERE CID='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT SID as 学生ID,(SELECT Score FROM tblScore WHERE tblScore.SID=t.SID AND CID='004') AS 数据库,(SELECT Score FROM tblScore WHERE tblScore.SID=t.SID AND CID='001') AS 企业管理,(SELECT Score FROM tblScore WHERE tblScore.SID=t.SID AND CID='006') AS 英语,COUNT(*) AS 有效课程数, AVG(t.Score) AS 平均成绩FROM tblScore AS tGROUP BY SIDORDER BY avg(t.Score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.CID As 课程ID,L.Score AS 最高分,R.Score AS 最低分FROM tblScore L ,tblScore AS RWHERE L.CID = R.CID ANDL.Score = (SELECT MAX(IL.Score)FROM tblScore AS IL,tblStudent AS IMWHERE L.CID = IL.CID AND IM.SID=IL.SIDGROUP BY IL.CID)ANDR.Score = (SELECT MIN(IR.Score)FROM tblScore AS IRWHERE R.CID = IR.CIDGROUP BY IR.CID);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.CID AS 课程号,max(ame)AS 课程名,isnull(AVG(Score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(Score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM tblScore T,tblCourseWHERE t.CID=tblCourse.CIDGROUP BY t.CIDORDER BY 100 * SUM(CASE WHEN isnull(Score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DEtblScore20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(),马克思(),OO&UML (),数据库()SELECT SUM(CASE WHEN CID ='001' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN CID = '001' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN CID = '002' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN CID = '002' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN CID = '003' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN CID = '003' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN CID = '004' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN CID = '004' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM tblScore21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.TID) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.CID AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM tblScore AS T,tblCourse AS C ,tblTeacher AS ZWHERE T.CID=C.CID AND C.TID=Z.TIDGROUP BY C.CIDORDER BY AVG(Score) DEtblScore22、查询如下课程成绩第3 名到第6 名的学生成绩单:企业管理(),马克思(),UML (),数据库()[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3tblScore.SID As 学生学号,tblStudent.Sname AS 学生姓名,T1.Score AS 企业管理,T2.Score AS 马克思,T3.Score AS UML,T4.Score AS 数据库,ISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0) as 总分FROM tblStudent,tblScore LEFT JOIN tblScore AS T1ON tblScore.SID = T1.SID AND T1.CID = '001'LEFT JOIN tblScore AS T2ON tblScore.SID = T2.SID AND T2.CID = '002'LEFT JOIN tblScore AS T3ON tblScore.SID = T3.SID AND T3.CID = '003'LEFT JOIN tblScore AS T4ON tblScore.SID = T4.SID AND T4.CID = '004'WHERE tblStudent.SID=tblScore.SID ANDISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0)NOT IN(SELECTDISTINCTTOP 15 WITH TIESISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0)FROM scLEFT JOIN sc AS T1ON sc.SID = T1.SID AND T1.CID = 'k1'LEFT JOIN sc AS T2ON sc.SID = T2.SID AND T2.CID = 'k2'LEFT JOIN sc AS T3ON sc.SID = T3.SID AND T3.CID = 'k3'LEFT JOIN sc AS T4ON sc.SID = T4.SID AND T4.CID = 'k4'ORDER BY ISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0) DEtblScore);23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT tblScore.CID as 课程ID, Cname as 课程名称,SUM(CASE WHEN Score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],SUM(CASE WHEN Score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN Score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN Score < 60 THEN 1 ELSE 0 END) AS [60 -]FROM tblScore,tblCourseWHERE tblScore.CID=tblCourse.CIDGROUP BY tblScore.CID,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT SID,AVG(Score) AS 平均成绩FROM tblScoreGROUP BY SID) AS T1WHERE 平均成绩> T2.平均成绩) as 名次,SID as 学生学号,平均成绩FROM (SELECT SID,AVG(Score) 平均成绩FROM tblScoreGROUP BY SID) AS T2ORDER BY 平均成绩desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.SID as 学生ID,t1.CID as 课程ID,Score as 分数FROM tblScore t1WHERE Score IN (SELECT TOP 3 ScoreFROM tblScoreWHERE t1.CID= CIDORDER BY Score DEtblScore)ORDER BY t1.CID;26、查询每门课程被选修的学生数SELECT CId,count(SID) FROM sc GROUP BY CID;27、查询出只选修了一门课程的全部学生的学号和姓名SELECT tblScore.SID,tblStudent.Sname,count(CID) AS 选课数FROM tblScore ,tblStudentWHERE tblScore.SID=tblStudent.SID GROUP BY tblScore.SID ,tblStudent.Sname having count(CID)=1;28、查询男生、女生人数SELECT count(Ssex) as 男生人数FROM tblStudent GROUP BY Ssex having Ssex='男';SELECT count(Ssex) as 女生人数FROM tblStudent GROUP BY Ssex having Ssex='女';29、查询姓“张”的学生名单SELECT Sname FROM tblStudent WHERE Sname like '张%';30、查询同名同性学生名单,并统计同名人数SELECT Sname,count(*) FROM tblStudent GROUP BY Sname having count(*)>1;;31、年出生的学生名单(注:tblStudent表中Sage列的类型是datetime)SELECT Sname, CONVERT(char (11),DATEPART(year,Sage)) as ageFROM tblStudentWHERE CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列SELECT CID,Avg(Score) FROM tblScore GROUP BY CID ORDER BY Avg(Score),CID DEtblScore ;33、查询平均成绩大于的所有学生的学号、姓名和平均成绩SELECT Sname,tblScore.SID ,avg(Score)FROM tblStudent,tblScoreWHERE tblStudent.SID=tblScore.SID GROUP BY tblScore.SID,Sname having avg(Score)>85;34、查询课程名称为“数据库”,且分数低于的学生姓名和分数SELECT Sname,isnull(Score,0)FROM tblStudent,tblScore,tblCourseWHERE tblScore.SID=tblStudent.SID AND tblScore.CID=tblCourse.CID AND ame='数据库'and Score <60;35、查询所有学生的选课情况;SELECT tblScore.SID,tblScore.CID,Sname,CnameFROM tblScore,tblStudent,tblCourseWHERE tblScore.SID=tblStudent.SID AND tblScore.CID=tblCourse.CID ;36、查询任何一门课程成绩在分以上的姓名、课程名称和分数;SELECT distinct tblStudent.SID,tblStudent.Sname,tblScore.CID,tblScore.ScoreFROM tblStudent,ScWHERE tblScore.Score>=70 AND tblScore.SID=tblStudent.SID;37、查询不及格的课程,并按课程号从大到小排列SELECT CId FROM sc WHERE scor e <60 ORDER BY CID ;38、查询课程编号为且课程成绩在分以上的学生的学号和姓名;SELECT tblScore.SID,tblStudent.Sname FROM tblScore,tblStudent WHERE tblScore.SID=tblStudent.SID AND Score>80 AND CID='003';39、求选了课程的学生人数SELECT count(*) FROM sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩SELECT tblStudent.Sname,ScoreFROM tblStudent,tblScore,tblCourse C,tblTeacherWHERE tblStudent.SID=tblScore.SID AND tblScore.CID=C.CID AND C.TID=tblTeacher.TID AND tblTeacher.Tname='叶平' AND tblScore.Score=(SELECT max(Score)FROM tblScore WHERE CID=C.CID );41、查询各个课程及相应的选修人数SELECT count(*) FROM sc GROUP BY CID;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩SELECT distinct A.SID,B.Score FROM tblScore A ,tblScore B WHERE A.Score=B.Score AND A.CID <>B.CID ;43、查询每门功成绩最好的前两名SELECT t1.SID as 学生ID,t1.CID as 课程ID,Score as 分数FROM tblScore t1WHERE Score IN (SELECT TOP 2 ScoreFROM tblScoreWHERE t1.CID= CIDORDER BY Score DEtblScore)ORDER BY t1.CID;44、统计每门课程的学生选修人数(超过人的课程才统计)。
sql 查询 练习题
sql 查询练习题SQL查询练习题SQL是一种用于管理和操作关系型数据库的语言,它可以让我们轻松地从数据库中提取所需的数据。
在实际应用中,熟练掌握SQL查询语句的编写是非常重要的。
为了帮助大家提高SQL查询的能力,下面将给出一些SQL查询练习题。
1. 查询所有员工的姓名和工资。
```sqlSELECT 姓名, 工资 FROM 员工表;```2. 查询所有部门的名称和员工数量。
```sqlSELECT 部门名称, COUNT(*) AS 员工数量 FROM 员工表 GROUP BY 部门名称; ```3. 查询所有工资高于平均工资的员工信息。
```sqlSELECT * FROM 员工表 WHERE 工资 > (SELECT AVG(工资) FROM 员工表);```4. 查询每个部门工资最高的员工信息。
```sqlSELECT * FROM 员工表 WHERE (部门名称, 工资) IN (SELECT 部门名称, MAX(工资) FROM 员工表 GROUP BY 部门名称);```5. 查询没有分配部门的员工信息。
```sqlSELECT * FROM 员工表 WHERE 部门名称 IS NULL;```6. 查询每个部门的平均工资,并按照平均工资降序排列。
```sqlSELECT 部门名称, AVG(工资) AS 平均工资 FROM 员工表 GROUP BY 部门名称ORDER BY 平均工资 DESC;```7. 查询每个部门的员工数量,并按照员工数量升序排列。
```sqlSELECT 部门名称, COUNT(*) AS 员工数量 FROM 员工表 GROUP BY 部门名称ORDER BY 员工数量 ASC;```8. 查询员工表中工资排名前10的员工信息。
```sqlSELECT * FROM 员工表 ORDER BY 工资 DESC LIMIT 10;```9. 查询每个部门的员工工资排名前3的员工信息。
sql考试题及答案
sql考试题及答案一、选择题1. 在SQL中,用于查询一个表中的所有记录的关键字是什么?A. SELECT ALLB. SELECT *C. SELECT DISTINCTD. SELECT TOP 10答案:B2. 下列哪个SQL语句用于添加新的数据行到表中?A. INSERT INTOB. ADD INTOC. CREATE INTOD. NEW INTO答案:A3. 在SQL中,用于删除表中的记录的关键字是什么?A. REMOVEB. DELETEC. ERASED. DROP答案:B4. 下列哪个函数用于计算字段中所有值的总和?A. COUNTB. SUMC. AVGD. MAX答案:B5. 如果你想更新表中的记录,应该使用哪个SQL语句?A. UPDATEB. ALTERC. MODIFYD. CHANGE答案:A二、填空题1. 在SQL中,________关键字用于从一个或多个表中选择数据。
答案:SELECT2. 要为表中的数据设置条件过滤,应使用________子句。
答案:WHERE3. 当需要对查询结果进行排序时,可以使用________关键字。
答案:ORDER BY4. 如果需要对表中的数据进行分组,应使用________关键字。
答案:GROUP BY5. 为了对分组后的结果进行筛选,可以使用________子句。
答案:HAVING三、简答题1. 请简述SQL中的主键和外键的区别。
答案:主键是表中用于唯一标识每条记录的字段,它不允许重复值和NULL值。
外键则是一个表中的字段,它是另一个表的主键的引用,用于建立表之间的联系。
外键可以有重复值,也可以为NULL。
2. 解释SQL中的JOIN操作。
答案:JOIN操作是SQL中用于结合两个或多个表中的数据的查询操作。
通过JOIN,可以根据相关字段将不同表中的记录连接起来,以便进行更复杂的数据分析和查询。
3. 什么是SQL中的事务?答案:事务是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(Structured Query Language)是一种用于管理和处理关系型数据库的编程语言。
在使用SQL进行数据查询、插入、更新和删除等操作时,正确的语法和优化的查询语句对于保证数据库的稳定性和性能至关重要。
下面是一些常见的SQL测试题,帮助您巩固和提升SQL技能。
题目一:查询语句练习1. 查询所有学生的姓名和年龄:```sqlSELECT 姓名, 年龄 FROM 学生表;```2. 查询2019年的所有订单信息,包括订单号、客户姓名和订单日期:```sqlSELECT 订单号, 客户姓名, 订单日期 FROM 订单表 WHERE 订单日期 >= '2019-01-01' AND 订单日期 <= '2019-12-31';```3. 查询已交付的订单总数和总金额:```sqlSELECT COUNT(*) AS 订单总数, SUM(订单金额) AS 总金额FROM 订单表 WHERE 状态 = '已交付';```题目二:数据过滤和排序1. 查询年龄在20岁以下的学生的姓名和年龄,并按年龄升序排序:```sqlSELECT 姓名, 年龄 FROM 学生表 WHERE 年龄 < 20 ORDER BY年龄 ASC;```2. 查询性别为女性且籍贯为北京的学生的姓名、性别和籍贯:```sqlSELECT 姓名, 性别, 籍贯 FROM 学生表 WHERE 性别 = '女' AND籍贯 = '北京';```3. 查询商品订单数量最多的前5名客户的姓名和订单数量:```sqlSELECT 客户姓名, COUNT(*) AS 订单数量 FROM 订单表 GROUP BY 客户姓名 ORDER BY 订单数量 DESC LIMIT 5;```题目三:数据更新和删除1. 将学生表中年龄大于25岁的学生的籍贯设置为上海:```sqlUPDATE 学生表 SET 籍贯 = '上海' WHERE 年龄 > 25;```2. 删除订单表中状态为取消的订单:```sqlDELETE FROM 订单表 WHERE 状态 = '取消';```3. 将学生表中姓名为"张三"的学生的年龄增加1岁:```sqlUPDATE 学生表 SET 年龄 = 年龄 + 1 WHERE 姓名 = '张三';```题目四:表关联和数据统计1. 查询订单表中每个客户的订单总金额:```sqlSELECT 客户姓名, SUM(订单金额) AS 总金额 FROM 订单表GROUP BY 客户姓名;```2. 查询每个商品分类下订单数量最多的商品的名称和订单数量:```sqlSELECT 分类, 商品名称, COUNT(*) AS 订单数量 FROM 商品表JOIN 订单表 ON 商品表.商品编号 = 订单表.商品编号 GROUP BY 分类, 商品名称 ORDER BY 订单数量 DESC;```3. 查询每个学生的姓名和所报课程的数量:```sqlSELECT 学生表.姓名, COUNT(*) AS 课程数量 FROM 学生表 LEFT JOIN 课程表 ON 学生表.学号 = 课程表.学号 GROUP BY 学生表.学号;```以上是一些SQL测试题,通过练习这些题目,您可以加深对于SQL语法和操作的理解,提升您的SQL技能。
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查询题目45道题
1、查询所有数学系学生的信息。
2、查询李老师所教的课程号、课程名3、查询年龄大于20岁的女同学的学号和姓名。
4、查询学号为‘991101’所选修的全部课程成绩。
5、查询平均成绩都在80分以上的学生学号及平均成绩。
6、查询至少有6人选修的课程号。
7、查询01002号课程得最高分的学生的学号8、查询学号为“991104”的学生选修的课程号和课程名9、‘李小波’所选修的全部课程名称。
10、所有成绩都在70分以上的学生姓名及所在系。
11、程序设计成绩比计算机基础成绩好的学生姓名12、至少选修了两门课及以上的学生的姓名和性别13、选修了李老师所讲课程的学生人数14、‘操作系统’课程得最高分的学生的姓名、性别、所在系15、显示所有课程的选修情况。
16、取出没有选修‘操作系统’课程的学生姓名和年龄17、没有选修李老师所讲课程的学生18、取出选修了全部课程的学生姓名,性别。
19、检索至少选修课程“数据结构”和“C语言”的学生学号。
20、检索学习课程号为01002的学生学号与姓名。
21、检索选修课程号为01001或01002的学生学号,姓名和所在系22、检索至少选修课程号为01001和01002的学生姓名。
23、检索每个学生的出生年月24、在STUDENT中检索学生的姓名和出生年份,输出的列名为STUDENT_NAME和BIRTH_YEAR。
25、向学生选课数据表SC中插入一个元组(991105,01001,90)26、把课程名为“程序设计”的成绩从学生选课数据表SC中删除27、把女同学的成绩提高10%。
28、列出选修课程超过3门的学生姓名及选修门数。
29、求选修了各课程的学生的人数。
30、在学生选课数据表SC中,求选修课程01001的学生的学号和得分,并将结果按分数降序排序。
31、查找每个同学的学号及选修课程的平均成绩情况。
32、列出学生所有可能的选课情况。
33、列出每个同学的学号、姓名及选修课程的平均成绩情况,没有选修的同学也列出。
SQL查询语句习题
SQL查询语句习题1.检索“商品信息”类别名称=玩具并且零售价在100和300之间的商品的平均零售价,最⼤零售价,最⼩零售价,以及零售价之和Select 类别名称,零售价, min(零售价)最⼩零售价, max(零售价)最⼤零售价,avg(零售价)平均零售价,sum(零售价)零售价之和from 商品信息 a inner join 商品类别b ona.类别ID=b.类别ID where 类别名称='玩具' group by 类别名称,零售价2.检索“商品⼊出库”中审核⽇期⼤于2009年3⽉1⽇,并且⼊库类型编号为“采购⼊库”的商品的总⾦额(⼊出库数量*进价)返回数据:⼊出库编号、总⾦额(商品⼊出库.⼊库类型编号=⼊出库类型.⼊库类型编号)select a.⼊出库编号,类型名称,总⾦额=⼊出库数量*进价from 商品⼊出库a inner join ⼊出库类型b on a.⼊出库类型编号=b.⼊出库类型编号inner join ⼊出库明细c on c.⼊出库编号= a.⼊出库编号where 审核⽇期>'2009-03-01' and 类型名称='采购⼊库'3. 统计每个仓库中库存的除去⾷品之外的总⾦额(【仓库】.仓库ID=【库存.仓库IDselect 仓库名称,类别名称, sum(数量*零售价)总⾦额from 仓库a inner join 库存b on a.仓库ID=b.仓库IDinner join 商品信息c on b.商品ID=c.商品ID inner join 商品类别d on c.类别ID=d.类别ID where 类别名称not like '⾷品' group by 仓库名称,类别名称4、统计“商品信息”中商品名称相同的信息,要求商品名称的重复次数⼤于3,返回数据商品名称,次数select 商品名称,count(商品名称)次数from 商品信息group by 商品名称having count(商品名称)>35、统计“库存”中汇总库存数量⼩于100的商品编码、商品名称、汇总库存数量select 商品编码,商品名称,count (数量)汇总库存数量from 库存a inner join 商品信息bon a.商品ID=b.商品ID group by 商品编码,商品名称having count (数量)<100实验11 SQL Server 2000的存储过程实验⽬的掌握使⽤向导创建存储过程并更新相应数据掌握使⽤T-SQL编程的⽅法掌握使⽤T-SQL语句创建⼀个存储过程并验证掌握创建和执⾏带参数的存储过程熟练使⽤系统存储过程、系统函数掌握⽤在企业管理器中管理存储过程实验要求创建⼀个不带参数的存储过程。
SQL经典查询练习30问及答案PPT教学课件
• (8)查询与学号为108的同学同岁的所有学生的NO、NAME和AGE。 • (9)查询“张旭”教师任课的课程号,选修其课程学生的学号和成
绩。
• (10)查询选修其课程的学生人数多于5人的教师姓名。
2020/12/11
2
• (11)查询“计算机系”与“电子工程系”不同职称的教师的姓名和 职称。
学生表 教师表
2020/12/11
课程表
1
• 练习作业 • (1)查询选修课程‘3-105’且成绩在60到80之间的所有记录。 • (2)查询成绩为85、86或88的记录。 • (3)查询95031班的学生人数。 • (4)查询至少有5名学生选修并以3开头的课程的平均成绩。 • (5)查询最低分大于70,最高分小于90的NO列。 • (6)查询95033班学生所选课程的平均分。 • (7)查询选修‘3-105’课程的成绩高于‘109’号同学成绩的所有同学
2020/12/11
7
• --(16)列出所有任课教师的NAME和DEPART。 • select name,depart • from teacher • --(17)列出所有未讲课教师的NAME和DEPART。 • select as 教师姓名,depart as 所属院系 • from teacher • where tno not in • (select tno • from course • where cno in ( • select cno • from scores group by cno)); • --(18)列出至少有2名男生的班号。 • select class as 班号 • from student • where sex='男' group by class having count(class) >= 2; • --(19)查询不姓“王”的学生记录。 • select * • from student • where name not in (select name from student where name like '王%'); • --(20)查询每门课最高分的学生的NO、CNO、CRADE。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--练习题01:查找出已修学分低于20分的学生的姓名、性别和班主任。
select 姓名,性别,班主任 from 学生,班级 where 学生.班级编号=班级.班级编号 and 已修学分<20--练习题02:查找出学生“王林”的班主任。
select 班主任 from 班级 where 班级编号 in(select 班级编号 from 学生 where 姓名='王林')--练习题03:查找出班主任“刘成河”班的全部男生的信息。
select 学生.* from 学生,班级 where 性别='男' and 班主任='刘成河' and 学生.班级编号=班级.班级编号--练习题04:查找出课程“中国历史”考试及格的全部学生的学号、姓名、班级名称和分数。
Select 学生.学号,姓名,班级名称,分数 from 学生,成绩,课程,班级 where 课程名称='中国历史'and 课程.课程编号=成绩.课程编号 and 学生.学号=成绩.学号 and 学生.班级编号=班级.班级编号 and 分数>=60--练习题05:查找出全部同学的所有考试的姓名、课程名称、分数,查找结果的格式如下:Select 姓名,课程名称,分数 from 学生,课程,成绩 where 课程.课程编号=成绩.课程编号and 学生.学号=成绩.学号--练习题01:查找出班主任“刘成河”班的全部男生的信息。
Select*from 学生 where 性别='男' and 班级编号 in(select 班级编号 from 班级 where 班主任='刘成河')--练习题02:查找出考试全及格的课程名称。
Select 课程名称 from 课程 where 课程编号 not in (select 课程编号 from 成绩 where 分数<60)select 课程名称from 课程where not exists(select *from 成绩where 成绩.课程编号=课程.课程编号 and 分数<60)--练习题03:查找出所有学生的考试都及格的班级,并排除那些没有学生的班级。
select 班级名称from 班级where 总人数>0 and 班级编号 not in(select 班级编号from 学生where 学号 in(select 学号from 成绩where 分数<60))--练习题04:使用多表查询实现例1。
Select 学生.学号,姓名 from 学生,成绩 where 学生.学号=成绩.学号 and 分数>=95--练习题05:使用多表查询实现例2。
Select 学生.学号,姓名 from 学生,成绩,课程 where 学生.学号=成绩.学号and 成绩.课程编号=课程.课程编号 and 分数>=95 and 课程名称='计算机应用'--练习题06:查找出“数学专业”班全体同学的姓名和“数学”课程考试分数。
SELECT 姓名,分数from 学生,成绩where 学生.学号=成绩.学号and 班级编号in(select 班级编号 from班级 where 班级名称='数学专业' ) and 课程编号 in(select 课程编号 from 课程 where 课程名称='数学')--例1:查找出那些还没有学生的班级名称。
SELECT 班级名称 FROM 班级 WHERE NOT EXISTS (SELECT * FROM 学生 WHERE 学生.班级编号=班级.班级编号)--例2:检索出每个学生都选修了的课程(并且考试都及格)。
SELECT 课程编号,课程名称 FROM 课程 WHERE NOT EXISTS(SELECT 学号 FROM 学生 WHERE NOT EXISTS(SELECT * FROM 成绩WHERE 课程.课程编号=成绩.课程编号 AND 学生.学号=成绩.学号 AND 分数>=60))--练习题01:写出可实现例1要求的其他命令。
Select 班级名称 from 班级 where 班级编号 not in(select 班级编号 from 学生)--练习题02:写出可实现例2要求的其他命令。
SELECT 课程编号,课程名称 FROM 课程 WHERE 课程编号 NOT in(SELECT 课程编号 FROM 成绩WHERE 分数>=60)UPDATE 学生 SET 已修学分=(SELECT SUM(学分) FROM 成绩,课程WHERE 学生.学号=成绩.学号 AND 分数>=60 AND 成绩.课程编号=课程.课程编号)--练习题03:查找出已修学分在15和20之间的学生的信息。
Select*from 学生 where 已修学分 between 15 and 20--练习题04:查找出1983年6月1日至1984年6月1日之间出生的少数民族学生的信息。
UPDATE 学生 SET 民族=(SELECT 民族 FROM 学生B WHERE 学生.学号=学生B.学号)Select*from 学生 where 出生日期 between '1983-6-1' and '1984-6-1' and 民族<> '汉族'--练习题05:查找出已修学分在15和20之间、且“自然辨证法”课程的考试分数达到80分的学生的姓名、性别、所在班级。
select 姓名,性别,班级名称 from 学生,班级 where 班级.班级编号=学生.班级编号 and已修学分 between 15 and 20 and 学号 in (select 学号 from 成绩 where 分数>80 and 课程编号 in(select 课程编号 from 课程 where 课程名称='自然辨证法'))--练习题06:查找出姓名中包含有“林”的学生的信息。
select *from 学生where 姓名 like '%林%'--练习题07:查找出姓名中第二个字是“林”的学生的信息。
select *from 学生where 姓名 like '_林%'--练习题08:查找出班主任“郭大壮”的班中出生地是武汉的学生的姓名、班级。
Select 姓名,班级名称 from 学生,班级 where 班主任='郭大壮' and出生地 like '%武汉%' and 学生.班级编号=班级.班级编号--练习题09:查找出至少参加了辛有余老师所任课程中一门课程考试的男生的姓名。
至少写出两条不同的命令。
select distinct 姓名 from 学生,课程 where 性别='男' and 任课老师='辛有余' and exists (select*from 成绩 where 学生.学号=成绩.学号 and 成绩.课程编号=课程.课程编号)select distinct 姓名 from 学生 where 性别='男' and 学号 in (select 学号 from 成绩where 课程编号 in (select 课程编号 from 课程 where 任课老师='辛有余'))--练习题01:计算出“软件工程”和“计算机应用”两个班全体同学的平均已修学分。
--注意:当子查询的结果只有一个数据时,可以用等号;为多个数据时,需用 IN。
SELECT AVG(已修学分) FROM 学生 WHERE 班级编号 IN(SELECT 班级编号 FROM 班级WHERE 班级名称='软件工程' or 班级名称='计算机专业')--练习题02:计算出李建同学各门课程考试总分。
Select sum(分数) from 成绩 where 学号 in (select 学号 from 学生 where 姓名='李建')--练习题04:计算出各门课程考试的平均分数。
select 课程编号,avg(分数)as 均分 from 成绩 group by 课程编号--练习题05:计算出各位学生的考试总分。
Select 学号,sum(分数) as 考试总分 from 成绩 group by 学号--练习题06:计算出辛有余老师所任课程中每门课程的课程编号和学生平均考试分数。
Select 课程.课程编号,avg(分数) as 平均考试分数 from 课程,成绩 where 课程.课程编号=成绩.课程编号 and任课老师='辛有余' group by 课程.课程编号--练习题07:查找和计算出各门课程的名称及其考试的平均分数。
select 课程名称,均分from 课程,( select 课程编号,avg(分数)as 均分from 成绩group by 课程编号)as jfwhere 课程.课程编号=jf.课程编号--练习题08:查找和计算出各门课程的名称及其考试达到90分的人数。
select 课程名称,count(*) as 人数from 课程,成绩where 课程.课程编号=成绩.课程编号 and 分数>=90group by 课程名称--练习题10:查找出考试成绩优秀人数多于3人的课程编号及其学生人数(假定考试分数达到90分为优秀)。
Select 课程编号,count(*) as 优秀学生人数 from 成绩 where 分数>=90group by 课程编号 having count(*)>3--练习题11:查找出考试成绩优秀人数多于3人的课程名称及其学生人数(假定考试分数达到90分为优秀)。
Select 课程名称,count(*) as 优秀学生人数 from 成绩,课程 where 分数>=90 and成绩.课程编号=课程.课程编号 group by 课程名称 having count(*)>3--练习题12:查找出考试成绩优秀人次多于5人次的班级名称及其人次(假定考试分数达到90分为优秀)。
Select 班级名称,count(*) as 优秀学生人数 from 成绩,班级,学生 where 分数>=90and 班级.班级编号=学生.班级编号 and 学生.学号=成绩.学号group by 班级名称 having count(*)>5--练习题13:查找出考试分数标准差小于10、且最高分与最低分之差小于20的各班(班级名称)各门课程(课程名称)的考试人数,考试分数的最高分、最低分、平均分、标准差、方差。