今天我分享的是关于Oracle高级查询的经典练习题
–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 3000;
–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 empno,sal desc;
–10、显示雇员工资上浮20%的结果。
select ename,sal*1.2 from emp
–11、显示EMP表的雇员名称以及工资和津贴的和。
select * from emp;
select ename,sal+nvl(comm,0) from emp;
–12、在查询中使用列别名。特殊的别名如别名中有空格
select ename"this ename" from emp;
–13、显示DEPT表的内容,使用别名将表头转换成中文显示。
select deptno as 部门编号 , dname as 部门名称,loc as 所在地址 from dept;
–14、显示DEPT表的内容,按以下的形式:部门ACCOUNTING所在的城市为NEW YORK
select dname|| ‘所在的城市’||loc from dept;
–15、使用DISTINCT消除重复行显示。显示emp表中的的职位
select distinct job from emp;
–16、查询雇员姓名和工资,并按工资从小到大排序。
select ename,sal from emp order by sal desc;
–17、查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。
select ename,hiredata from emp order by hiredate desc;
–18、查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。
select * from emp order by deptno asc,hiredate asc;
–19、按工资和工作月份的乘积排序。
select sal*extract(month from(hiredate))a from emp order by a;
–20、显示职务为“SALESMAN”的雇员的姓名、职务和工资。
select * from emp;
select ename,job,sal from emp where job=‘SALESMAN’;
–21、显示工资大于等于3000的雇员姓名、职务和工资。
select ename,job,sal from emp where sal=3000 and sal>3000;
–22、显示1982年以后雇佣的雇员姓名和雇佣时间。
select ename,hiredate((SYSDATE-hiredate)/365) from emp where hiredate>Tdate(1982,‘yy’);
–23、显示部门编号为10的雇员姓名和雇佣时间
select ename,to_char(hiredate,‘YYYY-MM-DD’) from emp where deptno =10;
–24、显示工资在1000~2000之间(不包括1000和2000)的雇员信息。
select * from emp where sal>2000 and sal<1000;
–25、显示部门10中工资大于1500的雇员。
select * from emp where deptno=10 and sal>1500;
–26、显示职务为CLERK或MANAGER的雇员信息。
select * from emp where job=‘CLERK’ or job=‘MANAGER’;
–27、显示部门10以外的其他部门的雇员。
select * from emp where deptno !=10;
–28、显示部门10和部门20中工资小于1500的雇员。
select * from emp where sal<1500 and deptno in(10,20);
–29、显示经理编号没有填写的雇员。
select * from emp where mgr is null;
–30、如果不知道表的字段内容是大写还是小写,可以转换后比较。
select upper(ename) from emp;
select lower(enme)from emp;
–31、显示名称以“W”开头的雇员,并将名称转换成以大写开头。
select initcap(ename) from emp where ename like ‘W%’;
–32、显示雇员名称中包含“S”的雇员名称及名称长度。
select ename ,length(ename) from emp where ename like ‘%S%’;
–33、显示部门表中部门和所在城市列表,中间以下划线“”连接,城市名转换成以大写字母开头。
select dname||’’||initcap(loc) from dept;
–34、返回系统的当前日期
select to_char(sysdate,‘YYYY-MM-DD’) from dual;
–35、返回2003年2月的最后一天。
select last_day(Tdate(200302,‘YYYYMM’)) from dual;
–36、假定当前的系统日期是2003年2月6日,求再过1000天的日期。
select to_date(20030206,‘YYYYMMDD’)+1000 from dual;
–37、假定当前的系统日期是2003年2月6日,显示部门10雇员的雇佣天数。
select to_date(20030206,‘YYYYMMDD’)-hiredate from emp where detpno=10;
–38、显示雇员名称和雇佣的星期数
select floor((sysdate - hiredate)/7) from emp;
–39、显示从本年1月1日开始到现在经过的天数(当前时间取SYSDATE的值)。
select sysdate - to_date(concat(extract(year from (sysdate)),‘0101’),‘YYYYMMDD’) from dual;
–40、将日期显示转换成中文的年月日。
select to_char(sysdate,‘YYYY’)||‘年’||to_char(sysdate,‘MM’)||‘月’||to_char(sysdate,‘DD’)||‘日’ from dual;
–41、将雇佣日期转换成字符串并按新格式显示。(17 12月 1980)
select to_char(hiredate,‘DD MM YYYY’) from emp;
–42、使用nvl函数转换空值。(如果是数值转换成0 字符转换为 空)
select nvl(comm,0) from emp;
–1、.在emp表中查询出员工的工资,并计算应交税款:
–如果工资小于1000,税率为0,
–如果工资大于等于1000并小于2000,税率为10%,
–如果工资大于等于2000并小于3000,税率为15%,
–如果工资大于等于3000,税率为20%。(使用case)
select sal ,(
case
when sal < 1000 then 0
when sal < 2000 then 10
when sal < 3000 then 15
else 20
end
)from emp;
–2、显示雇员的名称和所在的部门的编号和名称。
select emp.ename,dept.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno;
–3、显示工资大于3000的雇员的名称、工资和所在的部门名称。
select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno and emp.sal>3000;
–4、显示雇员的名称、工资和所在的部门名称及没有属于任何部门的雇员。
select emp.ename ,emp.sal ,dept.dname from emp left join dept on emp.deptno=dept.deptno;
如有错误请及时提出,我会及时更改。