第7章 数据操纵与事务处理
1.实训题
(1)略 (2)
INSERT INTO BOOK VALUES('100001','冶金工业出版社','李代平', '冶金工业出版社',TO_DATE('2003-01-01','YYYY-MM-DD'),38);
INSERT INTO BOOK VALUES('100002','Oracle9i中文版入门与提高','赵松涛', '人民邮电出版社',TO_DATE('2002-07-01','YYYY-MM-DD'),35);
INSERT INTO BOOK VALUES('100003','Oracle9i开发指南:PL/SQL程序设计', 'Joan Casteel','电子工业出版社',TO_DATE('2004-04-03','YYYY-MM-DD'),49); INSERT INTO BOOK VALUES('100004','数据库原理辅助与提高','盛定宇', '电子工业出版社',TO_DATE('2004-03-01','YYYY-MM-DD'),34);
INSERT INTO BOOK VALUES('100005','Oracle9i中文版实用培训教程','赵伯山', '电子工业出版社',TO_DATE('2002-01-01','YYYY-MM-DD'),21); INSERT INTO BOOK VALUES('100006','Oracle8实用教程','翁正科等', '电子工业出版社',TO_DATE('2003-07-08','YYYY-MM-DD'),38);
INSERT INTO READER VALUES('200001','张三'); INSERT INTO READER VALUES('200002','李凤'); INSERT INTO READER VALUES('200003','孟欣'); INSERT INTO READER VALUES('200004','谢非'); INSERT INTO READER VALUES('200005','刘英');
INSERT INTO BORROW VALUES('100001','200001', TO_DATE('2004-08-10 10:06:14','YYYY-MM-DD HH:MI:SS')); INSERT INTO BORROW VALUES('100002','200002', TO_DATE('2004-08-10 10:06:27','YYYY-MM-DD HH:MI:SS')); INSERT INTO BORROW VALUES('100003','200003', TO_DATE('2004-08-10 10:06:36','YYYY-MM-DD HH:MI:SS')); INSERT INTO BORROW VALUES('100004','200004', TO_DATE('2004-08-10 10:06:48','YYYY-MM-DD HH:MI:SS')); INSERT INTO BORROW VALUES('100005','200005',
TO_DATE('2004-08-10 10:06:58','YYYY-MM-DD HH:MI:SS')); (3)
INSERT INTO BOOK VALUES('10000007','Java网络编成','李程等', '电子工业出版社',TO_DATE('2000-08-01','YYYY-MM-DD'),35); (4)
UPDATE BOOK SET PRICE=29 WHERE NO='100007'; (5)
DELETE FROM BOOK WHERE NO='10000007'
第8章 数据查询
1.实训题
(1) 查询100号部门的所有员工信息。
Selsect * from employees where department_id = 100
(2) 查询所有职位编号为“SA_MAN”的员工的员工号、员工名和部门号。 Select employee_id,first_name,last_name,department_id from employees where job_id= ‘SA_MAN’
(3) 查询每个员工的员工号、工资、奖金以及工资与奖金的和。 Select employee_id,salary,commission_pct, salary*(1+nvl(commission_pct,0) from employees
(4) 查询40号部门中职位编号为“AD_ASST”和20号部门中职位编号为“SA_REP”的员工的信息。
Select * from employees where department_id=40 and job_id=’ AD_ASST’ OR
department_id=20 and job_id=’ SA_REP’;
(5) 查询所有职位名称不是“Stock Manager”和“Purchasing Manager”,且工资大于或等于2000的员工的详细信息。
Select * from employees where job_id not in(’ Stock Manager’,’ Purchasing Manager’) and salary>=2000
(6) 查询有奖金的员工的不同职位编号和名称。
Select distinct job_id, job_title from jobs where job_id in (select job_id from employees where job_id is not null)
(7) 查询没有奖金或奖金低于100元的员工信息。
Select * from employees where salary*commission_pct<100 or commission is NULL (8) 查询员工名(first_name)中不包含字母“S”的员工。 Select first_name from employees where first_name not like ‘%S%’ (9) 查询员工的姓名和入职日期,并按入职日期从先到后进行排序。 Select first_name,last_name,hire_date from employees order by hire_date; (10) 查询所有员工的姓名及其直接上级的姓名。
Select a.first_name,b.first_name from employees a join employees b on b.employee_id = a.manage_id
(11) 查询入职日期早于其直接上级领导的所有员工信息。
select * from employees a where hire_date<(select hire_date from employees b
b.employee_id=a.manage_id)
(12) 查询各个部门号、部门名称、部门所在地以及部门领导的姓名。
Select d.department_id,d.department_name,d.location,e.first_name from departments d join employees e
on d.manager_id=e.employee_id
(13) 查询所有部门及其员工信息,包括那些没有员工的部门。
Select department_name,first_name from departments d left join employees e on d.deparment_id=e.department_id
(14) 查询所有员工及其部门信息,包括那些还不属于任何部门的员工。 Select e.first_name,d.department_name
From employees left join departments on e.department_id=d.department_id; (15) 查询所有员工的员工号、员工名、部门名称、职位名称、工资和奖金。 Select e.employee_id,e.first_name,d.department_name,j.job_title,e.salary, e.salary*e.commission_pct 奖金
From departments d join employees e on d.department_id=e.department_id Join jobs j on j.job_id=e.job_id;
(16) 查询至少有一个员工的部门信息。
select * from departments d where exists(select 1 from employees where department_id=d.department_id)
(17) 查询工资比100号员工工资高的所有员工信息。
Select * from employees where salary>(select salary from employees where employee_id = 100); (18) 查询工资高于公司平均工资的所有员工信息。
Select * from employees where salary>(select avg(salary) from employees) (19) 查询各个部门中不同职位的最高工资。 Select job_id,max(salary) from employees group by job_id (20) 查询各个部门的人数及平均工资
Select department_id,count(*),avg(salary ) from employees group by department_id;
(21) 统计各个职位的员工人数与平均工资。 Select job_id ,count(employee_id),avg(salary) from employees group by job_id;
(22) 统计每个部门中各职位的人数与平均工资。
Select department_id,job_id,count(*),avg(salary) from employees group by department_id,job_id;
(23) 查询最低工资大于5000元的各种工作。 Select job_id,job_title from jobs where job_id in(
Select job_id from employees group by job_id having min(salary)>5000); (24) 查询平均工资低于6000元的部门及其员工信息。
Select e.*,d.* from employees e join departments d on e.department_id=d.department_id and department_id in(select department_Id from employees group by employee_id having avg(salary)<6000);
(25) 查询在“Sales”部门工作的员工的姓名信息。
Select * from employee where department_id in(select department_d from departments where department_name=’Sales’)
(26) 查询与140号员工从事相同工作的所有员工信息。
Select * from employees where job_id in (select job_id from employees where employee_id = 140);
(27) 查询工资高于30号部门中所有员工的工资的员工姓名和工资。
Select first_name,last_name,salary from employees where salary>(select max(salary) from employees deparment_id=30);
(28) 查询每个部门中的员工数量、平均工资和平均工作年限。
Select count(*),avg(salary),avg(round((sysdate-hire_date)/365)) from employees group by department_id
(29) 查询工资为某个部门平均工资的员工的信息。
Select * from employees where salsry in(select avg(Salary) from employees group by department_id)
(30) 查询工资高于本部门平均工资的员工的信息。
Select * from employees e1 where salary>(select avg(salary) from employees e2 where e2.department_id=e1.department_id )
(31) 查询工资高于本部门平均工资的员工的信息及其部门的平均工资。 Select e.*,avgsal
From employees e join (select department_id,avg(salary) avgsal from employees group by department_id) d
On e.department_id=d.department_id And e.salary>d.avgsal
(32) 查询工资高于50号部门某个员工工资的员工的信息。
Select *from employees where salary>any(select salary from employees where department_id=50):
(33) 查询工资、奖金与10号部门某员工工资、奖金都相同的员工的信息。