第一篇: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 e
where(e.deptno=10 and e.job='MANAGER')or(e.deptno=20 and e.job='CLERK')--(5)查询所有工种不是MANAGER和CLERK,--且工资大于或等于2000的员工的详细信息。select * from emp
where job not in('MANAGER','CLERK')and sal>=2000;
--(6)查询有奖金的员工的不同工种。select * from emp where comm is not null;--(7)查询所有员工工资和奖金的和。select(e.sal+nvl(e.comm,0))from emp e;--(8)查询没有奖金或奖金低于100的员工信息。select * from emp where comm is null or comm<100;--(9)查询员工工龄大于或等于10年的员工信息。
select * from emp where(sysdate-hiredate)/365>=10;
--(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。select initcap(ename)from emp;select upper(substr(ename,1,1))||lower(substr(ename,2))from emp;
--(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,--若月份相同则按入职的年份排序。
select ename,to_char(hiredate,'yyyy')year,to_char(hiredate,'MM')month from emp order 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.deptno from emp a,emp b where a.job=b.job and a.deptno<>b.deptno;
--(15)查询各个部门的详细信息以及部门人数、部门平均工资。select d.deptno,count(e.empno),avg(e.sal),d.dname,d.loc from emp e ,dept d where e.deptno=d.deptno group 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 emp where sal in(select avg(sal)from emp group by deptno);
--(18)查询工资高于本部门平均工资的员工的信息。select * from emp e1
where sal >(select avg(sal)from emp e2 where e2.deptno=e1.deptno);
--(19)查询工资高于本部门平均工资的员工的信息及其部门的平均工资。select e.*,a.avgsal from emp e,(select deptno,avg(sal)as avgsal from emp group by deptno)a where a.deptno=e.deptno and e.sal>a.avgsal;
--(20)统计各个工种的人数与平均工资。
select count(*),e.job,avg(e.sal)from emp e group by e.job
--(21)统计每个部门中各个工种的人数与平均工资。select deptno,job,count(empno),avg(sal)from emp e group by e.deptno,e.job--(22)查询所有员工工资都大于1000的部门的信息。select * from dept where deptno in(select deptno from emp where deptno not in
(select distinct deptno from emp where sal<1000));
--(23)查询所有员工工资都大于1000的部门的信息及其员工信息。select * from emp e join dept d on d.deptno in(select deptno from emp where deptno not in
(select distinct deptno from emp where sal<1000))and d.deptno=e.deptno;
--(24)查询所有员工工资都在900~3000之间的部门的信息。select * from dept where deptno not in(select deptno from emp
where sal not between 900 and 3000);--(25)查询所有工资都在900~3000之间的员工所在部门的员工信息。select * from emp a where a.deptno in(select distinct e.deptno from emp e where e.sal between 900 and 3000);
--(26)查询每个员工的领导所在部门的信息。select d.* from dept d where d.deptno in(select distinct e2.deptno from emp e1,emp e2 where e1.empno=e2.mgr);--(27)查询人数最多的部门信息。select * from dept where 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)e where rownum<4
--(29)查询'JONES'员工及所有其直接、间接下属员工的信息。select e.* from emp e start with ename='JONES' connect by prior empno=mgr;
---(30)查询SCOTT员工及其直接、间接上级员工的信息。select e.* from emp e start with ename='SCOTT' connect by prior mgr=empno;
--(31)以树状结构查询所有员工与领导之间的层次关系。select substr(sys_connect_by_path(ename,'->'),3),level from emp start with mgr is null connect 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 d where(e.sal between s.losal and s.hisal)and(s.grade=2)
and to_char(e.hiredate,'yyyy')>1985 and e.deptno=d.deptno and d.loc='DALLAS';
--35.部门平均薪水最高的部门编号
select * from(select avg(sal)avgsal,deptno
from 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))avgsal
from 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))avgsal
from 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))avgsal
from emp group by deptno))
--38.平均薪水等级最低的部门的部门名称 select d.dname from dept d where d.deptno in(select a.deptno from
(select e.deptno from emp e,salgrade s where(e.sal between s.losal and s.hisal)group by e.deptno order by avg(s.grade))a where rownum=1);
--39.部门经理人中,薪水最低的部门名称 select dname from dept where deptno=(select deptno from
(select deptno from emp where job='MANAGER' group by deptno order 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 dept
delete from dept d where 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;
第二篇:SQL查询语句
SQL查询语句
第一次:查询(显示)、条件、排序、空记录
第二次:通配符、生成表、文件(记事本)、数组、临时表,数学函数、分组、嵌套查询
第三次:插入记录、删除记录、更新记录 第四次:超连接、新建(打开)数据库、表的建立、表的删除、第五次 表结构的修改,添加记录 显示同张芳同一天出生的学生的信息 格式:
1、查询(显示)记录
显示所有男学生的学号,姓名,性别 区分:字段、条件、表名
Select 字段名列表(*)from 表名; where 条件表达式;
into table(dbf)文件名;
into cursor 临时表名;
into array 数组名;
to file 文件名;
order by 字段名列表(asc desc);
group by 字段名 having 条件;
显示所有大于平均分的学生的学号、姓名 显示同E4挣同样工资的职工信息
Select * from 职工 where 工资=(select 工资 from 职工 where 职工号=”E4”)职工(仓库号C(10),职工号 C(10),工资 N(10,2))
显示所有工资大于1500的员工的仓库号、职工号及所在的城市
2、插入记录
Insert into 表名(字段名列表)values(记录值)
3、删除记录
Delete from 表名 where 条件
4、更新记录
Update 表名 set 字段名=记录值; Where 条件
5、表的删除
drop table 表名
6、表的建立
create table 表名(字段名 数据类型(宽度))
7、表结构的修改select * from 职工where 职工号!=“E4” AND 工资=(select 工资 from 职工 where 职工号=“E4”)
alter table 表名
1)增加字段
alter table student add 身份证号 c(10)
2)删除字段
alter table student drop colum 身份证号
3)修改字段名
alter table student rename colum 出生日期 to 出生年月
4)增加字段有效性规则
alter table student alter 成绩 set check 成绩>=0 and 成绩<=100;
error “成绩输入错误,成绩应该在0-100之间”
5)删除字段有效性规则
alter table student alter 成绩 drop check 注意:
以上题目中用到的 SQL语句粘贴到计事本文件XY.TXT中(每行一条语句)。对两个表操作的方法:
1)同时打开两个表
select 仓库.仓库号,城市,职工号,工资 from 仓库,职工;
where 职工.仓库号=仓库.仓库号 and 工资=1250
2)超连接(内连接、左连接、右连接、全连
接)
内连接:只显示符合条件的记录
左连接:显示符合条件的记录及第一个表中不符合条件的记录
右连接:显示符合条件的记录及第二个表中不符合条件的记录
全连接:显示符合条件的记录及第一、二个表中不符合条件的记录
成绩表(score)
学号姓名课程名成绩 2001张三计算机10 2003张四英语20 2001张三语言30 2005张三数据40 2003张四计算机50
Select sum(成绩)from score group by 学号
Select sum(成绩)from score group by 课程名
select 字段名列表(*)from 表名;where 条件;
order by 字段名列表 asc|desc;
into table(dbf)表名;
into array 数组名;
to file 文件名;
into cursor 临时表名
题目练习
实现以下功能:在考生文件夹下,打开“陶的数据库”的数据库,并利用SQL语句在该数据库中新建一个表:gongzi(职工号 c(4),实发工资 n(7,0)),将zhigong表中基本工资大于1330(含1330)的记录存储在gongzi表中,其中实发工资为:基本工资+加班费(白天20,晚上30),最后将所有的SQL语句保存到考生目录下的sqlanswer.txt文件中(自行建立,一行一条语句)
open database 陶的数据库
create table gongzi(职工号 c(4),基本工资 n(7,2))
select 职工号,基本工资+白班*20+晚班*30 from zhigong;where 基本工资>1350 into array xy
insert into gongzi from array xy
第三篇:Sql语句查询
sql语句多表连接查询
在程序开发过程中,不仅可以对单一数据表进行查询,还可以进行多表查询,用户通过多表查询从多个表中提取出需要的数据。
多表查询可以分为内连接查询、外连接查询以及联合查询。
1.内连接查询
连接查询是指通过各个表之间共同列的关联性查询数据。连接查询分为内连接查询和外连接查询。内连接是将两个相互交叉的数据集合中重叠部分的数据行连接起来,返回表示两个数据集合之间匹配连接关系的数据行。
可以在FORM子句中使用INNER JOIN„ON„建立内连接,也可以在WHERE子句中指定连接条件建立内连接,例如:
select a.UserName,b.BookName,b.Datetm from UserInfo as a inner join SellSheet as b on a.UserID= b.UserID
也可以用下面的语句实现。
select a.UserName,b.BookName,b.Datetm from UserInfo as a,SellSheet as b where a.UserID=b.UserID
2.外连接查询
外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的数据行连接起来之外,还可以根据要求返回左侧或右侧数据集合中非匹配的数据,即左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。
l左外连接LEFT OUTER JOIN
左外连接LEFT OUTER JOIN逻辑运算符除了返回两个数据表中满足连接条件的行,它还返回任何在后一个数据表中没有匹配行的前一个数据表中的行。非匹配行的部分字段列作为空值返回。
l右外连接RIGHT OUTER JOIN
右外连接RIGHT OUTER JOIN是左外连接的反向连接。它除了返回两个数据表中满足连接条件的行,还返回任何在前一个数据表中没有匹配行的后一个数据表中的行。非匹配行的部分字段列作为空值返回。
3.使用UNION进行联合查询
使用UNION运算符可以进行联合查询。UNION运算符连接多个SELECT语句,将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。使用UNION运算符遵循的规则如下:
(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚集函数等)。
(2)在使用UNION组合的结果集中的相应列必须具有相同数据类型,或者两种数据类型之间必须存在可能的隐性数据转换,或者提供了显式转换。例如,在datetime数据类型的列和binary数据类型的列之间不能使用UNION运算符,除非提供了显式转换,而在money数据类型的列和int数据类型的列之间可以使用UNION运算符,因为它们可以进行隐性转换。
(3)结果集中列的名字或者别名是由第一个SELECT语句的选择列表决定的。
注意:对数据表进行联合查询时,结果集中行的最大数量是各表行数之“和”,而对数据表进行连接查询时,结果集中行的最大数量是各表行数之“积”。
第四篇:SQL常用查询总结
1)查询全体学生的学号、姓名、所在系 select Sno,Sname,Sdept from Student
2)
查询全体学生的详细信息
select * from Student
3)
查询全体学生的姓名及其出生日期 select Sname,Sbirthday from Student
4)
查询软件工程系全体学生的名单
select * from Student
where Sdept='软件工程系'
5)
查询所有年龄在20岁以下的学生姓名以及年龄(注:GETDATE()函数可获得当前的日期,YEAR()函数可返回日期中的年份)
Select Sname ,(year(getdate())-YEAR(Sbirthday))as age from Student
where(year(getdate())-YEAR(Sbirthday))<20
6)
查询考试成绩不及格的学生的学号 select Sno from Score where Grade<60
7)
查询出生日期在1990年1月1日~1995年12月31日之间的学生的姓名、所在系和出生日期
select Sname,Sdept,Sbirthday from Student
where Sbirthday between '1990-1-1 0:00:00' and '1995-12-31 0:00:00'
8)
查询不在信息系、数学系也不在软件工程系学生的姓名和性别
select Sname,sex from Student
where Sdept not in('信息系','数学系','软件工程系')
9)
查询所有姓李且全名为三个汉字的学生的姓名、学号和性别
10)查询姓名中第2个字为“阳”字的学
生的姓名和学号
select Sname,Sno
from Student
where Sname like '%阳%'
11)查询软件工程系年龄在20岁以下的学生姓名
Select Sname ,(year(getdate())-YEAR(Sbirthday))as age from Student
where(year(getdate())-YEAR(Sbirthday))<20 and Sdept='软件工程系'
12)查询选修了3号课程的学生的学号
及其成绩,查询结果按分数的降序排列
select Sno,Grade from Score where Cno=3 order by Grade desc
13)查询全体学生情况,结果按所在系的升序排列,同一系的按年龄降序排列
select * from Student
order by Sdept asc,Sbirthday desc
14)统计学生总人数
select Sno from Student compute count(Sno)
15)查询选修了课程的学生人数
select distinct Student.Sno,Score.Sno from Student,Score
where Student.Sno=Score.Sno compute count(Student.Sno)
16)计算1号课程的学生平均成绩
select Grade from Score where Cno=1 compute avg(Grade)
17)查询选修了1号课程的学生最高分
数
select * from Score where Cno=1 compute max(Grade)
18)求各课程号及相应的选课人数
select Sno,Cno from Score order by Cno
compute count(Sno)by Cno
19)查询选修了3门以上课程的学生学
号
20)查询选修2号课程且成绩在90分以
上的所有学生的学号、姓名
select Student.Sno,Student.Sname from Student,Score
where Student.Sno=Score.Sno and Score.Cno=2 and Score.Grade>90
21)查询每个学生的学号、姓名、选修的课程名和成绩
select Student.Sno,Student.Sname, Course.Cname,Score.Grade from Course,Score,Student where
Student.Sno=Score.Sno
and
Score.Cno=Course.Cno
22)查询所有选修了1号课程的学生姓
名
select distinct Student.Sno,Score.Sno,Student.Sname from Student,Score
where Student.Sno=Score.Sno and Score.Cno=1
23)查询选修了课程名为“数据库”的学
生的学号和姓名
select distinct Student.Sno,Student.Sname from Student,Course,Score
where Student.Sno=Score.Sno and Course.Cname='数据库'
第五篇:SQL查询语言
《SQL查询语言》教学设计
一、教学目标分析
认知目标
学习SQL查询语言的使用方法。
掌握SQL语言当中的SELECT语句
能力目标
培养学生应用查询语句查询数据的应用能力
情感目标
体验SQL语言查询方法
主动将数据库管理信息的思想、方法创造性地应用到生活、学习之中。
二、教学内容分析
课前需要为学生准备名为SCHOOL数据库文件,里面放着名为CLASS的表,供学生练习使用。提供这个数据库文件可以避免学生在建立表以及表中录入记录上花费太多的时间,而把重点放在对本节内容的学习上,可以让教师更好地进行目标调控,做到有的放矢。这个数据库文件放置于网络共享文件夹中,并将其快捷方式置于学生机的桌面上。教学重点:
1、使用“在设计视图中创建查询”。
2、SQL查询语言的格式。
教学难点:
运行、调试SQL命令。
解决措施:
通过老师讲解、演示及设置的任务,让学生在学习的过程中,自己动手,以不断解决问题为手段,有机结合各种知识,以任务驱动的方式发展能力,一步步完成学习任务。
三、学生学习状态分析
本课的教学对象是大二的学生,由于学生的理论知识薄弱,加上数据库比较抽象,比较难理解的特点,从而造成学生对数据库的认识还很模糊。学生在本节课之前,已经掌握数据库和表的创建、打开及表中输入、修改记录的方法,初步掌握SQL的一些基本操作,在此基础上,如何学会在数据库众多表中查询记录变得至关重要了,所以为了学生更好地掌握这一点知识点,应广泛调动他们的学习兴趣,增强学习的主动性。
四、教学策略
职业技术学院课程本身的特点、知识及技能的传授应以典型“任务”为主,创造学生自主探究学习的平台,学生在教师的指导下带着任务通过实际操作、探究学习等方式,逐步完成任务。
五、教学过程
合理安排教学过程是教学成功的关键。因此,我把教学过程分为“情境感知,揭示课题——任务驱动,讲授新知——课堂小结,巩固新知”三部分。
(一)情境感知,揭示课题
为了让同学们对自己班级同学的情况有所了解,我们如何简便地查询呢?我们可以通过输入一些命令解决问题。这些命令就是我们这节课所要学习的SQL查询语言。设计思路:
SQL所包含的数据具有一定的规模,并且能快速地从众多表中查询到某个同学的情况,让学生体会到数据库在现实生活中的应用。
(二)任务驱动,讲授新知
1. 如何在SQL中使用查询命令?
任务一:
在SCHOOL数据库的CLASS表中查询所有的记录
Select * from class
1)步骤:略
2)分析刚才写的查询命令:
SELECT:表示这是一个查询语句
*:表示显示出符合条件记录的所有字段内容,如果在这输入的是一些逗号分隔的字段名,则查询结果只显示响应字段的内容。
FROM:表示从哪个表里查询。
3)写SQL命令时应注意的事项:
命令必须是英文的半角字母
字符型数据要用英文的单引号包含起来。
设计思路:
这既是课堂重点也是难点,通过两个层次推进的设疑,教师适当地理解、演示,使学生对SQL查询语言已消除了陌生感,并有了一定的理解。
2. 尝试练习
任务二:
查询表中头三条记录
通过本例讲解让学生掌握TOP关键字的用法
任务三:
查询姓名和年龄两列数据
通过本例讲解让学生掌握部分字段内容的查询
任务四:
查询年龄大于等于17而小于等于19的数据
通过本例讲解,让学生掌握比较运算符和逻辑运算符的应用,以及另一种方法BETWEEN…AND…关键字的用法
任务五:
查询健康状况为良好的所有数据
通过本例讲解,让学生掌握WHERE关键字的用法
任务六:
查询姓李的学生所有数据
通过本例讲解,让学生掌握LIKE关键字的用法
任务七:
查询健康状况为良好或一般的数据
通过本例讲解,让学生掌握IN关键字的用法
任务八:
查询中文成绩及格的数据
通过本例讲解,让学生掌握比较运算符的应用
任务九:
查询英语和中文的总成绩
通过本例讲解,让学生掌握为派生列起别名的方法
任务十:
学生练习:
查询一班各位同学的英语、中文成绩总分。
任务十一:
将中文成绩俺降序排列(升序asc)
通过本例讲解,让学生掌握ORDER BY关键字的应用
任务十二:
查询一班同学中文成绩排名状况(按降序)
通过本例讲解,让学生掌握WHERE条件和ORDER BY关键字综合应用
任务十三
查询各班中文总成绩
通过本例讲解,让学生掌握聚合函数和GROUP BY关键字的应用
任务十四
查询一班中文总成绩
通过本例讲解,让学生掌握聚合函数和GROUP BY关键字以及HAVING关键字的应用 任务十五:
利用class表中的姓名、中文、英文成绩创建一个名为jjnn的新表。
通过本例讲解,让学生掌握从源表中筛选一部分数据产生新表的方法。
设计思路:
这个环节我抛出了一个个任务,促使学生去自我探索和自主学习,达到掌握操作和使用的目的,激发学生的学习热情和创造积极性。
(三)课堂小结,巩固新知
这节课我们学习了SQL语言查询的使用方法,综合以上任务,不难得出SELECT语句的使用格式和方法(板书SELECT语句的格式):
〈SELECT语句〉::=
SELECT [ALL|DISTINCT]〈目标列表达式〉[别名] [ ,〈目标列表达式〉[别
名]]„
FROM 〈表名或视图名〉[别名][ ,〈表名或视图名〉[别名]]„
[WHERE〈条件表达式〉]
[GROUP BY 〈列名1〉[HAVING〈条件表达式〉]]
[ORDER BY 〈列名2〉[ASC|DESC]];
〈目标列表达式〉::=
*
|〈表名〉.*
|[〈表名〉.]〈列名表达式〉{,[〈表名〉.]〈列名表达式〉}
|〈集函数名〉([DISTINCT|ALL] *|列名)
〈集函数名〉::=
COUNT
|SUM
|AVG
|MAX
|MIN
〈条件表达式〉::=
1.„ θ „
2.„ [NOT] BETWEEN „ AND „
3.„ [NOT] IN(„)
4.„ [NOT] LIKE '„'
5.„ IS [NOT] NULL
6.[NOT] EXISTS 〈SELECT语句〉
7.〈条件表达式〉〈AND|OR〉〈条件表达式〉
对学生在操作中出现的问题再一次强调书写命令的注意事项。
六、教学反思
本节课,我的设计任务与学生的成绩有关,容易激起学生很大的关注。随着任务的深入,学习目标得到很好的落实,力争以学习目标为起点,又以学习目标为归宿。学习过程中要时刻关注学生的进展及出现的问题,对于学生的点滴进步给予及时的肯定;对于出现的问题,也是一种动态生成的教学资源,应善于捕捉,适时提出,引导学生分析并解决,实现“问题从学生中来,最终回到学生中去”,从而完善学生的意义建构。