--1、选择部门30中的所有员工
select * from emp where deptno=30
--2、列出所有办事员(clerk)的姓名、编号、部门编号
select ename,empno,deptno from emp where job='clerk'
--3、找出佣金高于薪金的员工(佣金是奖金)
select * from emp where ifnull(comm,0)>sal
select * from emp where comm > sal
--4、找出佣金高于薪金60%员工
select * from emp where comm>sal*0.6
--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 not in('manager','clerk') and sal>=2000)
--7、找出收取佣金的员工的不同工作
select distinct job from emp where comm is not null
--8、找出不收取佣金或收取的佣金低于100的员工
select * from emp where comm is null or ifnull(comm,0)<100
select * from emp where comm is null or comm < 100
--9、找出各月倒数第三天受雇的员工
--10、找出早于12年前受雇的员工
--oracle有一个函数可以得到某个日期的最后一天
--DATEDIFF 返回跨两个指定日期的日期和时间边界数。
--select * from emp where datediff(year,hiredate,getdate())>12
--11、以首字母大写的方式显示员工的姓名
-->>LOWER 将大写字符数据转换为小写字符数据后返回字符表达式。
-->>UPPER 返回将小写字符数据转换为大写的字符表达式。
-->>LEN返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。
select upper(substring(ename,1,1))+lower(substring(ename,2,len(ename))) from emp
--12、显示正好为5个字符的员工的姓名
select ename from emp where ename like '_____'
select ename from emp where length(ename)=5
--14、显示所有员工姓名的前3个字符
select substring(ename,1,3) from emp
--15、显示所有员工的姓名,用所有的'中国'代替所有的'a'
-->>REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。
select replace(ename,'a','中国') from emp
--16、显示满10年服务年限的员工的姓名和受雇日期
select ename,hiredate from emp where datediff(year,hiredate,getdate())>10
--17、显示员工的详细资料,按姓名排序
select * from emp order by ename
--18、显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面
select ename,hiredate from emp order by hiredate
--19、显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序
select ename,job,sal from emp order by job desc,sal
--20、显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序
--若月份相同则将最早年份的员工排在最前面
-->>DATEPART 返回代表指定日期的指定日期部分的整数。
select ename,datepart(year,hiredate) a,datepart(month,hiredate) b from emp order by b,a
网友评论