sql简单语法练习

1 选择部门30的所有员工

   select *
   from emp
   where deptno='30'


2 列出所有办事员的姓名,编号和部门编号

   select ename,empno,deptno
   from emp
   where job='CLERK'


3  佣金高于薪金的员工

    select *
    from emp
    where comm>sal


4 佣金高于薪金60%的员工

   select *
   from emp
   where comm>sal*0.6


5 找出部门10所有经理和部门20中所有办事员的详细资料

    select *
    from emp
    where (deptno='10' and job='MANAGER') or ( deptno='20' and job='CLERK')


找出部门10所有经理和部门20中所有办事员,既不是经理又不是办事员但是薪金大于或等于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 comm <100


9 找出个月倒数第三天受雇的所有员工

select *
from emp
where last_day(hiredate)-2=hiredate


10 找出12年前受雇所有员工

select *
from emp
where months_between(sysdate,hiredate)/12>12


11 以首字母大写的方式显示所有员工姓名

select initcap(ename)
from emp


12 找出正好为5个字符的员工姓名

select *
from emp
where length(ename)=5



13 显示不带R的员工姓名

select *
from emp
where ename not like '%R%'


14 显示所有员工前三个字符

select substr(ename,0,3)
from emp


15 显示所有员工姓名,用'a'替换所有'A' 

select replace(ename,'A','a')
from emp


16 显示满10年服务年限的员工姓名和受雇日期

select ename,hiredate
from emp
where months_between(sysdate,hiredate)/12>10


17 显示员工信息,按姓名排序

select *
from emp
order by ename 


18 显示所有员工姓名和受雇日期,根据服务年限,最老的员工排在最前面

select ename,hiredate
from emp
order by hiredate  


19 显示所有员工姓名,工作和薪金,按工作降序,如果工作相同,按薪金升序排序

select *
from emp
order by job desc ,sal   


20 显示所有员工的姓名,加入公司年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在前面

select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'mm') month
from emp
order by month,year


21 显示一个月为30天情况的员工的日薪金,忽略余数

select ename round(sal/30)
from emp 


22  找出2月受雇所有员工

select *
from emp
where trim(to_char(hiredate,'fm mm')) ='2'


23 显示每个员工加入公司的天数

select ename,round(sysdate-hiredate)
from emp 


24 显示名字字段的任何位置包含'A'的所有员工的姓名

select  ename
from emp 
where ename like '%A%'





你可能感兴趣的:(sql)