oracle 视频笔记整理(1)

更改用户:解锁scott 用户 用户名:scott 密码:tiger
    

alter user scott account unlock;

 

显示表结构

desc emp

显示当前时间

select sysdate from dual

别名

select sal*12  annual_sal from emp 

 

注意:select sal*12  "年薪" from emp :如果是特殊字符,要加双引号

         任何含有空值的数学表达式结果都是空值。nvl函数

         select ename||sal annual_sal from emp (字符串联系符:“||”)

         sql语句中,用单引号''来表示字符串,如果本身里面存在单引号,就用两个单引号代替一个单引号

         distinct:删掉重复字段,或重复字段组合

          in ;not in;and or = > < <> between and

模糊查询:   like; not like       %   0 个或多个字符
                                             -   一个字母
                                            大小写敏感 转义字符 \   
                                            escape * 定义转义字符
排序:orderby asc(升序)默认 desc(降序)可以两个一起用


常用的sql函数:

 

单行函数:

lower:转换成小写   select lower(ename)form emp;
upper:转换成大写
substring(ename,起始字符从1开始,共截的字符长度):截子字符串
chr(65)a:将ASCII码转换成字符
round(23.65,2):第二个参数指定小数点位数,如果没有的话,则取整
to_char(18000,'$999,999.9999'):定义数字显示的格式,一个9代表以为数字,如果没有该位则不显示,

但小数点后会显示$18,000.0000   
to_char(18000,'$000,000.0000') :没有的位数用0补齐
to_char(hiredate,'YYYY-MM-DD HH24-MI-SS'):定义显示日期格式
to_date('2008-2-1','YYYY-MM-DD HH24-MI-SS'):日期格式做比较时,要转换格式
to_number(字符串,'$999,999,9999');数字格式
nvl:select nvl(comm)form emp:如果是null的话,用0替代

组函数:

max min avg sum;最大,最小,平均,求和  count(*)

select max(sal),min(sal),avg(sal),to_char(sum(sal),'000,000,000.0000') from emp

group by: 9个结果,3个dept 3个jbo 9中组合

select avg(sal),deptno,job from emp group by deptno,job

having:where语句对单条数据进行过滤,having对组合条件进行过滤 
       

select avg(sal),deptno,job from emp where deptno=20 group by deptno,job having avg (sal)>1000 

 

表连接子查询:
     两个表连接:join on:

                   

 select ename,sal from emp e join(select max(sal) msal,deptno from     

                       emp group by deptno) t  on(e.sal=t.msal and e.deptno=t.deptno)   

        

      
     
     同表连接: 

      

select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno

 

     三个表连接:

     

select ename,dname,grade from emp 
                 join dept on(emp.deptno=dept.deptno)
                 join salgrade on(emp.sal between salgrade.losal and salgrade.hisal)//判断出是  

                 属于哪一等级的
                 where ename not like '_A%'

 

     外连接:    left(right) join 把左(右)边那张表多余的数据拿出来     full join 左右多余的都拿出来

 

select ename,dname from emp right join dept on(emp.deptno=dept.deptno)

 
             

求部门平均薪水等级

select deptno,avg_sal,grade from (select deptno,avg(sal) avg_sal from emp 

group by deptno) join salgrade on(avg_sal  between salgrade.losal and salgrade.hisal)

 

 

求部门薪水的平均等级

select deptno,avg(grade)from(select ename,deptno,grade from emp join 

salgrade on (emp.sal between salgrade.losal and salgrade.hisal ))group by deptno

 

求平均薪水最高的部门编号:

select dname from dept where deptno=(
  select deptno from 
     (select deptno,avg(sal) avgsal from emp group by deptno)//选出平均值等于最大平均值的部门号
       where avgsal=
      (select max(avgsal) from
         (select avg(sal) avgsal,deptno from emp group by deptno)//选出最大的薪水的平均值
  )
)

 

创建视图:

连接到系统用户:

conn sys/orcl as sysdba;

 

副权限:

  grant create table ,create view to scott;

 

create view v$dept_avg_sal as 
   select deptno,grade,avg_sal from
         (select deptno,avg(sal) avg_sal from emp group by   deptno) t
          join salgrade s on(t.avg_sal between s.losal and s.hisal)

 


 

你可能感兴趣的:(数据结构,oracle,sql)