--1、查询emp表中的所有信息
select * from emp;
--2、显示emp表的员工姓名和工资。
select ename,sal from emp;
--3、查询emp表中部门编号为20的并且sal(工资)大于3000的所有员工信息
select *
from emp
where deptno = 20
and sal > 3000;
--4、查询emp表中部门编号为20的或者sal(工资)大于3000的所有员工信息
select *
from emp
where deptno = 20
or sal > 3000;
--5、使用between and 查询工资在2000和4000之间的员工(用and 重新实现)
select * from emp where sal between 2000 and 4000;
select *
from emp
where sal >= 2000
and sal <= 4000;
--6、使用in 查询 部门编号10,20的所有员工
select * from emp where deptno in(10,20);
--7、使用like查询所有名字中包括 W的员工信息
select * from emp where ename like '%W%';
--8、使用like查询所有员工名字中第二子字母为W的员工信息
select * from emp where ename like '_W%';
--9、查询所有员工信息并按照部门编号和工资进行排序
select * from emp order by deptno,sal;
--10、显示员工工资上浮20%的结果。
select emp.*,sal*1.2 as newSal from emp;
--11、显示EMP表的员工姓名以及工资和奖金的和。
select ename,sal,comm from emp;
select ename,sal+nvl(comm,0) as allSal from emp;
--12、显示DEPT表的内容,使用别名将表头转换成中文显示。
select deptno as 部门编号, dname as 部门名称, loc as 地址 from dept;
--13、查询员工姓名和工资,并按工资从小到大排序。
select ename,sal from emp order by sal;
--14、查询员工姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。
select ename,hiredate from emp order by hiredate desc;
--15、查询员工信息,先按部门编号从小到大排序,再按雇佣时间的先后排序。
select * from emp order by deptno,hiredate;
--16、按工资和入职月份的乘积排序(倒序)。
select extract(month from hiredate) as months, emp.empno from emp;
select tmp.months * sal as results
from emp,
(select extract(month from hiredate) as months, emp.empno from emp) tmp
where emp.empno = tmp.empno
order by results
--17、显示职务为“SALESMAN”的员工的姓名、职务和工资。
select ename,job,sal from emp where job='SALESMAN';
--18、显示工资大于等于3000的员工姓名、职务和工资。
select ename,job,sal from emp where sal>=3000;
--19、显示1982年以后雇佣的员工姓名和雇佣时间。
select * from emp where hiredate>to_date('1982-12-31','yyyy-MM-DD');
--20、显示部门编号为10的员工姓名和雇佣时间
select ename,hiredate from emp where deptno=10;
--21、显示工资在1000~2000之间(不包括1000和2000)的员工信息。
select * from emp where sal >1000 and sal <2000;
--22、显示部门10中工资大于1500的员工。
select * from emp where deptno=10 and sal >1500;
--23、显示职务为CLERK或MANAGER的员工信息。
select * from emp where job='CLERK' or job='MANAGER';
--24、显示部门10以外的其他部门的员工。
select * from emp where deptno not in (10);
--25、显示部门10和部门20中工资小于1500的员工。
select * from emp where deptno in(10,20) and sal <1500;
PPT上已学查询:
--1、查询姓名首字母为“A”或第二个字符为“A”的所有员工信息
select * from emp where ename like 'A%' or ename like '_A%';
--2、查询部门20和30中的、岗位不是“CLERK”或“SALESMAN”的所有员工信息。
select * from emp where deptno in(20,30) and job not in ('CLERK','SALESMAN');
--3、查询出工资在2500-3500之间,1981年入职的,没有奖金的所有员工信息。
--按照hiredate的顺序,查看emp表
select * from emp order by hiredate;
--获得empno和截取对应的年份
Select Extract(year from hiredate)as getYear,empno from emp;
--查询出工资在2500-3500之间,1981年入职的,没有奖金的所有员工信息
select emp.*
from emp,
(Select Extract(year from hiredate) as getYear, empno from emp) tmp
where emp.empno = tmp.empno
and tmp.getYear = '1981'
and sal between 2500 and 3500
and (comm = 0 or comm is null);
--4、查询比平均员工工资高的员工信息。
select * from emp where sal>(select avg(sal) from emp);
--5、查询平均工资高于2000的部门信息。
--平均工资高于两千的部门编号
select deptno from emp group by deptno having avg(sal) > 2000;
--查询平均工资高于2000的部门信息
select *
from dept
where deptno in
(select deptno from emp group by deptno having avg(sal) > 2000);
--6、查询出WARD的工作所在地。
select loc
from dept d, emp e
where e.ename = 'WARD'
and e.deptno = d.deptno;
--7、查询出工资比ADAMS高的所有人姓名、部门、所在地。
select ename, dname, loc
from emp e, dept d
where sal > (select sal from emp where ename = 'ADAMS')
and e.deptno = d.deptno;
select * from emp where sal>1100;
--8、查询工资排名第7的员工信息。
--工资排名前七名
select sal from (select sal from emp order by sal desc) where rownum < 8;
--工资排名前七名,倒序
select empno,sal from (select sal,empno from emp order by sal desc) where rownum <8 order by sal;
--工资排名第七名
select empno
from (select empno, sal
from (select sal, empno from emp order by sal desc)
where rownum < 8
order by sal)
where rownum = 1
--工资排名第七名信息
select *
from emp
where empno = (select empno
from (select empno, sal
from (select sal, empno from emp order by sal desc)
where rownum < 8
order by sal)
where rownum = 1)
--31、假定当前的系统日期是2013年11月13日,显示部门10员工的雇佣天数。
--设置当前时间
select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual;
--获取雇佣天数和empno
select tmp.nowDays - hiredate hasDays, empno
from emp,
(select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual) tmp
--获取雇佣天数和员工详细信息
select emp.*, (tmp.nowDays - hiredate) hasDays
from emp,
(select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual) tmp;
--获取部门编号为10的员工详细信息和雇佣天数
select emp.*, (tmp.nowDays - hiredate) hasDays
from emp,
(select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual) tmp
where deptno = 10;
--32、显示员工姓名和雇佣的星期数
select ename, ceil(tmp.雇佣星期数) as hasWeek
from emp,
(select ((select to_date('2013-11-13', 'yyyy-MM-DD') from dual) -
hiredate) / 7 as 雇佣星期数,
empno
from emp) tmp
where emp.empno=tmp.empno;
--33、显示从本年1月1日开始到现在经过的天数。
--获取时间
select to_char(sysdate, 'yyyy-MM-DD') as nowDays from dual;
--获取本年的第一天
select to_date('2019-1-1', 'yyyy-MM-DD') as YearFirst from dual;
--显示从本年1月1日开始到现在经过的天数
select ceil(nowDays - YearFirst) hasDays
from (select sysdate as nowDays,
to_date('2019-1-1', 'yyyy-MM-DD') as YearFirst
from dual);
--34、查询所有员工的奖金,如果奖金没有,用0来替代
select emp.*,nvl(comm,0) newComm from emp;