更改用户:解锁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)