Oracle
来源:互联网 发布:php 获取共享文件 编辑:程序博客网 时间:2024/06/06 23:08
oracle11g oracle12c
oracle数据库服务器由二部份组成:实例(看不见),数据库(*.DBF文件中)。
只能通过实例去操作数据库!!!
\oracleDB\oradata\目录下,有多少个文件夹,就有多少个数据库;存储的所有数据库,最终都会存放在对应库的*.DBF文件中,以二进制压缩形式存放
安装oracle时,已经创建好了一个数据库,默认名叫orcl
dual:哑表或者伪表,利用它设置序列、调用函数。
oracle中综合语法:
1)select子句-----必须
2)from子句-------必须,不知写什么表了,就写dual
3)where子句------可选
4)group by子句---可选
5)having子句-----可选
6)order by 子句--可选,如果出现列名,别名,表达式,字段
SQL语句
SQL92/【99】:访问任何关系型数据库的标准
SQL语句:
1.在任何的关系型数据库中都可以直接执行;2.关健字不能简写;3.提倡大写;4.能够对表数据进行增删改查操作;5.以分号结束;6.通常称做语句。
oracleSQL语言:只访问Oracle数据库服务器的专用语言
连接工具
sqlplus:oracle11g自带的一个客户端黑屏界面工具,可以连接到某个数据库的实例
SQLPLUS命令:是SQLPLUS工具中特有的语句:
1.在该工具中执行的命令叫SQLPLUS命令;2.关健字可以简写;3.提倡大写;4.不能够对表数据进行增删改查操作,只能完成显示格式控制;5.可以不用分号结束;6.通常称做命令。
sqldeveloper:oracle11g自带的一个客户端彩屏界面工具,可以连接到某个数据库的实例
第三方的客户端工具
使用
超级管理员身份:超级用户名sys,角色dba
解锁普通用户scott / hr:
解锁用户:alter user scott/hr account unlock;
设置密码tiger:alter user scott/hr identified by tiger;
超级管管理员角色进入:sqlplus / as sysdba
普通用户进入:sqlplus scott/tiger
修改新密码password
use 数据库名
查询当前用户是谁:show user;
查询用户下的所有对象:select * from tab;
设置显示的列宽
字符型varchar2、日期型date:column 字段 format a12; -- 设置字段显示12个宽度位
数值型number:column 字段 format 9999; -- 设置字段显示4个数字位宽
设置显示的高度:set pagesize 80; -- 页显示80条记录
执行最近一次的SQL语句:/
查询emp表的结构:desc emp;
指定别名: select 字段1 as "别名" from 表; --AS大小写都可且可以省略AS,别名用双引号,不加双引号的别名不能有空格;加了双引号的别名可以有空格
在sqlplus客户端工具中,是不显示null这个值,使用NVL()函数:NVL(a,b) --如果a是NULL,用b替代
使用字符串连接符号:select 'hello' || ' world' "结果" from dual; --输出hello world,单引号是字符串型或日期型
系统当前时间:select sysdate from dual;
保存SQL语句到硬盘:
spoole:/oracle-1.sql;
sql语句;
spool off;
将硬盘文件e:/oracle-1.sql,读到orcl实例中并执行:
@ e:/oracle-1.sql;
函数:
单行函数:一个参数输入,一个结果输出
lower(),upper(),concat(),substr(),length/lengthb(),instr/lpad/rpad(),trim/replace(),round/trunc/mod(),months_between(),add_months(),next_day()
多行/分组 函数:多个参数输入,一个结果输出
count/sum/avg/max/min
NVL2(a,b,c)通用函数,如果a不为NULL,取b值,否则取c值
NULLIF(a,b)通用函数,在类型一致的情况下,如果a与b相同,返回NULL,否则返回a
decode()函数:decode(字段,条件1,表达式1,条件2,表达式2,...表达式n)
等价于sql99的case ···
case 字段
when 条件1 then 表达式1
when 条件2 then 表达式2
else 表达式n
end
多表查询:
理论基础:笛卡尔集表=列数之和,行数之积
1.内连接【只能查询出符合条件的记录】:等值连接(只能使用=号);非等值连接(不能使用=号,其它符号可以,例如:>=,<=,<>,betwen and等)
2.外连接查询【既能查询出符合条件的记录,也能根据一方强行将另一个方查询出来】
(+) 哪张表少加在那张
左外连接【左表数据全部保留】:
select dept.deptno "部门号",dept.dname "部门名",count(emp.empno) "人数"
from dept,emp
where dept.deptno = emp.deptno(+)
group by dept.deptno,dept.dname;
3.自连接【将一张表,通过别名看作两张表内/外连接】
集合查询:
并集运算
union:二个集合中,如果都有相同的,取其一
union all:二个集合中,如果都有相同的,都取
交集运算[intersect]
差集运算[minus]
使用set time/timing on,打开时间的开关set time on;set time off;
使用set tim/timing off,关闭时间的开关set timing on;set timint off;
集合查询的细节:
1)集合操作时,必须确保集合列数是相等
2)集合操作时,必须确保集合列类型对应相同
3)A union B union C = C union B union A
4)当多个集合操作时,结果的列名由第一个集合列名决定
oracle分页 :rownum
1)rownum是oracle专用的关健字
2)rownum与表在一起,表亡它亡,表在它在
3)rownum在默认情况下,从表中是查不出来的
4)只有在select子句中,明确写出rownum才能显示出来
5)rownum是number类型,且唯一连续
6)rownum最小值是1,最大值与你的记录条数相同
7)rownum也能参与关系运算
* rownum = 1 有值
* rownum < 5 有值
* rownum <=5 有值
* rownum > 2 无值
* rownum >=2 无值
* rownum <>2 有值 与 rownum < 2 相同
* rownum = 2 无值
8)基于rownum的特性,我们通常rownum只用于<或<=关系运算 。用别名代替做>运算
oracle中三大类型
字符串varchar2,数字number,日期date
隐式数据类型转换
(1)varchar2变长/char定长 --> number。 例如:'123'->123
(2)varchar2/char --> date。 例如:'25-4月-15'->'25-4月-15'
(3)number ---> varchar2/char。 例如:123->'123'
(4)date ----> varchar2/char。 例如:'25-4月-15'->'25-4月-15'
隐式转换注意:
1)=号二边的类型是否相同
2)如果=号二边的类型不同,尝试的去做转换
3)在转换时,要确保合法合理,否则转换会失败,例如:12月不会有32天,一年中不会有13月
显式转换:
将数字/日期转成字符串:to_char(数值/日期,'格式yyyy mm dd $ L "常量"' )函数
将字符串转成日期:to_date('字符串','格式')函数
将字符串转成数字:to_number('字符串')函数
创建表和约束
使用oracleSQL,创建用户表users(id整型/name字符串/birthday日期/sal整型,默认今天)
create table users(
id number(5) primary key,
name varchar2(8) not null unique,
sal number(6,2) not null,
birthday date default sysdate
);
进入回收站
drop table users;
查询回收站中的对象
show recyclebin;
闪回,即将回收站还原
flashback table 表名 to before drop;
flashback table 表名 to before drop rename to 新表名;
彻底删除users表
drop table users purge;
清空回收站
purge recyclebin;
(1)number(5):5表示最多存99999
(2)number(6,2):6表示小数+整数不多于6位。2表示最多显示2位小数,采用四舍五入,不足位数补0,同时要设置col ... for ...
(3)varchar2(8):8表示字节
(4)date:默认格式为:'27-月-15'
(5)CLOB【Character Large OBject】:大文本对象,即超过65565字节的数据对象,最多存储4G
(6)BLOB【Binary Large OBject】:大二进制对象,即图片,音频,视频,最多存储4G
修改表
为emp表增加image列,alter table 表名 add 列名 类型(宽度)
alter table emp
add image blob;
修改ename列的长度为20个字节,alter table 表名 modify 列名 类型(宽度)
alter table emp
modify ename varchar2(20);
删除image列,alter table 表名 drop column 列名
alter table emp
drop column image;
重名列名ename为username,alter table 表名 rename column 原列名 to 新列名
alter table emp
rename column ename to username;
将emp表重命名emps,rename 原表名 to 新表名
rename emp to emps;
注意:修改表时,不会影响表中原有的数据
修改表不可回滚
- Oracle???
- oracle
- oracle
- oracle
- oracle
- oracle...
- oracle
- oracle
- ORACLE
- Oracle
- ORACLE
- Oracle
- Oracle
- oracle
- oracle
- oracle
- ORACLE
- oracle
- javascript
- 作业
- Python数据结构之单链表
- 【Pyhton爬虫一】requests与BeautifulSoup
- 算法的基本特征
- Oracle
- javaScript收藏的一些语句
- CodeForces
- JAVA_HOME环境变量失效的解决办法
- MyBatis传入参数为list、数组、map写法
- SQL语句 对表的某一个字段进行排重 查询
- 裴蜀定理详解+例题: BZOJ 1441 MIN
- 鼠标悬停图标
- 【oracle】使用EXPDP和IMPDP数据泵进行导出导入的方法