1 作业
(1)从表中查询出数据
查询出scott.dept表中部门号(deptno)小于50的部门名称(dname)
此处有隐式转换,oracle把varchar2转换成了数字。
(2)描述表p的结构
(3)进行数学表达式的计算、使用列的别名
从p表中查出所有员工的工资和奖金之和。
(4) 正确统计出p表中部门号为10的,每个员工全年收入
(5)运用 SQL*Plus工具
将缓冲区中的SQL语句保存到一个文件,并执行该文件中的SQL语句。
SQL> L
  1* select * from test
SQL> save '/u01/test02.sql'
上面(3)中的结果:
2作业
1。创建一个查询,来显示雇员的名字和工资。
其工资要在$2850以上。
将该语句保存到一个文件中:p2q1.sql
在sqlplus中执行该文件。
2.更改文件p2q1.sql中的命令,将查询条件改为:工资(sal)在$1500和$2850之间。重新执行该文件。
3.查询出雇员表中部门号为10和30的所有员工的姓名、工作、雇佣日期信息,要求按照雇
佣日期的降序进行排序。
或隐身转换:
4.查询出姓名中第三个字母为:“A”的所有员工的姓名。
5.查出佣金比工资多出10%的员工的姓名。
简单写成:
复杂写成:
注意如果sal有空的(注意分母不能为0,而且保持原来的数据最好用1):
这道题颠倒一下就很难了:
3 作业
以下练习题使用hr用户登录
1.查询所有员工及对应部门的记录,包括没有对应部门编号(department_id)的员工记录
a.XXX=b.XXX(+) 等价于 a left outer join b on (a.XXX=b.XXX);左外连接
2.查询所有员工及对应部门的记录,包括没有任何员工的部门记录。
a.XXX(+)=b.XXX 等价于 a right outer join b on (a.XXX=b.XXX);右外连接
3.查询所有员工及对应部门的记录,包括没有对应部门编号(department_id)的员工记录和没有任何员工的部门记录。
全外连接只有一种写法:a all outer join b on (a.XXX=b.XXX);
4.
写一个查询来查询出雇员的名字,部门号,部门名称。
5.输出30号部门的所有工作的列表,以及部门名称。
6.
写一个查询,来查询出挣到佣金(comm)的雇员姓名,部门名称,和部门所处的位置。
7.
写一个查询,查出在名字里面有一个"A"的所有雇员姓名和其所在的部门的名称。
或者:
8.
写出一个查询,查出工作在DALLAS的所有员工的姓名、工作、部门号、部门名称。
9.
查出每个雇员的编号、姓名、其管理者的编号和姓名。各个列分别命名为:Emp#,EmpName,EmpM#,EmpName.
注意看下面的语句:
上述表是没有管理者的命名的,我们可以用自连接:
如果a.id=b.上司号,那么这时,a的信息就是当领导的人的信息(不管管几个人)。
也就是a表中的哥们是b表中哥们儿的的领导。
这时a表中有king,而且显示出了该领导管理的人员名单。
如果a.上司号=b.id,那么这时,a的信息就是有上司的人的信息(也就是有领导的人的信息)。
也就是b表中的哥们儿是a表中哥们的领导。
9题结果:
10.修改第9题的查询,使得没有管理者的员工的信息也可以显示出来。
4作业
1.查询出入职超过一年的员工信息
2 查询出每个员工从工龄有多少个周
3 今年公司准备给职位为ANALYST工资涨10%,CLERK工资涨15%,MANAGER涨20%,
其它职位不变,请使用一个select语句模拟工资涨之后的各个员工工资
或写成:
4.写一个查询,选择出当前的日期。
5.查询出雇员表(emp)表中的雇员号、姓名、新的薪水(是原先薪水的1.25倍),并将该列标记为new salary。将该脚本保存到p3q2.sql中。
6.运行文件p3q2中的查询。
7.查询出雇员表中所有员工的姓名;雇佣日期;和工资调整日期(工作6个月后的第一个星期一)。其格式要求是类似于:“1981-09-23”。
8.
查出每个员工的名字(ename)、雇佣日期到现在的日期间隔的月数(要求为整数),该列命名为MONTHS_WORKED,并以该列的降序排序
9.写一个查询,查询出雇员的姓名,以及姓名的长度。要求其姓名的第一个字母为大写,其它的字母为小写。
5作业
1.统计每个部门的平均工资,和最高工资,最低工资,并按照部门号排序
我表里有两个没部门的人,所以你的结果可能和我不同,是正常的。
2.查询出平均工资高于2000的部门以及其平均工资
6 作业
创建多列的子查询。
在基于未知值的查询中运用子查询。
sql中select是什么意思使用子查询,查询在一个数据集中存在,而在另一个数据集中不存在的数据。
1.查询出部门位置为“DALLAS”的员工号,姓名,工资,职位,部门号
2查询出部门位置为“DALLAS” ”,“NEW YORK”的员工号,姓名,工资,职位,部门号
3.查询出与员工号为7788的job和sal相匹配的员工信息
4.查询出与员工号为7788的job或者sal相匹配的员工信息
5.查询出其经理不是10部门经理的员工信息
注意10部门经理可以有空值的。
6.查出与BLACK在同一个部门的所有雇员的姓名和雇佣日期。
7.查出工资高于平均工资的所有员工的编号和姓名,其结果按照工资的降序排列。
如果是高于本部门的员工:
8.查出所有名字中包含一个"T"的员工所在的部门号,和这些部门所包含的所有员工编号和姓名。
9.查出所有工作在Dallas的员工的姓名、部门编号、工作。
10.查出由King直接管辖的所有员工的姓名和工资。
11.查询销售部(Sales)的编号,所有员工的名字和工作。
12.写出与任何一个能挣到佣金的雇员的部门号、薪水相匹配的所有雇员的名字、部门号。
13.查询出与在Dallas的任何一个雇员的薪水和佣金相匹配的所有雇员的姓名、部门名称和工资。
14.查询出所有工资和佣金与Scott相同的雇员的姓名、雇佣日期和工资。注意:结果中不包括Scott
应该nvl一下,否则:
15去除重复数据 :
这两条数据没有什么不同,除了rowid。
这些是原先的数据。
这些是新的数据。
道理很简单,如果没有重复数据,那这条数据的rowid既是最大的,也是最小的。如果有重复的数据,那么一般而言rowid小的是老数据,rowid大的是新数据(不是绝对的,请注意),在此只要保留一个就行了。
delete from 就可以删除新的数据:
7 作业
创建使用替换变量的查询。
创建包含变量的命令文件。
使用ACCEPT 命令
1.使用替换变量,提示用户输入职位名称,查询出员工号,姓名,工资,部门号
2.预定义一个职位名称的一个变量,并在查询出员工号,姓名,工资,部门号
注意define最好给个初值。
或:
3.设置sqlplus环境的linesize为100,并让这个变量永久生效
4. 写一个脚本,要求显示某个雇佣时间范围内,所有雇员的姓名、工作和雇佣日期的信息。要求:将名字和工作连接起来,中间用“,”隔开,将列命名为EMPLOYEES和HIREDATE。并使用ACCEPT提示客户输入两个时间范围。头标题为:employee and hiredate info
其输出结果应当类似下面:
      Please enter the low date range ('MM/DD/YYYY'): 01/01/1981
      Please enter the high date range ('MM/DD/YYYY'): 01/01/1982
      EMPLOYEES        HIREDATE
      ----------------- ---------------
      KING, PRESIDENT  17-NOV-81
      BLAKE, MANAGER    01-MAY-81
      CLARK, MANAGER    09-JUN-81
      JONES, MANAGER    02-APR-81
      MARTIN, SALESMAN  28-SEP-81
      ALLEN, SALESMAN  20-FEB-81
      TURNER, SALESMAN  08-SEP-81
      JAMES, CLERK      03-DEC-81
      WARD, SALESMAN    22-FEB-81
      FORD, ANALYST    03-DEC-81
      10 rows selected.
首先拼出所要的语句:
然后替换需要的值:
再写出提示:
注意引号需要转义。
实验一下:
最后形成报表:
最后看一下结果:
8作业
(1)向表中插入数据行
(2)修改和删除表中的数据行
(3)控制事务
1.将员工信息表的部门号为10的员工备份到emp01表,emp01的表结构与emp表结构保持一致
2.更改7698号雇员变更到与7499号雇员相同的部门,并且职位也一样
3.做一个保持点的实例
4.在dept表中插入两行数据:
5.将上面的数据删除。
6.定义一个事务:
7.将60号部门的位置改为“TIANJIIN”
9 作业
(1)使用 CREATE TABLE AS 语句来创建一个新表
(2)更改列定义
(3)验证这个表是存在的
(4)为该表增加注释
(5)更改tables结构
(6)废弃该表
1.使用子查询创建一个dept10表,结构与dept表一致
2.从数据字典中查询,验证dept10表是否创建
3.将表dept10的列“DNAME”的数据类型改为“VARCHAR2(20)”
4.给表dept10添加注释为“this is dept Information”
5.仿照dept表的格式创建表department并将dept中的数据插入。
6.为dept增加一个新的列,该列的名字为descript,类型为varchar2(100)。缺省值为'new column'。
7.创建如下结构的EMPLOYEE表: