1

Oracle笔记查询_01

 

1. 更新.

select * from dept for update;

 

2.count(*)

 

 

 

3.

select * from dual;

 

 

 

 

 

 

 

 4.

select * from emp;

 

1    7369    SMITH    CLERK    7902    1980/12/17    800.00        20
2    7499    ALLEN    SALESMAN    7698    1981/2/20    1600.00    300.00    30
3    7521    WARD    SALESMAN    7698    1981/2/22    1250.00    500.00    30
4    7566    JONES    MANAGER    7839    1981/4/2    2975.00        20
5    7654    MARTIN    SALESMAN    7698    1981/9/28    1250.00    1400.00    30
6    7698    BLAKE    MANAGER    7839    1981/5/1    2850.00        30
7    7782    CLARK    MANAGER    7839    1981/6/9    2450.00        10
8    7788    SCOTT    ANALYST    7566    1987/4/19    3000.00        20
9    7839    KING    PRESIDENT        1981/11/17    5000.00        10
10    7844    TURNER    SALESMAN    7698    1981/9/8    1500.00    0.00    30
11    7876    ADAMS    CLERK    7788    1987/5/23    1100.00        20
12    7900    JAMES    CLERK    7698    1981/12/3    950.00        30
13    7902    FORD    ANALYST    7566    1981/12/3    3000.00        20
14    7934    MILLER    CLERK    7782    1982/1/23    1300.00        10

5.

select ename "姓 名", sal 工资  from emp;
       EMPNO    ENAME    JOB    MGR    HIREDATE    SAL    COMM    DEPTNO
1    7369    SMITH    CLERK    7902    1980/12/17    800.00        20
2    7499    ALLEN    SALESMAN    7698    1981/2/20    1600.00    300.00    30
3    7521    WARD    SALESMAN    7698    1981/2/22    1250.00    500.00    30
4    7566    JONES    MANAGER    7839    1981/4/2    2975.00        20
5    7654    MARTIN    SALESMAN    7698    1981/9/28    1250.00    1400.00    30
6    7698    BLAKE    MANAGER    7839    1981/5/1    2850.00        30
7    7782    CLARK    MANAGER    7839    1981/6/9    2450.00        10
8    7788    SCOTT    ANALYST    7566    1987/4/19    3000.00        20
9    7839    KING    PRESIDENT        1981/11/17    5000.00        10
10    7844    TURNER    SALESMAN    7698    1981/9/8    1500.00    0.00    30
11    7876    ADAMS    CLERK    7788    1987/5/23    1100.00        20
12    7900    JAMES    CLERK    7698    1981/12/3    950.00        30
13    7902    FORD    ANALYST    7566    1981/12/3    3000.00        20
14    7934    MILLER    CLERK    7782    1982/1/23    1300.00        10

6. /*去重*/

select distinct ename ,job from emp;

 

 

 

7. --- 查询员工年薪 = 月薪*12

 

 8.

 

select sal*12 +comm from emp;

 

 

9 nvl

select sal*12 + nvl(comm,0) from  emp;

 

 

10. /* 字符串拼接java: + 号拼接oracle特有的连接符 : || 拼接
在oracle 中,双引号主要是别名的时候使用,单引号是使用的只,是
字符

mysql 用 concat(str1,str2)函数,mysql 和oracle中都有

*/

select '姓名:' || ename  姓名 from emp;

 

 

select concat('姓名',ename ) from emp;

 

 

11.
/*条件查询:{where 后面的写法}
关系运算符: >>= = < <= !=  <>
逻辑运算符 and or not
其他运算符  like 模糊查询
            in(set)在摸个集合内
            between ...and... 在某个区间内
            is not null 判断是否为空.
         */   
      ---查询每月能得到奖金的员工信息.
     

select * from emp where comm is not null;

 

 

 

 

---查询工资在1500---3000之间的员工信息.

 

 select *from emp where sal between 1500 and 3000;
select *from emp where sal>= 1500 and sal<=3000;

  ---查询名字在摸个范围的员工信息('jones','scott','ford')in

 select  * from emp where ename in ('jones','scott','ford')

 

 

 

 

 

   /* 模糊查询like    % 匹配多个字符    _ 匹配单个字符串.      */

   ---查询员工姓名第三个字母是o的员工信息.

 

  select * from emp where ename like '__o%';



 

 

   ---查询员工信息姓名中,包含% 的员工信息.

 

  update emp set ename ='TUR%NER' where ename ='TURNER';
  SELECT * FROM EMP WHERE ENAME LIKE '%%%'

  ---以上语法有问题,需要进行转义.

  select * from emp where ename like '%\%%' escape '\'; 

 ---escape告诉系统这个是转义字符.

 

 

 

 

 

  /*
 排序 : order by
    升序: asc ascend
    降序: desc decend
    
    */
---查询信息,按照奖金由高到底排序

 

select * from emp  order by comm desc ;
 

select * from emp  order by comm desc nulls last ;

 

 ---排序注意空值问题,nulls last 最后排序

.---查询工资和部门编号,按照部门升序排序,工资降序排序.

select ename ,deptno, sal from emp order by deptno asc,sal desc;

 

 

 

 

 

函数

/* 函数: 必须有返回值
 单行函数 : 对某一行的某个值进行处理
        数值函数
        字符函数
        日期函数
        
 多行函数: 对某一列的所有行进行处理
 
max() min count sum avg
*/

 ---统计员工工资总和

 

select  sum(sal) from emp ;

 

 

 

 

 

---统计奖金总和

select sum(comm) from emp;

 

 ----统计员工人数 

 select count(1) from emp;

 

 

---统计员工的平均奖金

 

select avg(comm) from emp;---错误

select sum(comm)/count(1) from emp;
select ceil(sum(comm)/count(1)) from emp;

 

---数值函数

select ceil(45.323) from  dual; --46 向上取正

select floor(45.926) from dual; --45 向下取正
-

--四舍五入
select round (45.926,2) from dual; ---45.93


---求余
select mod(9,3) from dual ; --0

--字符函数substr(str1, 起始索引,长度)
select substr('abcdefg',0,3) from dual;--abc



---获取字符串的长度 
select length('abcdf') from dual;


select trim('  hello ') from dual;  ---hello

 

---日期函数

select sysdate from dual;

select  add_months(sysdate,3) from dual;---三个月后的今天

select sysdate +3 from dual; --三天后的日期

select sysdate - hiredate from emp;

---入职天数
select ceil(sysdate - hiredate ) from emp; 


---入职的周数

select (sysdate - hiredate)/7 from emp;


---入职月份,月数.

select months_between( sysdate,hiredate) from emp;


---入职年数

select months_between( sysdate ,hiredate )/12 from emp;

---字符转数值 to number(str)

select 100+'10'  from dual;

 

--数值转字符

select to_char(sal,'$9,999.9') from emp;

--日期转字符 to_char()

select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') from dual;
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;---24小时制


select  to_char(sysdate,'yyyy') from dual;--2020


select to_char(sysdate,'d') from dual; --7  --代表一个星期中的第几天.
select to_char(sysdate,'dd') from dual;--03 --代表一个月中的第几天
select to_char(sysdate,'ddd') from dual; --277 代表一年中的第几天




select to_char(sysdate,'day') from dual; ---星期六 ,获取星期.

select to_char(sysdate,'dy') from dual; ---星期的简写.

---字符转日期

select to_date('2020-09-30', 'yyyy-mm-dd' ) from dual;

--查询1981年 --1985年入职的员工
select * from emp where hiredate between to_date('1981','yyyy') and  to_date('1985','yyyy');

--通用函数

 


/*
通用函数
nvl(参数1,参数2) 如果参数1 =null ,就返回参数2的值.
nvl2(参数1,参数2,参数3) 如果参数1 =null ,就返回参数3,否则返回参数2.

nullif(参数1,参数2) 如果参数1 =参数2,那么返回null,否则返回1

coalesce : 返回第一个不为null的函数

*/

select nvl2(null,5,6) from dual; ---6 

select nvl2(1,5,6) from dual;---5

select  nullif (5,5) from dual;--null

select nullif (5,6) from dual; ---5

 
select coalesce(null, 3,5,6) from dual; --3

--条件表达式



/* 条件表达式

case 字段:
     when 值1 then 值
       when 值2 then  值
         else
           默认值
          end
          
          case ..when 通用写法 mysql 和oracle都可以使用.
          
          orcle 特有的写法: decode(字段,if1 ,then1,if2 ,then2,if3,then3 ,else)
          */                             

 

--给表中姓名取一个中文名.

select 
          case ename 
               when 'SMITH' then '史密斯'
                 when 'ALLEN' then '艾伦'
                   else '路人甲'
           end  "中文名"
           
           
from emp;

 

 

select decode(ename,'SMITH' ,'史密斯', 'ALLEN' ,'艾伦' ,'路人乙') from  emp;

 

 

select  deptno,  avg(sal) from emp group by deptno;
select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') from dual;
select sum(comm)/count(1) from emp;
select * from tab;

 

 

 

 

 

posted @ 2020-10-03 17:44  萌哥-爱学习  阅读(130)  评论(0编辑  收藏  举报