-- 1.选择部门30的所有员工
select * from emp where deptno=30;

-- 2.列出所有办事员(CLERK)的姓名,员工编号和部门编号
select * from emp where job='CLERK';

-- 3.找出佣金高于薪金的员工
select * from emp where comm>sal;

-- 4、找出佣金高于薪金60%的员工
select * from emp where (comm*10/6)>sal;

-- 5.找出部门10中的所有经理(MANAGER)和部门20的所有办事员(CLERK)的详细资料
select * from emp where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK');

-- 6.找出部门10的所有经理(MANAGER),部门20中所有办事员(CLERK),既不是办事员也不是经理但是薪金大于2000的所有员工的详细资料
select * from emp where ((deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK'))or(job<>'MANAGER' and job<>'CLERK' and sal>2000);

-- 7、找出收取佣金的员工的员工的不同工作
select distinct job from emp where comm is not null and comm<>0;

-- 8.找出不取佣金或者是收取佣金小于100的员工详细信息
select * from emp where comm is null or comm<100;

-- 9.找出各月的倒数第三天受雇佣的员工 *
-- 每个员工的雇佣时间是不一样的,所有需要找出每个员工雇佣的时间所在月份的最后一天,之后按照‘日期-数字’的方式求出前三天的日期,这个日期必须和雇佣日期相符才能满足条件
-- SELECT last_day( '1981-09-28' ); 获取月份最后一天
-- SELECT EXTRACT(DAY FROM Now());提取当前时间的日
select * from emp where extract(DAY FROM last_day(hiredate))-3<=extract(DAY FROM (hiredate));

-- 10.找出早于12年前受雇的员工
select * from emp where extract(year from now())-12 >extract(year from hiredate);

-- 11.以首字母大写的方式显示员工姓名
-- concat(,) 拼接字符串upper() 大写lower()小写left(,1) 左边截取一个substr(,2)从左边第2个往后截取
select concat(upper(left(ename,1)),lower(substr(ename,2))) from emp;

-- 12显示姓名正好为5个长度的所有员工
select * from emp where length(ename)=5;

-- 13.显示带有'R'的员工的详细
select * from emp where ename like '%R%';

-- 14、显示员工姓名的前三个字符
select ename '全名', left(ename,3) '前三个字符' from emp;

-- 15、显示所有员工的姓名,用‘a’替换所有的'A'
select ename '全名', replace(ename,'A','a') as '大A替换为小a' from emp;

-- 16.列出满10年雇佣期限的员工的详细信息
select * from emp where extract(year from now())-10>extract(year from hiredate);

-- 17.显示员工的详细资料,并按姓名排序
select * from emp order by ename asc;

-- 18、显示员工的姓名和受雇日期,并按照老的员工排在前面的方式显示出来
select ename , hiredate from emp order by hiredate asc;

-- 19.显示所有员工的姓名、工作和薪金,按工作的降序排列,工作相同则按照薪金的升序排列
select ename ,job,sal from emp order by sal asc;

-- 20、显示所有员工的姓名、加入公司的年份和月份、按接受所在雇佣月排序,若月的相同则按最早年份的员工排在最前面
-- 本程序需要求出所雇的日期的年份和月份,然后再来显示
select ename as '姓名',year(hiredate) as '年份',month(hiredate) as '月份' from emp order by month(hiredate) asc,year(hiredate) asc;

-- 21.显示一个月为30天的情况下,所有员工的日薪,忽略余数
select ename '姓名',sal '月薪',truncate(sal/30,0) '日薪' from emp;

-- 22.找出在(任何年份的)2月受雇的员工
select * from emp where month(hiredate)=2;

-- 23.对于每个员工显示其来到公司的天数
select ename as '姓名', to_days(now())-to_days(hiredate) as '来公司的天数' from emp;

-- 24、显示姓名字段的任何位置包含有’A‘的员工
select * from emp where ename like '%A%';

04-24 06:28