Oracle---day01

一、简单查询语句

 1.去重查询,和mysql的一样
  select distinct job from emp;
  select distinct job, deptno from emp;  --去除job相等且deptno相等的结果

 2.查询员工年薪
  select ename 姓名, sal 月薪, sal*12 年薪 from emp;

 3.字符串拼接
  select ‘姓名’ || ename from emp;  --Oracle特有的拼接方式
  select concat('姓名', ename) from emp;  --Mysql和Oracle都可以使用

 4.查询能得到奖金的员工信息
  select * from emp where comm is not null;

 5.查询工资在1500~3000之间的员工信息
  select * from emp where sal between 1500 and 3000;

 6.查询姓名在某个范围类的员工信息
  select * from emp where ename in ('WARD','SCOTT','KING');

 7.查询姓名的第三个字母为o的员工信息
  select * from emp where ename like '__0%';

 8.查询部门编号和工资,按照编号升序,工资降序排列
  select deptno, sal from emp order by deptno asc, sal desc;

 二、函数

 1.查询工资和
  select sum(sal) from emp;

 2.查询平均工资
  select avg(sal) from emp;

 3.数值函数向上取整、向下取整和四舍五入、截断
  select ceil(45.887) from dual;  --向上取整  46
  select floor(45.887) from dual;    --向下取整  45

  
select round(45.826, 2) from dual; --45.83  --四舍五入   参数2 为保留小数位
  select round(45.826, 1) from dual; --45.8
  select round(45.826, 0) from dual; --46
  select round(45.826, -1) from dual; --50
  select round(45.826, -2) from dual; --0

  select trunc(45.826, 2) from dual; --45.82  --截断
  select trunc(45.826, 1) from dual; --45.8
  select trunc(45.826, 0) from dual; --45
  select trunc(45.826, -1) from dual; --40
  select trunc(45.826, -2) from dual; --0

 4.字符串的截取
  select substr('hello_world', 3, 4)  --表示从第3个字母开始截取4个字母   llo_

 5.日期函数
  select sysdate from dual;  --当前时间
  select months_between(sysdate, hiredate) from emp;  --查询员工入职到现在的月数

 6.转换函数
  字符转数值 to_number(str)
  select to_number('123') from dual;
  日期转字符串 to_char
  select to_char(hiredate, 'yyyy-mm-dd hh:mi:ss') from emp;
  select to_char(sysdate, 'd') from dual;   --一周的第几天
  select to_char(sysdate, 'dd') from dual;    --一个月的第几天
  select to_char(sysdate, 'ddd') from dual;   --一年的第几天
  字符串转日期 --to_date
  select * from emp where hiredate between to_date(1981, 'yyyy') and to_date(1986, 'yyyy');  --查询在1981~1986年之间入职的员工信息

 7.通用函数,nvl、nvl2、nullif
  nvl(arg1, arg2)     --如果arg1=null,返回arg2
  nvl2(arg1, arg2, arg3) -- 如果arg1=null,返回arg3,否则返回arg2 
  nullif(arg1, arg2)       -- 如果arg1==arg2,返回null,否则返回arg1
  select nvl2(comm, 1, 0) from emp  --查询员工是否有奖金

 8.条件表达式
  select      --这种方法在Oracle和Mysql都适用
   case deptno
   when 10 then '10号部门'
   when 20 then '20号部门'
   when 30 then '30号部门’
  end from emp;

  select decode(deptno,10, '10号部门', 20, '20号部门', 30, '30号部门','其他部门') from emp;  --Oracle特有的写法

三、练习

 1.查询工资大于12000的员工姓名和工资
  select first_name,salary from employees where salary > 12000;

 2.查询员工号为176的员工的姓名和部门号
  select first_name, department_id from employees where employee_id=176;

 3.选择工资不在5000到12000的员工的姓名和工资
  select frist_name,salary from employees where salary not between 5000 and 12000;

 4.选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id和雇用时间
  select first_name, job_id, hire_date from employees
  where hire_date between to_date('1998-02-01', 'yyyy-mm--dd') and to_date('1998-05-01', 'yyyy-mm-dd');

 5.选择在20或50号部门工作的员工姓名和部门号
  select first_name, department_id from employees where department_id=20 or department_id=50;

 6.选择在1994年雇用的员工的姓名和雇用时间
  select first_name, hire_date from employees where to_char(hire_date, 'yyyy') = '1994';

 7.选择公司中没有管理者的员工姓名及job_id
  select first_name, job_id from employees where manager_id is null;

 8.选择公司中有奖金的员工姓名,工资和奖金级别
  select first_name, salary, commission_pct from employees where commission_pct is not null

 9.选择员工姓名的第三个字母是a的员工姓名
  select first_name from employees where first_name like '__a%';

 10.选择姓名中有字母a和e的员工姓名
  select first_name from employees where first_name like '%a%' and first_name like '%e%';

 11.显示系统时间
  select sysdate from dual;

 12.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new?salary)
  select employee_id, first_name, salary, salary+salary*0.2 "new salary" from employees;

 13.将员工的姓名按首字母排序,并写出姓名的长度(length)
  select first_name, length(first_name) from employees order by first_name;

 14.查询各员工的姓名,并显示出各员工在公司工作的月份数
  select first_name, months_between(sysdate,hire_date) from employees;

 15.查询员工的姓名,以及在公司工作的月份数(worked_month),并按月份数降序排列
  select first_name, months_between(sysdate, hire_date) "worked_months" from employees order by months_between(sysdate, hiredate) desc;

 

原文地址:https://www.cnblogs.com/zy-Luo/p/11520021.html