Oracle入门

169 阅读5分钟

oracle 登录数据库端口为1158    登录地址:http://demotraining:1158/em/c

本地 命令行测试:sqlplus scott/scott

远程命令行测试:sqlplus scott/scott@192.168.56.101:1521/orcl

(注意,如果需要远程连接,当前电脑需要安装sqlplus instantclient_12_1 ,将其目录添加到环境变量,否则无法使用会会提示)sqlplus  不是命令

数据目录文件:x:\oracle\product\10.2.0\oradata\orcl

Sql类型 :

DML(data manipulation Language 数据操作语言): insert  update delete select

DDL(Data Definition Language 数据定义语言): create table,alter table,drop table,truncate table

DCL(Data Control Language 数据控制语言): grant(授权) revoke(撤销权限)

·

常用命令:

host cls清屏
show user当前用户
select * from tab;当前用户下的表
desc emp查询表结构
show linesize 和 linesize 80  和 set linesize 150设置行宽
col ename for a8   和  col sal for 9999–设置列宽
set pagesize 20设置命令行每页的大小
c /form/from修改语句错误
as列别名(注意 没有引号和引号的区别)
字符串连接 select ename ‘的信息是’sal from emp;
set NLS_DATE_FORMAT修改日期格式alter system set NLS_DATE_FORMAT=‘yyyy-mm-dd’;(范围可以是当前会话,也可以是系统)
转义符 \like ‘%\_%’ escape ‘\’  escape (指定转义符,转移符可以是其他的) 例如:like ‘%a_%’ escape ‘a’;
&地址符     INSERT  INTO ADDR VALUES (‘&ID’,‘&NAME’);
select * from v$nls_parameters;查看系统格式
set feedback off关闭执行状态行信息
set timing on打开执行时间
rollback to savepoint a回滚到指定的保存点
set transaction read only设置事务为只读
show recyclebin        purge recyclebin;Oracle的回收站     清空回收站
flashback table TESTSAVEPOINT to before drop;删除已经恢复的表 (闪回删除)
create synonym myemp for emp给表创建别名
exp   imp数据导入 & 导出   增强  expdp   impdp
nulls last将空值的数据放到最后,一般跟在 desc 后面
alter table “TABLE_NAME ”shrink space;碎片整理
col error显示错误

单行函数的使用:

image.png

  1. 字符串函数
  • concat
  • substr
  • length /lengthb
  • instr
  • lpad / rpad
  • trim(替换指定位置)
  • replace
  • lower
  • upper
  • initcap
upperselect upper(‘wwww’) from dual;小写转大写
lowerselect lower(‘WWWW’) from dual;大写转小写
substrselect substr(‘hello’,3) from dual;字符串截取
instrselect instr(‘hello’,‘o’) from dual;返回指定字符存在的位置(从1开始)
lengthselect length(‘Hello World’) from dual;字符数
lengthbselect lengthb(‘Hello World’) from dual;字节数
length 与 lengthb 区别 (中文,后者一个占2个字节)
lpadselect lpad(‘hello’,10,‘*’)from dual;左填充(数字10 表示补充满10位)
rpadselect rpad(‘hello’,10,‘*’)from dual;右填充(数字10 表示补充满10位)
trimselect trim(‘H’ from ‘Hello WorldH’) from dual;去掉前后指定的字符
replace
concatselect concat(‘Hello’,‘World’) from dual;拼接字符串
  1. 数值函数
  • round (四舍五入)
  • trunc (截断)
  • mod (求于)
round。。四舍五入
trunc截断
mod。。取余

image.png

日期函数

  • sysdate
  • months_between
  • add_months
  • next_day
  • last_day
  • round
  • trunc
sysdateselect sysdate from dual;当前系统时间
months_betweenselect  months_between(sysdate,hiredate) from emp;返回两个日期之间的月份数。
add_monthsselect add_months(sysdate,56) from dual;多少个月之后,是哪一年(负数就往当前日期前面推)
next_dayselect next_day(sysdate,‘星期日’) from dual;表示大下个星期的那一天(返回一个日期);
next_day的应用:每个星期一自动备份数据1. 分布式数据库 2. 快照 触发器
last_dayselect last_day(sysdate) from dual;最后一个

通用函数

  • nvl
  • nvl2
  • nullif
  • coalesce
nvlnvl(col,0)滤空函数
nvl2select sal*12+nvl2(comm,comm,0) from emp;如果第一个值不为null返回第二个,如果为空返回第三个值
nullifselect nullif(‘abc’,‘ac’) 值 from dual;当a=b的时候,返回null;否则返回a
coalesceselect comm,sal,coalesce(comm,sal) “第一个不为null的值”从左到右找到第一个不为null的值

转换函数

  • 隐式

  • 显式

  • to_number

  • to_date

  • to_cahr

to_cahrselect to_char(sysdate,‘yyyy-mm-dd / hh24:mi:ss’) from dual;将日期转换为str
to_dateselect to_date(‘2015-11-22 / 22:56:22’,‘yyyy-mm-dd / hh24:mi:ss’) from dual;将str 转换为日期(相反)


组函数

image.png

avg
count
max
min
sum

If  else   繁琐(sql99语法)

SQL> select ename,job,sal 涨前,

2         case job when ‘PRESIDENT’ then sal+1000

3                  when ‘MANAGER’ then sal+800

4                  else sal+400

5          end 涨后

6  from emp;

Oracle 自己的语法

SQL> select ename,job,sal 涨前,

2         decode(job,‘PRESIDENT’,sal+1000,

3                    ‘MANAGER’,sal+800,

4                              sal+400) 涨后

5  from emp;


select count(\*) Total,

        sum( decode(to\_char(hiredate,'yyyy'),'1980',1,0)) "1980",

       sum( decode(to\_char(hiredate,'yyyy'),'1981',1,0)) "1981",

      sum( decode(to\_char(hiredate,'yyyy'),'1982',1,0)) "1982",
    sum( decode(to\_char(hiredate,'yyyy'),'1987',1,0)) "1987"

from emp;


image.png

优化(数据库的优化):

  • 尽量使用列名,能不用*  则不用*
  • 尽量使用where
  • 尽量使用多表查询
  • 尽量不要使用集合运算
  • where解析顺序: 右》左  尽量条件安右边;

滤空函数的使用:

image.png

使用滤空函数之后

image.png

案例:

报表:

gourp by 增强,子分组

select deptno,job,sum(sal) from emp group by rollup(deptno,job);

break on deptno skip 2

、、、break on null

连接查询等值和不等值
外链接查询
自然连接查询

image.png

image.png

自然连接查询:

–自连接不适合操作大表

–层次查询

select level,empno,ename,mgr               -----------------level 伪列 (深度)

2  from emp

3  connect by prior empno=mgr

4  start with mgr is null

5  order by 1;

image.png

集合运算符

any和集合中的任意一个值比较
all和集合中的所有值比较
union/union all并集联合查询
intersect交集
minus差集
rownum行号rownum永远按照默认的顺序生成。
top-n问题分析不能使用>怎么判断5-8之间的数据(不能使用betweent and)
ROWID行id  (有规律)AAAMfPAAEAAAAAgAAF

top-n问题解决办法(rownum):

–oracle分页(Pageing Query)

select *

from     (select rownum r,e1.*

from (select * from emp order by sal) e1

where rownum <=8

)

where r >=5;

事务的标致:

read_commited(默认);

serializable

read_only

起始标志:事务中第一条DML语句

结束标志:

提交: 显式  commit

隐式 正常退出(exit),DDL,DCL

回滚:   显式 rollback

隐式 非正常退出,掉电,宕机

授权命令
视图grant create view to scott授予scott账户创建视图的权限,必须管理员授权
授予用户查询某个表的权限

授权
image.png
image.png
image.png

原文链接 www.hanyuanhun.cn | node.hanyuanhun.cn