/*1、选择在部门30中员工的所有信息*/
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp where deptno=30;
/*2、列出职位为(MANAGER)的员工的编号,姓名 */
select empno,ename,job from emp where job='MANAGER';
/*3、找出奖金高于工资的员工*/
select * from emp where comm>sal;
/*4、找出每个员工奖金和工资的总和 */
select empno,ename,job,mgr,hiredate, sal+(nvl(comm,0)),deptno from emp;
/*5、找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK) */
select empno,ename,deptno,job from emp where (deptno=10 and job='MANAGER')
or(deptno=20 and job='CLERK');
/*6、找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工 */
select empno,ename,sal,deptno from emp where deptno=10 and job not in('MANAGER','CLERK') and sal>2000;
/*7、找出有奖金的员工的不同工作 */
select distinct job,comm from emp2 where comm is not null;
/*8、找出没有奖金或者奖金低于500的员工*/
select *from emp where comm<=500 or comm is null;
/*9、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面 */
select ename,hiredate from emp order by hiredate;
/*10、找出每个月倒数第三天受雇的员工*/
select * from emp where last_day(hiredate)-hiredate=2;
/*11、用函数列出员工所在的部门,deptno=10显示'部门10',
select job || deptno from emp where deptno=10
/*12、分组统计各部门下工资>500的员工的平均工资*/
select job , round(avg(sal),2) from emp2 group by job having round(avg(sal),2)>500 ;
/*13、统计各部门下平均工资大于500的部门*/
select job ,round(avg(sal),2) from emp group by job having round(avg(sal),2)>500;
/*14、算出部门30中得到最多奖金的员工奖金 */
select max(comm) from emp2 where deptno=30;
/*15、算出部门30中得到最多奖金的员工姓名*/
select ename , comm from emp2
where comm=(select max(comm) from emp2 where deptno=30);
/*16、算出每个职位的员工数和最低工资*/
select job ,count(job),min(sal) from emp2 group by job;
/*17、列出员工表中每个部门的员工数,和部门no */
select deptno,job ,count(job) from emp2 group by deptno,job;
/*18、得到工资大于自己部门平均工资的员工信息*/
select e.*,d1.* from emp2 e,
(select deptno ,round(avg(sal),2) d from emp2 group by deptno) d1
where e.deptno=d1.deptno and e.sal>d1.d;
/*19、分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) */
select job,sum(sal+nvl(comm,0))总工资,round(avg(comm),2)平均奖金 from emp2 group by job;
/*20、笛卡尔集*/
select e.*,d.* from emp e, dept d;(全部显示)
/*21、显示员工ID,名字,直属主管ID,名字*/
select e.empno, e.ename,w.empno,w.ename from emp2 e,
(select empno ,ename from emp2) w
where e.mgr=w.empno;
/*22、DEPT表按照部门跟EMP表左关联*/
select d.*,e.*
from dept d
left join emp e
on d.deptno=e.deptno;
/*23、使用此语句重复的内容不再显示了*/
select distinct(job) from emp;
/*24、重复的内容依然显示 */
select * from emp
UNION ALL
select * from emp;
/*25、只显示了两个表中彼此重复的记录。*/
select *
from dept, emp
where dept.deptno=emp.deptno;
/*26、只显示了两张表中的不同记录*/
select e.empno,e.empno,e.job,e.mgr,e.hiredate,e.sal,e.comm,d.dname,d.loc from emp e, dept d where e.deptno=d.deptno;
27、显示员工姓名的前三个字符
select substr(job , 0 , 3) from emp;
Oracle中mysql练习总结
最新推荐文章于 2024-01-24 19:11:14 发布