### 一、体系结构
1. 数据库 : 只有一个数据库
2. 实例 : 后台运行的一个进程
3. 表空间: 逻辑存储单位
4. 数据文件: 物理存储单位
5. 用户:面向用户管理,由用户来管理表空间,用户向表空间中添加数据,最终存储到数据文件中 用户:sys 超级管理员
system:普通的管理员
```
### 二、表空间 ```
1. 创建表空间的语法
create tablespace 表空间名称
datafile '路径/xxx.dbf'
size 200M
autoextend on 开启自动扩展 / off
next 30M; 每次的扩展量
2. demo:
    create tablespace 666
datafile 'c:/666'
size 200M
autoextend on
next 30M;
3. 删除的语法
drop tablespace 表空间名称; -- 只能删除逻辑概念
drop tablespace 表空间名称 including contents and datafiles; -- 逻辑,物理同时删除
``` ### 三、用户 ```
1. 创建用户
create user 用户名 identified by 密码
default tablespace 表空间名称;
2. demo
create user rose identified by rose
default tablespace 666;
3. 权限
connect :基本权限:create session
resource :开发人员权限
dba:管理
select * from session_privs;--查询当前用户的所有权限
4. 赋予权限
grant 权限列表 to 用户列表;
5. 回收权限
revoke 权限列表 from 用户列表;
``` ### 四、表的管理 ```
1. 数据类型
字符串
char(4000): 定长字符串 , char(10) , 取出的时候,不顾的用空格补齐
varchar:变长字符串 varchar(10)
varchar2():变长字符串, 向后兼容
long : 最大存储量:2G ,使用clob取代
日期
date:mysql 中的datetime
timestamp: 时间戳类型, 精确到秒后9位
数值
number(11) : 整数
number(m,n) : 浮点数:m :总的位数 n: 小数点后的位数 555.55
大数据类型
clob: 字符大数据类型, 最大存储量 4G
blob:字节大数据类型,
2. 创建表
create table 表(
字段名 类型 约束,
....

3. 修改表
添加列
alter table 表名 add 列名 类型 约束;
alter table customer add address varchar2(200); 删除列
alter table 表名 drop column 列名;
alter table customer drop column address; 修改列属性
alter table 表名 modify 列名 类型 约束;
alter table customer modify custName varchar2(400); 重命名列名
alter table 表名 rename column 原列名 to 新列名;
alter table customer rename column custName to cname;
4. 约束
主键,外键,非空,默认,唯一,检查
create table customer(
custId number primary key ,
custName varchar2(200) not null unique,
age number default 18 check(age between 1 and 120),
sex char(2) check(sex in ('男','女'))
)
5. 事务
特性: 原子性,隔离性,一致性,持久性
隔离级别: read uncommited
read commited
repeatable read
serializable
mysql: 支持四个隔离级别, 默认的是 repeatable read
oracle: 支持的read commited, serializable, read only,默认的是:read commited
6. sql语句的分类
DCL: 数据控制语言 :grant , revoke
DQL:数据查询语言 :select
DDL:数据定义语言 : create drop , alter
DML: 数据操作语言: insert update ,delete
7. DML语句
insert into 表名 values(值,....)
insert into 表(字段,...) values(值,....)
update 表 set 字段=值, 字段=值,... where 条件
delete from 表 where 条件;
truncate table 表; -- 删除表中的所有数据, 效率极高,
8. 序列
最常用语法
create sequence 序列名;
属性: nextval : 下一个值
currval: 当前值: 必须先执行一次nextval,才能获取当前值
dual --虚表,为了完善语法结构
select c_seq.nextval from dual;
select c_seq.currval from dual;
完整的语法
create sequence 序列名
start with 1 起始值
increment by 1 自增量
maxvalue 9999 /nomaxvalue /minvalue 1 /nominvalue
cycle 循环
cache 20;
``` ### 五、scott下的表 ```
1. soctt : oracle公司的第一位程序员, pointbase
2. 默认有一个用户scott ,密码是tiger
3. 解锁:
alter user 用户名 account unlock; / lock
alter user scott account unlock;
4. 重置密码:
alter user 用户名 identified by 密码;
alter user scott identified by tiger;
5. emp ,dept ,salgrade
``` ### 六、函数(单行,多行) ```
1. 单行函数
一行记录返回一行结果
字符串函数
upper lower
select * from emp where upper(ename) like upper('%Ia%');
日期函数
两个日期相减 == 天
select sysdate - hiredate from emp
两个日期相减/7 == 周
select (sysdate - hiredate) /7 from emp
月差
select months_between(sysdate ,hiredate) from emp;
数值函数
round: 四舍五入
select round(2.777) from dual;
trunc: 截取
select trunc(2.777, 1) from dual;
mod : 模运算符
select mod(3 , 10) from dual;
通用函数
--在Oracle中空+任何数值=空
nvl(p1, p2)
select sal * 12 + nvl(comm,0),sal , comm from emp;
转换函数
to_char(p1 ,p2) 将日期转换为字符串
p1 : 将要转换的日期
p2 : 格式
to_date(p1 ,p2) 将字符串转换为日期
p1 : 将要转换的字符串
p2 : 格式 insert into emp(empno ,hiredate) values(5000,to_date('2018-8-24','yyyy-mm-dd')) select sysdate,to_char(sysdate ,'yyyy-mm-dd hh24:mi:ss day') from dual; select '2018-08-24 11:16:45 friday' ,
to_date('2018-08-24 11:16:45 friday','yyyy-mm-dd hh24:mi:ss day')
from dual;
2. 多行函数(聚合函数)
多行记录返回一行结果
select count(*) from emp;
count ,sum ,avg ,max ,min
``` ### 七、分组举例 ```
0. 分组后能查询的列
聚合函数, group by中出现列
1. 查询人数大于5的部门信息
select * from dept where deptno in
(select deptno from emp group by deptno having count(1) > 5) --select中 deptno, count(1)不能颠倒 select t.deptno ,t.num,d.dname ,d.loc
from dept d ,(select deptno,count(1) num from emp group by deptno) t
where d.deptno = t.deptno and num > 5 select e.deptno ,count(1),d.dname,d.loc
from emp e,dept d
where e.deptno = d.deptno
group by e.deptno ,d.dname,d.loc
having count(1) > 5;
``` ### 八、多表查询 ```
1. 内连接: 只能显示符合条件的记录
-- 查询员工的领导信息
select e.empno,e.ename ,m.empno ,m.ename
from emp e,emp m
where e.mgr = m.empno;
-- 在上面的基础上,查询员工的部门名称
select e.empno,e.ename,d.dname ,m.empno ,m.ename
from emp e,emp m ,dept d
where e.mgr = m.empno
and e.deptno = d.deptno;
-- 在上面的基础上,查询领导的部门名称
select e.empno,e.ename,d1.dname ,m.empno ,m.ename ,d2.dname
from emp e,emp m ,dept d1,dept d2
where e.mgr = m.empno
and e.deptno = d1.deptno
and m.deptno = d2.deptno;
-- 在上面的基础上,查询领导和员工的工资等级
select e.empno,e.ename,d1.dname,s1.grade ,m.empno ,m.ename ,d2.dname,s2.grade
from emp e,emp m ,dept d1,dept d2,salgrade s1 ,salgrade s2
where e.mgr = m.empno
and e.deptno = d1.deptno
and m.deptno = d2.deptno
and e.sal between s1.losal and s1.hisal
and m.sal between s2.losal and s2.hisal;
2. 外连接: 能显示基准表中所有的记录
左外连接: left join on
右外连接 : right join on
特殊外连接 : (+):以对方表为基准表
demo:查询员工的领导信息(没有领导也要显示)
select e.empno,e.ename ,m.empno ,m.ename
from emp e left join emp m
on e.mgr = m.empno; select e.empno,e.ename ,m.empno ,m.ename
from emp m right join emp e
on e.mgr = m.empno; select e.empno,e.ename ,m.empno ,m.ename
from emp e,emp m
where e.mgr = m.empno(+);
``` ### 九、子查询 ```
1. 什么是子查询
一个查询语句包含另一个查询语句
外查询,内查询
2. demo
-- 查询与7369工作的一致的员工
select job from emp where empno = 7698;
select * from emp where job = (select job from emp where empno = 7698);
-- 查询高于本部门平均薪水的员工
select e.ename ,e.sal ,e.deptno ,t.avgsal ,t.deptno
from emp e,(select avg(sal) avgsal,deptno from emp group by deptno) t
where e.deptno = t.deptno and e.sal > t.avgsal -- 查询存在员工的部门信息
-- 只要在员工出现过的部门编号
select * from dept where deptno in (select distinct deptno from emp);
3. 小结
返回一行一列: = > < != <>
返回多行多列: 作为表使用
返回一列多行: in =any =some
``` ### 十二、分页查询 ```
1. rownum : 伪列, 行号,从1开始,依次递增 , 在加载时生成行号
2. select rownum ,e.* from emp e;
-- 查询前三条记录
select rownum ,e.* from emp e where rownum <= 3
-- 查询4 - 6 条记录
select rownum ,e.* from emp e where rownum between 4 and 6;
先生成行号,作为表,再条件筛选
select t.*
from (select rownum rn,e.* from emp e) t
where t.rn between 4 and 6;
-- 查询工资最高的前三名 nulls last nulls first
先排序,取前三名
select t.*,rownum from (select e.* from emp e order by sal desc)t
where rownum <= 3;
-- 查询工资较高的4-6名
select m.*
from (select t.*,rownum rn from (select e.* from emp e order by sal desc)t) m
where m.rn between 4 and 6;
```

oracle入门(一)的更多相关文章

  1. Oracle入门4-REF Cursor

    Oracle入门4-REF Cursor 转自:http://blog.sina.com.cn/s/blog_55dbebb00100gxsc.html 自:http://blog.csdn.net/ ...

  2. Oracle入门

    一.Oracle数据库简介 Oracle数据库的主要特点 :支持多用户.大事务量的事务处理:数据安全性和完整性控制:支持分布式数据处理:可移植性. Oracle数据库基于客户端/服务器技术:数据库服务 ...

  3. oracle入门必备

    //................创建表空间 \  赋予角色  \ 创建数据表  \  插入数据  \  创建序列  \ 添加注释   ........................... --创 ...

  4. Oracle入门学习笔记

    参考文献 中文教程     http://wenku.baidu.com/view/b425f404e87101f69e319566.html 经典教程     http://wenku.baidu. ...

  5. Oracle入门《Oracle介绍》第一章1-3 Oracle 逻辑组件

    一.数据库的逻辑结构是从逻辑的角度分析数据库的组成.Oracle 的逻辑组件包括: 1.表空间 表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统 ...

  6. Oracle入门知识

    在客户端里PL/sql里面 记得用commint 回滚 所写得SQL语句才真的有效  如插入7千万个数据 没有执行commint 就等于没有 将数据真正的存入数据库服务器里面去 所以当其他前端链接上 ...

  7. oracle入门之分页查询

    oracle的分页查询共三种方法 1.根据ROWID来分页(速率一般) SQL>select * from emp where rowid in (select rid from (select ...

  8. oracle入门之对表数据查询(三)

    oracle表复杂查询--子查询 什么是子查询? 子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询. 单行子查询 单行子查询是指只返回一行数据的子查询语句. 请思考:如果显示与smit ...

  9. oracle入门之对表数据查询(二)

    oracle表复杂查询 在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据,现在我们给大家介绍较为复杂的select语句 数据分组-max,min,avg,sum,count 如何显示所 ...

  10. oracle入门之对表数据查询(一)

    此文中用到的表是Scott用户中自带的三张表: 基本select语句 基本语法: select [distinct] *|{columnl,column2,column3..} from table ...

随机推荐

  1. JavaScript常用类

    JS常用类 一.Number 1.常用数字 整数:10 小数:3.14 科学计数法:1e5 | 1e-5 正负无穷:Infinity | -Infinity 2.常用进制 二进制:0b1010 八进制 ...

  2. 11.1NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 50\) 实际得分:\(100 + 100 + 50\) 感觉老师找的题有点水呀. 上来看T1,woc?裸的等比数列求和?然而我不会公式呀..感觉要凉 ...

  3. 洛谷P1081 开车旅行(倍增)

    题意 题目链接 Sol 咕了一年的题解.. 并不算是很难,只是代码有点毒瘤 \(f[i][j]\)表示从\(i\)号节点出发走了\(2^j\)轮后总的距离 \(da[i][j]\)同理表示\(a\)的 ...

  4. var a =10 与 a = 10的区别

    学习文章------汤姆大叔-变量对象 总结笔记 变量特点: ①变量声明可以存储在变量对象中.②变量不能直接用delete删除. var a =10 与 a = 10的区别: ①a = 10只是为全局 ...

  5. Python入门-生成器和生成器表达式

    昨天我们说了迭代器,那么和今天说的生成器是什么关系呢? 一.生成器 什么是生成器?说白了生成器的本质就是迭代器. 在Python中中有三种方式来获取生成器. 1.通过生成器函数 2.通过各种推导式来实 ...

  6. 转动的八卦图纯css实现

      这类的东西网上一搜就是大把的,看着比较空旷的博客,所以自己也来写一个. <!DOCTYPE html> <html> <head> <meta chars ...

  7. Linux基础之-利用shell脚本实现自动监控系统服务

    目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件: 1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命 ...

  8. Storm Flow

    A Stream represents the core data model in Trident, and can be thought of as a "stream" of ...

  9. 升级CocoaPod遇到ERROR: While executing gem ... (TypeError) no implicit conversion of nil into String问题的解决方法

    如下图: 先执行命令: gem update --system 再升级: sudo gem install cocoapods --pre 这样就能够正常升级了.

  10. svn环境搭建

    (一)svn介绍   项目管理中的版本控制问题 通常软件开发由多人协作开发,如果对代码文件.文档等没有进行版本控制,将会出现很多问题: 备份多个版本,占用磁盘空间大 解决代码冲突困难 容易引发BUG ...