SQL查询练习题
- 格式:doc
- 大小:8.50 KB
- 文档页数:5
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考试题及答案一、选择题(每题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语句练习题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、查询显示每个雇员加入公司的准确时间,按××××年××月××日时分秒显示。
--(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查询习题一、单表查询练习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。
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练习题答案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测试试题一、选择题(每题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分)描述一个实际的数据库应用场景,并设计相应的数据表结构。
--(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题/*⼀个项⽬涉及到的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语句。
--练习题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的各班(班级名称)各门课程(课程名称)的考试人数,考试分数的最高分、最低分、平均分、标准差、方差。