-------------------------------Oracle体系结构------------------ --
数据库:database Oracle
数据库只有一个database,orcl-全局
数据库 --实例 是由一系列的进程和内存结构组成,Oracle中可以有多个实例,但是99.9%只用一个实例 --数据
文件 是存放数据的
文件 扩展名.dbf --表空间 是数据
文件的一个逻辑映射 --
用户 管理数据 select * from scott.emp ------------------重置scott
用户的密码--------
用户名:scott 密码:tiger 重置scott
用户的密码 alter user scott identified by tiger -----------------一下
内容用scott
用户---------------- --scott
用户的三张表介绍 select * from dept;--部门 deptno:部门编号 dname:部门
名称 loc:位置 select * from emp;--雇员、员工 empno:员工编号 ename:员工
名称 job:职位 mgr:上级 hiredate:雇佣日期 入职时间 sal:工资 comm:奖金 deptno:部门编号 select * from salgrade;--工资等级 grade:等级号 losal:最低工资 hisal:最高工资 ------------基本
查询------ select * from emp; --别名 select empno as "员工编号",job as 职位,hiredate "入职时间",sal 工资 from emp; /*
中文乱码问题
解决 1.查看服务器端编码 select userenv('language') from dual; 我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK 2.执行语句 select * from V$NLS_PARAMETERS 查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和第一步得到的值一样。 如果不是,需要设置环境变量. 否则PL
sql客户端使用的编码和服务器端编码不一致,插入
中文时就会出现乱码. 3.设置环境变量 计算机->
属性->高级系统设置->环境变量->新建 设置变量名:NLS_LANG,变量值:第1步查到的值, 我的是 AMERICAN_AMERICA.ZHS16GBK 4.重新启动PL
sql,插入数据正常 */ --去重 select distinct job from emp; --四则运算:加减乘除 select sal*12 from emp --字符串的连接 || concat 员工编号是XXX,姓名是XXX,职位是XXX select '员工编号是'||empno||',姓名是'||ename||',职位是'||job info from emp ---------------条件
查询-------- --等值 = > >= < <= <> != smith select * from emp where ename='SMITH'--oracle
查询 大小写敏感 --其他
查询 --in 7788 7369 7566 select * from emp where empno in(7788,7369,7566); --between ... and .. 包含临界值
查询工资大于1500并且小于3000的员工 select * from emp where sal>=1500 and sal<=3000; select * from emp where sal between 1500 and 3000; --is null
查询奖金为空的员工 select * from emp where comm is null --逻辑
查询 --or
查询职位是CLERK或者工资大于1500 select * from emp where job='CLERK' or sal>1500 --and
查询职位是CLERK并且工资大于1500 select * from emp where job='CLERK' and sal>1500 --not
查询工资不大于1500 select * from emp where sal<=1500; select * from emp where not (sal>1500); select * from emp where empno not in(7788,7566); ------------------模糊
查询------- like _ % --
查询员工姓名中第二个字母带M的 select * from emp where ename like '_M%' select * from emp where ename like '%M%' --
查询员工姓名中带_的 select * from emp where ename like '%m_%' escape 'm' select * from emp where ename like '%n_%' escape 'n' select * from emp where ename like '%2_%' escape '2' select * from emp where ename like '%8_%' escape '8' select * from emp where ename like '%@_%' escape '@' select * from emp where ename like '%!_%' escape '!' select * from emp where ename like '%__%' escape '_' select * from emp where ename like '%%_%' escape '%' select * from emp where ename like '%&_%' escape '&' -------------排序------- order by 放在
查询语句的最后面 order by 列名 asc desc --按照奖金倒序排序 --nulls last 把null值放到最后 select * from emp order by comm desc nulls last --nulls first 把null值放到最前 select * from emp order by comm nulls first -----------------------单行
函数----------------------- --字符
函数 select * from dual --伪表dual 为了配合
查询语句 --lower 转小写 select lower('ABC') from dual; select 'abc' from dual select 123 from dual select lower(ename) from emp; --concat 连接
函数 || select concat('aaa','bbb') from dual --replace 替换 select replace('aabbdd','dd','cc') from dual --substr
截取 起始位置0和1是一样 select substr('qwertyui',3) from dual;--ertyui select substr('qwertyui',3) from dual;--qwe select substr('qwertyui',1,2,3) from dual;--wer --length 长度 select length('qwertyui') from dual;--8 --数值
函数 --round 四舍五入 select round (12.34) from dual--12 select round (12.34789) from dual--12 select round (12.34789,2) from dual--12.35 select round (12.34489,2) from dual--12.34 select round (12.34489,-1) from dual--10 select round (15.34489,-1) from dual--20 select round (15.34489,-2) from dual--0 --trunc 截断 select trunc (12.34) from dual--12 select trunc (12.34789) from dual--12 select trunc (12.34789,2) from dual--12.34 select trunc (12.34489,-1) from dual--10 select trunc (15.34489,-2) from dual--0 --mod 取模 取余 select mod(10,3) from dual select mod(10,2) from dual --日期
函数 日期-日期=数值 单位:天 日期+数值=日期 每个员工截止到现在入职的天数 内置对象 sysdate 当前时间 select sysdate from dual select ename,hiredate,round(sysdate-hiredate) from emp; 每个员工截止到现在入职的周数 select ename,round((sysdate-hiredate)/7) from emp; 每个员工截止到现在入职的月数 --months_between两个日期的月份差 select ename,round(months_between(sysdate,hiredate)) from emp;
获取两个月之后的日期 --add_months N月之后的日期 select add_months(sysdate,2) from dual --转换
函数 字符 数值 日期 --to_number 字符转数值 select '123',to_number('123') from dual select '123'+'123' from dual --to_char 可以把数值和日期转成字符串 select 123,to_char(123) from dual select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),'dd'),'hh24'),'day') from dual; --to_date 把字符串转成日期
查询入职日期是1980-12-17的员工 select * from emp where hiredate =to_date ( '1980-12-17','yyyy-mm-dd') --通用
函数 --nvl 计算年薪 如果null参与计算结果恒为null select ename,sal,comm,sal*12+nvl(comm,0) from emp --decode 是oracle独有的--用来单独指定字段名 把员工的表中的job值
显示成
中文 select * from emp select ename,job,decode(job,'CLERK','店员','SALESMAN','销售员','MANAGER','经理','其他' ) from emp --表达式 语法: case 字段 when then when then else end select ename,case job when 'CLERK' then '店员' when 'MANAGER' then '经理' else '其他' end from emp ------------------多行
函数 聚合
函数 组
函数--------- -- max min avg count sum select max(sal) from emp select count(*) from emp --分组 group by 每个部门的最大工资 select deptno,max(sal) from emp group by deptno 每个部门的最大工资大于3000的 select deptno,max(sal) from emp group by deptno having max(sal)>3000 where和having where过滤的是表中的物理字段 having过滤的是组
函数计算出的结果 where用在group by之前 having用在group by之后 ---重点: 单行
函数 replace substr round to_date to_char decode 组
函数 max min avg count sum
原文链接:https://www.f2er.com/oracle/207862.html