sql查询练习题含答案
sql练习题及答案
![sql练习题及答案](https://img.taocdn.com/s3/m/b76d51f564ce0508763231126edb6f1aff007107.png)
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语句练习题(包含有多表查询)-答案](https://img.taocdn.com/s3/m/827e0fc82cc58bd63186bd21.png)
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查询练习题含答案](https://img.taocdn.com/s3/m/5216ad6fee06eff9aff8072d.png)
--(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查询题目及答案](https://img.taocdn.com/s3/m/39dd779968dc5022aaea998fcc22bcd126ff4201.png)
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查询练习题含答案](https://img.taocdn.com/s3/m/97ae1ebe3968011ca200912e.png)
--(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练习题及答案](https://img.taocdn.com/s3/m/3c9f9a3f10661ed9ad51f3be.png)
选择题(1)如果要查询所藏图书中,各个出版社图书的最高单价、平均单价和册数,所用的SQL 语句是A)SELECT 出版单位,MAX(单价),AVG(单价),COUNT(*);FROM 图书;GROUP BY 出版单位B)SELECT 出版单位,MAX(单价),AVG(单价),COUNT(*);FROM 图书;HAVING 出版单位C)SELECT 出版单位,MAX(单价),AVG(单价),COUNT(*);FROM 图书GROUP BY 出版单位D)SELECT 出版单位,MIN(单价), AVG(单价),COUNT(*);FROM 图书;HAVING 出版单位(2)为"运动员"表增加一个字段"得分"的SQL语句是A)CHANGE TABLE运动员ADD得分IB)ALTER DATA运动员ADD得分IC)ALTER TABLE运动员ADD得分ID)CHANGE TABLE运动员IN得分I(3)利用SQL数据更新功能,自动计算更新每个"设备总金额"字段的字段值,该字段值等于"单价*设备数量"的值,正确命令为A)UPDATE 设备表SET 设备总金额=单价*设备数量B)UPDATE 设备表FOR 设备总金额=单价*设备数量C)UPDATE 设备表WITH 设备总金额=单价*设备数量D)UPDATE 设备表WHERE 设备总金额=单价*设备数量(4)查找教师表中教师最高的工资值,下列SQL语句正确的是A)SELECT MAX(工资) FROM 教师表B)SELECT MIN(工资) FROM 教师表C)SELECT AVG(工资) FROM 教师表D)SELECT SUM(工资) FROM 教师表(5)在当前目录下有数据表文件student.dbf,执行如下SQL语句后SELECT * FORM student INTO DBF student ORDER BY 学号/DA)生成一个按"学号"升序的表文件,将原来的student.dbf文件覆盖B)生成一个按"学号"降序的表文件,将原来的student.dbf文件覆盖C)不会生成新的排序文件,保持原数据表内容不变D)系统提示出错信息(6)语句"DELETE FROM 成绩表WHERE 计算机<60"的功能是A)物理删除成绩表中计算机成绩在60分以下的学生记录B)物理删除成绩表中计算机成绩在60分以上的学生记录C)逻辑删除成绩表中计算机成绩在60分以下的学生记录D)将计算机成绩低于60分的字段值删除,但保留记录中其它字段值(7)检索职工表中工资大于800元的职工号,正确的命令是A)SELECT 职工号WHERE 工资>800B)SELECT 职工号FROM 职工SET 工资>800C)SELECT 职工号FROM 职工WHERE 工资>800D)SELECT 职工号FROM 职工FOR 工资>800(8)下列选项中,不属于SQL数据定义功能的是A)SELECTB)CREATEC)ALTERD)DROP(9)有"工资"表和"职工"表,结构如下:职工.dbf:部门号C(8),职工号C(10),姓名C(8),性别C(2),出生日期D工资.dbf:职工号C(10),基本工资N(8,2),津贴N(8,2),奖金N(8,2),扣除N(8,2) 查询职工实发工资的正确命令是A)SELECT 姓名,(基本工资+冿贴+资金-扣除)AS实发工资FROM 工资B)SELECT 姓名,(基本工资+冿贴+资金-扣除)AS实发工资FROM 工资;WHERE 职工.职工号=工资.职工号C)SELECT 姓名,(基本工资+冿贴+资金-扣除)AS实发工资;FROM 工资,职工WHERE职工.职工号=工资.职工号D)SELECT 姓名,(基本工资+冿贴+资金-扣除)AS实发工资;FROM 工资JOIN 职工WHERE职工.职工号=工资.职工号(10)从设备表中查询单价大于100000元的设备,并显示设备名称,正确的命令是A)SELECT 单价>100000 FROM 设备表FOR 设备名称B)SELECT 设备名称FROM 设备表FOR 单价>100000C)SELECT 单价>100000 FROM 设备表WHERE 设备名称D)SELECT 设备名称FROM 设备表WHERE 单价>100000(11)下列命令动词中,不具有数据操纵功能的SQL语句是A)DELETEB)UPDATEC)INSERTD)DROP(12)显示2005年1月1日后签订的订单,显示订单的订单号、客户名以及签订日期。
(完整版)sql练习题+答案
![(完整版)sql练习题+答案](https://img.taocdn.com/s3/m/5629596d1a37f111f0855b1c.png)
(一) 新建以下几个表student(学生表):其中约束如下:(1)学号不能存在相同的(2)名字为非空(3)性别的值只能是’男’或’女’(4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系(5)出生日期为日期格式(6)年龄为数值型,且在0~100之间cs(成绩表):其中约束如下:(1)sno和cno分别参照student和course表中的sno,cno的字段(2)cj(成绩)只能在0〜100之间,可以不输入值create table cs (sno smallint not null referencesstudent ( sno ), ----定义成外键cno smallint not null referencescourse ( cno ), ----定义成外键cj smallint constraint e check (cj between0 and 100 ),---- 检查约束一—j(成绩)只能在~100之间,可以不输入值constraint f primary key ( sno , cno )---- 定义学生学号和课程号为sc表的主键)course(课程表)其约束如下:(1)课程号(cno)不能有重复的(2)课程名(cname非空(三)针对学生课程数据库查询(1)查询全体学生的学号与姓名。
Select sno , sname from student(2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。
(3)查询全体学生的详细记录。
select * from student(4)查全体学生的姓名及其出生年份。
select sname , birth from student(5)查询学校中有哪些系。
select distinct dept from student(6)查询选修了课程的学生学号。
select sno from cs where eno is not null(7)查询所有年龄在20岁以下的学生姓名及其年龄。
sql查询题目及答案
![sql查询题目及答案](https://img.taocdn.com/s3/m/9c36b26ba5e9856a56126053.png)
数据库中有如下三个表:学生表(学号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查询及答案](https://img.taocdn.com/s3/m/43790255b90d6c85ec3ac6c8.png)
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习题与答案](https://img.taocdn.com/s3/m/3969096403768e9951e79b89680203d8ce2f6a2a.png)
结构化查询语⾔SQL习题与答案结构化查询语⾔SQL习题与答案 篇⼀:结构化查询语⾔SQL习题与答案 ⼀、选择题 1. 在SQL包含的功能中,最重要的功能是_______。
A) 数据查询 B) 数据操纵 C) 数据定义 D) 数据控制 2. 使⽤SQL语⾔有两种⽅式,它们是_______。
A) 菜单式和交互式B) 嵌⼊式和程序式 C) 交互式和嵌⼊式D) 命令式和解释式 3. SQL的全部功能可以⽤9个动词概括,其中动词INSERT是属于下列______功能。
A) 数据查询 B) 数据操纵 C) 数据定义 D) 数据控制 4. SQL语⾔⽀持数据库的三级模式结构,其中模式对应于______。
A) 存储⽂件 B) 视图 C) 基本表 D) 视图和基本表 5. 在创建数据表时,可以给字段规定NULL或NOT NULL值,NULL值的含义是______。
A) 0B) 空格 C) NULL D) 不确定 6. 在SQL的ALTER语句中,⽤于删除字段的⼦句是______。
A) ALTER B) DELETE C) DROP D) MODIFY 7. SQL中的INSERT语句可以⽤于______。
A) 插⼊⼀条记录 B) 插⼊⼀个字段 C) 插⼊⼀个索引 D) 插⼊⼀个表 8. 下列描述错误的是______。
A)⽤INSERT-SQL语句可以插⼊⼀条记录 B)⽤INSERT-SQL语句可以插⼊多条记录 C)使⽤INSERT-SQL语句可以插⼊记录的部分数据 D)使⽤INSERT-SQL语句插⼊记录时列名的排列顺序必须与表定义时的顺 序⼀致 9. INSERT-SQL语句中所使⽤的数据不能来⾃于______。
A) 数组 B) 变量 C) 查询 D) 索引 10. SQL中的UPDATE语句可以⽤于______。
A) 更新数据表的结构 B) 更新数据表的值 C) 更新索引D) 更新查询 11. 下列描述错误的是______。
sql经典练习题库(附答案)
![sql经典练习题库(附答案)](https://img.taocdn.com/s3/m/f561239ed1d233d4b14e852458fb770bf68a3b5d.png)
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练习题及答案](https://img.taocdn.com/s3/m/142eda220a1c59eef8c75fbfc77da26925c59615.png)
sql练习题及答案SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。
在这篇文章中,我们将提供一些SQL练习题及其答案,旨在帮助读者加深对SQL的理解,并提供实践操作的机会。
练习题一:学生表考虑一个名为"Students"的学生表,包含以下字段:- 学生编号(StudentID)- 学生姓名(StudentName)- 学生年级(Grade)- 学生所在学校(School)请使用SQL语句创建并插入示例数据到"Students"表中。
答案:```sqlCREATE TABLE Students (StudentID INT,StudentName VARCHAR(50),Grade INT,School VARCHAR(50));INSERT INTO Students (StudentID, StudentName, Grade, School)VALUES (1, '张三', 11, '中学A'),(2, '李四', 10, '中学B'),(3, '王五', 10, '中学A'),(4, '赵六', 12, '中学C');```练习题二:查询学生表信息请编写SQL查询语句,查询出所有学生的姓名和所在学校。
答案:```sqlSELECT StudentName, School FROM Students;```练习题三:更新学生信息假设有一位新生加入学校,学生姓名为"李华",年级为11,学校为"中学B"。
请编写SQL语句将该学生信息插入到学生表中。
答案:```sqlINSERT INTO Students (StudentName, Grade, School)VALUES ('李华', 11, '中学B');```练习题四:删除学生信息假设"赵六"这位学生已经转学离开学校,需要从学生表中将其信息删除。
50道sql练习题和答案
![50道sql练习题和答案](https://img.taocdn.com/s3/m/722db47903768e9951e79b89680203d8ce2f6a7a.png)
50道sql练习题和答案最近两年的⼯作没有写过多少SQL,感觉⽔平下降⼗分严重,⽹上找了50道练习题学习和复习原⽂地址:1.0数据表介绍--1.学⽣表Student(SId,Sname,Sage,Ssex)--SId 学⽣编号,Sname 学⽣姓名,Sage 出⽣年⽉,Ssex 学⽣性别--2.课程表Course(CId,Cname,TId)--CId 课程编号,Cname 课程名称,TId 教师编号--3.教师表Teacher(TId,Tname)--TId 教师编号,Tname 教师姓名--4.成绩表SC(SId,CId,score)--SId 学⽣编号,CId 课程编号,score 分数2.0 数据表创建学⽣表Studentcreate table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));insert into Student values('01' , '赵雷' , '1990-01-01' , '男');insert into Student values('02' , '钱电' , '1990-12-21' , '男');insert into Student values('03' , '孙风' , '1990-12-20' , '男');insert into Student values('04' , '李云' , '1990-12-06' , '男');insert into Student values('05' , '周梅' , '1991-12-01' , '⼥');insert into Student values('06' , '吴兰' , '1992-01-01' , '⼥');insert into Student values('07' , '郑⽵' , '1989-01-01' , '⼥');insert into Student values('09' , '张三' , '2017-12-20' , '⼥');insert into Student values('10' , '李四' , '2017-12-25' , '⼥');insert into Student values('11' , '李四' , '2012-06-06' , '⼥');insert into Student values('12' , '赵六' , '2013-06-13' , '⼥');insert into Student values('13' , '孙七' , '2014-06-01' , '⼥');科⽬表Coursecreate table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));insert into Course values('01' , '语⽂' , '02');insert into Course values('02' , '数学' , '01');insert into Course values('03' , '英语' , '03');教师表Teachercreate table Teacher(TId varchar(10),Tname varchar(10));insert into Teacher values('01' , '张三');insert into Teacher values('02' , '李四');insert into Teacher values('03' , '王五');成绩表SCcreate table SC(SId varchar(10),CId varchar(10),score decimal(18,1));insert into SC values('01' , '01' , 80);insert into SC values('01' , '02' , 90);insert into SC values('01' , '03' , 99);insert into SC values('02' , '01' , 70);insert into SC values('02' , '02' , 60);insert into SC values('02' , '03' , 80);insert into SC values('03' , '01' , 80);insert into SC values('03' , '02' , 80);insert into SC values('03' , '03' , 80);insert into SC values('04' , '01' , 50);insert into SC values('04' , '02' , 30);insert into SC values('04' , '03' , 20);insert into SC values('05' , '01' , 76);insert into SC values('05' , '02' , 87);insert into SC values('06' , '01' , 31);insert into SC values('06' , '03' , 34);insert into SC values('07' , '02' , 89);insert into SC values('07' , '03' , 98);3.0 练习题⽬1.查询" 01 "课程⽐" 02 "课程成绩⾼的学⽣的信息及课程分数1.1. 查询同时存在" 01 "课程和" 02 "课程的情况1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显⽰为 null )1.3 查询不存在" 01 "课程但存在" 02 "课程的情况2.查询平均成绩⼤于等于 60 分的同学的学⽣编号和学⽣姓名和平均成绩3.查询在 SC 表存在成绩的学⽣信息4.查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩(没成绩的显⽰为 null )4.1 查有成绩的学⽣信息5.查询「李」姓⽼师的数量6.查询学过「张三」⽼师授课的同学的信息7.查询没有学全所有课程的同学的信息8.查询⾄少有⼀门课与学号为" 01 "的同学所学相同的同学的信息9.查询和" 01 "号的同学学习的课程完全相同的其他同学的信息10.查询没学过"张三"⽼师讲授的任⼀门课程的学⽣姓名11.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩12.检索" 01 "课程分数⼩于 60,按分数降序排列的学⽣信息13.按平均成绩从⾼到低显⽰所有学⽣的所有课程的成绩以及平均成绩14.查询各科成绩最⾼分、最低分和平均分:以如下形式显⽰:课程 ID,课程 name,最⾼分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90要求输出课程号和选修⼈数,查询结果按⼈数降序排列,若⼈数相同,按课程号升序排列15.按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15.1 按各科成绩进⾏排序,并显⽰排名, Score 重复时合并名次16.查询学⽣的总成绩,并进⾏排名,总分重复时保留名次空缺16.1 查询学⽣的总成绩,并进⾏排名,总分重复时不保留名次空缺17.统计各科成绩各分数段⼈数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分⽐18.查询各科成绩前三名的记录19.查询每门课程被选修的学⽣数20.查询出只选修两门课程的学⽣学号和姓名21.查询男⽣、⼥⽣⼈数22.查询名字中含有「风」字的学⽣信息23.查询同名同性学⽣名单,并统计同名⼈数24.查询 1990 年出⽣的学⽣名单25.查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列26.查询平均成绩⼤于等于 85 的所有学⽣的学号、姓名和平均成绩27.查询课程名称为「数学」,且分数低于 60 的学⽣姓名和分数28.查询所有学⽣的课程及分数情况(存在学⽣没成绩,没选课的情况)29.查询任何⼀门课程成绩在 70 分以上的姓名、课程名称和分数30.查询不及格的课程31.查询课程编号为 01 且课程成绩在 80 分以上的学⽣的学号和姓名32.求每门课程的学⽣⼈数33.成绩不重复,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成绩34.成绩有重复的情况下,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成绩35.查询不同课程成绩相同的学⽣的学⽣编号、课程编号、学⽣成绩36.查询每门功成绩最好的前两名37.统计每门课程的学⽣选修⼈数(超过 5 ⼈的课程才统计)。
SQL语句练习及标准答案
![SQL语句练习及标准答案](https://img.taocdn.com/s3/m/104dba1c66ec102de2bd960590c69ec3d5bbdb6a.png)
SQL语句练习及标准答案SQL语句练习及答案————————————————————————————————作者:————————————————————————————————日期:sql语句练习题1数据库有如下四个表格:student(sno,sname,sage,ssex,sdpt) 学生表系表(dptno,dname)course(cno,cname, gradet, tno) 课程表sc(sno,cno,score) 成绩表teacher(tno,tname) 教师表要求:完成以下操作1.查询姓"欧阳"且全名为三个汉字的学生的姓名。
select sname from student where sname like “欧阳__?;2.查询名字中第2个字为"阳"字的学生的姓名和学号。
select sname,sno from student where sname like '_阳%';3.查询所有不姓刘的学生姓名。
select sname,sno,ssexfrom studentwhere sname not like “刘%”;4.查询db_design课程的课程号和学分。
select cno,ccredit from coursewhere cname like 'db_design'5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。
select * from course where cname like 'db%i_ _';6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应的课程号。
select sno,cno from sc where grade is null;7.查所有有成绩的学生学号和课程号。
select sno,cno from sc where grade is not null;8.查询计算机系年龄在20岁以下的学生姓名。
sql练习及其答案
![sql练习及其答案](https://img.taocdn.com/s3/m/84b419e6524de518964b7d77.png)
查询操作:一、简单查询1、查询每个员工的所有数据。
2、查询Departments表中的所有记录。
3、查询Salary表中的所有记录。
4、查询每个员工的地址和电话。
5、查询每个部门的部门号与部门名。
6、查询每个员工的员工编号与收入。
7、查询所有女员工的姓名和地址及部门号,并用as子句将结果中各列的标题分别指定为姓名和地址及部门号。
8、计算每个员工的实际收入。
9、找出所有收入在2000~3000之间的员工编号。
10、查询员工的基本信息并按出生时间的先后排序。
11、找出所有在部门‘1’或部门‘2’工作的员工的部门号及姓名。
12、找出所有姓王的员工的姓名及部门号。
13、找出所在其地址中含有“中山”的员工的姓名及地址。
二、复杂查询一、子查询1、查找所有在财务部工作的员工的基本信息。
2、查找所有收入在2500以下的员工的姓名及部门号。
3、查找财务部年龄低于研发部员工年龄的员工的姓名。
select name from employeeswhere departmentid in(select departmentid from departments where departmentname='财务部') and birthday >all (select birthday from employeeswhere departmentid in(select departmentid from departments where departmentname='研发部') )二、连接查询1、查询每个员工的基本信息及其薪水情况。
2、查询每个员工的情况及其工作部门的情况。
3、查找财务部收入在2200以上的员工的姓名及其薪水详情。
4、查找研发部在1966年以前出生的员工的姓名及其薪水情况。
5、将各员工的情况按收入由低到高排序。
三、数据的分类与汇总1、求所有女员工的平均收入。
2、求财务部员工的平均收入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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') monthfrom 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) awhere 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;。