---扩充:查找S_EMP表中员工userid为**的入职时间**的信息---
select * from s_emp;
select userid ||'的入职时间为'|| start_date from S_EMP;
select userid ||'的入职时间为'|| to_char(e.start_date,'yyyy-mm-dd') from s_emp e;

--习题6:找出S_EMP表中,START_DATE是91年的日期,并且以2017.3.28此种格式输出
select * from s_emp e where e.start_date like '%91';
select to_char(e.start_date,'yyyy.mm.dd') "start_date" from s_emp e where e.start_date like '%91';

--习题8:请统计出表S_ORD中,11号销售人员(SALES_REP_ID=11)的顾客数量,以及他的TOTAL平均值
select * from s_ord e where e.sales_rep_id like '11';
select count(*) "SALES_REP_ID=11的顾客数量",avg(e.total) "TOTAL平均值" from s_ord e where e.sales_rep_id like '11';

select substr(e.last_name,2,4),e.last_name from s_emp e;/*选取字符串,从第2位字母开始取4位*/
select length(e.last_name),e.last_name from s_emp e;/*字符长度*/
select round(123.4567,2)from dual;/*四舍五入,保留两位小数,得123.46*/
select round(183.4567,-2)from dual;/*四舍五入,整数两位取整,得200*/
select trunc(123.4567,2)from dual;/*截取,保留两位小数,得123.45*/
select trunc(123.4567,-2)from dual;/*截取,整数位第二位取整,得100*/
select trunc(123.4567,0)from dual;/*截取,得123*/
select round(123.9567,0)from dual;/*四舍五入,得124*/

--习题7:从表S_CUSTOMER,S_REGION中查找出顾客表的NAME、REGION_ID列和区域表的name列,REGION_ID为5号区域
select a.name,a.region_id,e.name from s_customer a,s_region e where region_id = 5;
select * from s_customer a,s_region e where region_id = 5;
select * from s_customer;
select * from s_customer,s_region;

select * from s_emp e ;
select * from s_emp e where e.salary>(select t.salary from s_emp t where t.first_name = 'Ben');
select * from s_emp e where e.salary>1100;

insert into s_dept values(51,'it',5);
commit;
--左、右、全连接
select * from s_emp e left outer join s_dept d on e.dept_id = d.id;
select * from s_emp e right outer join s_dept d on e.dept_id = d.id;
select * from s_emp e full outer join s_dept d on e.dept_id = d.id;

--习题10:请用左外连接方式重写以下事例
select e.last_name, e.id, c.name
from s_emp e
right outer join s_customer c
on e.id = c.sales_rep_id
order by e.id;/*右外连接方式*/

select c.name, e.last_name, e.id
from s_customer c
left outer join s_emp e
on e.id = c.sales_rep_id
order by e.id; /*左外连接方式*/

--查询平均薪资高于32号部门平均薪资的部门号和平均薪资
--1、子查询
select e.dept_id, avg(salary)
from s_emp e
group by e.dept_id
having avg(salary) > (select avg(e.salary) from s_emp e where e.dept_id = 32);/*分组查询,用having限定条件*/
select avg(e.salary) from s_emp e where e.dept_id = 32;/*取32号部门的平均工资*/
--2、多表查询
select e.dept_id,avg(e.salary)
from s_emp e,s_emp t
where t.dept_id = 32
group by e.dept_id
having (avg(e.salary) > avg(t.salary));
--3、内链接
select e.dept_id,avg(e.salary)
from s_emp e inner join s_emp t on t.dept_id = 32
group by e.dept_id
having avg(e.salary) > avg(t.salary);
--4、外连接
select e.dept_id,avg(e.salary)
from s_emp e left join s_emp t on t.dept_id = 32
group by e.dept_id
having (avg(e.salary) > avg(t.salary));

 

--习题11:在表s_emp中,查询出title列和非'VP'开头的title薪水总和列,此列用别名 PAYROLL显示,
--查询出该职位的所有员工薪水总和需要大于5000,PAYROLL列按升序排列
select e.title,sum(e.salary) payroll
from s_emp e
where e.title not like 'VP%'
group by e.title
having sum(e.salary)>5000
order by payroll;

--习题12:在表s_emp表中,查询出列last_name,title,salary,请仅使用where子查询方法,
--不能使用group by和having子句,查询出小于salary平均值的员工信息
select e.last_name,e.title,e.salary from s_emp e where e.salary < (select avg(e.salary) from s_emp e);

 

 

create table emp_41
(id number(7),
last_name varchar(25));

insert into emp_41;
select id,last_name from s_emp where dept_id = 41;
delete from emp_41;
select * from emp_41 t;
drop table emp_41;
truncate table emp_41;

insert into emp_41;
select id ,last_name from s_emp where dept_id =41;
savepoint A;

update emp_41 set id = 10 where id = 2;
savepiont B;

delete from emp_41;
savepiont C;

rollback to B;
rollback to A;

 

---扩充:查找S_EMP表中员工userid为**的入职时间**的信息---
select * from s_emp;
select userid ||'的入职时间为'|| start_date from S_EMP;
select userid ||'的入职时间为'|| to_char(e.start_date,'yyyy-mm-dd') from s_emp e;

--习题6:找出S_EMP表中,START_DATE是91年的日期,并且以2017.3.28此种格式输出
select * from s_emp e where e.start_date like '%91';
select to_char(e.start_date,'yyyy.mm.dd') "start_date" from s_emp e where e.start_date like '%91';

--习题8:请统计出表S_ORD中,11号销售人员(SALES_REP_ID=11)的顾客数量,以及他的TOTAL平均值
select * from s_ord e where e.sales_rep_id like '11';
select count(*) "SALES_REP_ID=11的顾客数量",avg(e.total) "TOTAL平均值" from s_ord e where e.sales_rep_id like '11';

select substr(e.last_name,2,4),e.last_name from s_emp e;/*选取字符串,从第2位字母开始取4位*/
select length(e.last_name),e.last_name from s_emp e;/*字符长度*/
select round(123.4567,2)from dual;/*四舍五入,保留两位小数,得123.46*/
select round(183.4567,-2)from dual;/*四舍五入,整数两位取整,得200*/
select trunc(123.4567,2)from dual;/*截取,保留两位小数,得123.45*/
select trunc(123.4567,-2)from dual;/*截取,整数位第二位取整,得100*/
select trunc(123.4567,0)from dual;/*截取,得123*/
select round(123.9567,0)from dual;/*四舍五入,得124*/

--习题7:从表S_CUSTOMER,S_REGION中查找出顾客表的NAME、REGION_ID列和区域表的name列,REGION_ID为5号区域
select a.name,a.region_id,e.name from s_customer a,s_region e where region_id = 5;
select * from s_customer a,s_region e where region_id = 5;
select * from s_customer;
select * from s_customer,s_region;

select * from s_emp e ;
select * from s_emp e where e.salary>(select t.salary from s_emp t where t.first_name = 'Ben');
select * from s_emp e where e.salary>1100;

 insert into s_dept values(51,'it',5);
 commit;
--左、右、全连接
select * from s_emp e left outer join s_dept d on e.dept_id = d.id;
select * from s_emp e right outer join s_dept d on e.dept_id = d.id;
select * from s_emp e full outer join s_dept d on e.dept_id = d.id;

--习题10:请用左外连接方式重写以下事例
select e.last_name, e.id, c.name
  from s_emp e
 right outer join s_customer c
    on e.id = c.sales_rep_id
 order by e.id;/*右外连接方式*/

select c.name, e.last_name, e.id
  from s_customer c
  left outer join s_emp e
    on e.id = c.sales_rep_id
 order by e.id; /*左外连接方式*/

--查询平均薪资高于32号部门平均薪资的部门号和平均薪资
--1、子查询
select e.dept_id, avg(salary)
  from s_emp e
 group by e.dept_id
having avg(salary) > (select avg(e.salary) from s_emp e where e.dept_id = 32);/*分组查询,用having限定条件*/
select avg(e.salary) from s_emp e where e.dept_id = 32;/*取32号部门的平均工资*/
--2、多表查询
select e.dept_id,avg(e.salary)
from s_emp e,s_emp t
where t.dept_id = 32 
group by e.dept_id 
having (avg(e.salary) > avg(t.salary));
--3、内链接
select e.dept_id,avg(e.salary)
from s_emp e inner join s_emp t on t.dept_id = 32
group by e.dept_id
having avg(e.salary) > avg(t.salary);
--4、外连接
select e.dept_id,avg(e.salary)
from s_emp e left join s_emp t on t.dept_id = 32
group by e.dept_id
having (avg(e.salary) > avg(t.salary));
--习题11:在表s_emp中,查询出title列和非'VP'开头的title薪水总和列,此列用别名 PAYROLL显示,
--查询出该职位的所有员工薪水总和需要大于5000,PAYROLL列按升序排列
select e.title,sum(e.salary) payroll
from s_emp e
where e.title not like 'VP%'
group by e.title
having sum(e.salary)>5000
order by payroll;

--习题12:在表s_emp表中,查询出列last_name,title,salary,请仅使用where子查询方法,
--不能使用group by和having子句,查询出小于salary平均值的员工信息
select e.last_name,e.title,e.salary from s_emp e where e.salary < (select avg(e.salary) from s_emp e);


create table emp_41
(id number(7),
last_name varchar(25));

insert into emp_41;
select id,last_name from s_emp where dept_id = 41;
delete from emp_41;
select * from emp_41 t;
drop table emp_41;
truncate table emp_41;

insert into emp_41;
select id ,last_name from s_emp where dept_id =41;
savepoint A;

update emp_41 set id = 10 where id = 2;
savepiont B;

delete from emp_41;
savepiont C;

rollback to B;
rollback to A;

  

存笔记

 

posted on 2022-02-16 22:35  三天乐趣  阅读(31)  评论(0编辑  收藏  举报