oracle基础知识点,和小小的心得领会

1.数据库 database

2.主键 ,表的唯一性标识的一列,主键的值永远不能重。primary key

主键的类型:单一主键:一列构成的;复合主键:多个列组合起来充当主键。多采用流水号,单一列当做主键

3.三大规则 :实体完整性约束:主键  :PK

      参照完整性约束:外键 :A表的主键出现在B表,在B中就被成为外键,简称FK,此时A为主表,B从表

从表外键的值需要参照主表主键进行填充,或者从表外键的值为空,如果外键的值在主建中不存在,禁止填充

      自定义约束:唯一性约束 unique(对NULL无效,可以有多个NULL),

            空值约束 not null

            默认值约束 default(对NULL无效,可以录入NULL)

            检查约束 check(列名=''or列名='')(对null无效)

4. 存储字符串: Varchar2(长度 char)长度个汉字的长度

           Varcher2(长度)

  存储数字 NUMBER(n) 

  存储日期 DATE  

      DATE(N)错误书写

5.创建一个表的语法

      create table 表名(列名1 类型 primary key not null,

                列名2 类型 not null,

                列名3 类型 not null) ; (注意最后一个没有逗号)

插入数据到表中

      insert into 表名(列名1,列名2,列名3)

      values(列值1,列值2,列值3)列值的类型必须是列名的类型

查询语句的书写

      select 列名1,列名2,列名3 B(可以给列名起别名用于显示:

                      列别名需要加双引号的三种情况:1)区分大小写

                                     2)有空格

                                    3)特殊字符),B.列名

      from 表名 A(给表起别名A,然后在select中可以写A.列名),

        表名B(可以多表一起查询)(做多表连接的时候表的书写顺序,从表在前,主表在后,)

      where 条件语句 (先写筛选条件,后写连接)

      (where 可以做嵌套查询把另一个查询出来的结果作为筛选条件,但是不建议用,性能太差,一般把  select查询出来的作为from的一个虚拟表进行处理)

       order by asc 列名(正序)or desc 列名(逆序) 排序输出结果(order by 中 null最大)

改写语句

      update 表名 set 列值 (新)where 条件  满足什么条件就修改

删除语句 

      delete from 表名  整张表的数据删除  

      delete from 表名 where 条件语句  有条件的删除数据

在表空间:

1.表空间与分用户管理

分用户管理在实现上有两种方式

方式1:物理隔离

每个用户的所有数据都存储到独立的表空间中,该表空间只装载该用户的所有表,这样一个用户的表空间发生问题,对其他用户没有影响

方式2:逻辑隔离

表归属用户所有,但是所有用户的表共用一个表空间

2.表空间(TABLESPACE)

就是表的容器,实际上就是一堆数据文件的集合,用户表中的数据,实际上存储到表空间的指定文件中.

表空间的分类:

临时表空间-----做交换分区

永久表空间------用以存储数据  

删除表有两个:

    drop:可恢复

    ttruncate(数据截断)    :不可恢复  在oracle中有一个数据回滚,truncate就是绕过这个数据回滚,而drop可以回滚就恢复刚刚 删除的数据。

oracle数据库中的时间date:sysdate 就可以从表中获取 :select sysdate from dual;

字符串与日期之间的转换:to_date('1997-08-08','YYYY-MM-DD')

            to_char(sysdate,'YYYY-MM-DD HH25:MI:SS' )

时间的运算按天

多表关联查询中,表之间的构型

一主多从

一从多主

单线连珠

自连接一个表和自己建立连接,把自己虚拟成另一张表就可以连接啦

比如查询scott 下 emp 中 每个职员的管理者

SELECT A.EMPNO,A.ENAME,A.JOB,A.MGR,B.ENAME
  FROM EMP A,EMP B
 WHERE A.MGR=B.EMPNO

内连接(等值连接):

  只显示满足连接条件的数据,不满足的不显示;应用语境:应用于过去和现在,对既成事实的查询

外连接:以某一张表为基础,该表中的所有数据都显示,对应的从表,如果存在数据,则显示数据,如果不存在数据就显示NULL:对将来,全部的概念。

在Oracle中的语法:从表外键加(+);

比如查询scott下表emp所有人的管理者;

SELECT A.EMPNO,A.ENAME,A.MGR,B.EMPNO,B.ENAME
  FROM EMP A,EMP B
 WHERE A.MGR=B.EMPNO(+)

对未来尚未实现的梦想进行查询外连接去反就可以实现:就是取从表相应列为null,该部分数据表位将来时

查询将来可能被管理的人 

SELECT A.EMPNO,A.ENAME,A.MGR,B.EMPNO,B.ENAME
  FROM EMP A,EMP B
 WHERE A.MGR=B.EMPNO(+)
 AND B.EMPNO IS NULL

这个例子可能不恰当,但是用法就这样

前面提到的排序 order by asc 正序 desc 倒叙也叫降序

多字段排序:依据字段分组,组内一字段一排序

分组统计函数 :

  min 求最小值

  max  求最大值(max min count可以对任意数据类型列取值)

  avg 求平均值(avg 与 sum 只能对数值类型列取值)

  sum 求和

  count 计算满足条件的记录数(自动忽略null值)

    count(列)只统计非空值,此列上所有不为null的参与计数

    count(*) 只要有一列不为空即可

    count五大统计函数中 具有筛选功能,

    用了聚合函数count,写在select中还有其他列名要查,就得进行聚合分组group by ,select出现的都得写在group by中。group by 子句中不能使用别的列别名进行分组,也不可以有子查询,可以有having子句。

sql语句的执行顺序

  1 from 获取数据

  2 where 筛选数据

  3.group by 聚合分组

  4.聚合函数运算

  5.having条件语句

  6.select 查询需要的列

  7 distinct 删除重复数据

  8 .order by 排序想要的数据

decode函数

  就是给字符表示的汉字意思显示出来。比如存入数据库 状态一栏信息,1代表活着.2代表死了

查询出来 1 或者2 别人看不懂我们就可以用 decode函数实现 decode(表名.列名,'1','活着')这样如果是1就显示活着、

substr 函数

  用来 截取字符串 substr(‘abcdefg’,2,3)从第二个开始截取三个字符‘bcd’,如果2改成-2则顺序颠倒,如果3改成100截取到最后一个位置‘bcdefg’。

rowid:

  这是两个伪列;行的物理地址,以最快的速度,检索或者删除满足条件的记录

这个用到嵌套查询 我们查出要删除的重复数据的最大rowid然后把前边的我们不需要的全部删除

rownum:

  查询结果集中,每行的记录的行号。一般用于top-n分析;在select中直接加上rownum就会给查询出来的数据每行加上一个序号;然后可以在where条件中写 rownum<3  就可以获取前两行的数据。< 与!=一个意思,<=小于等于

大多数人说:rownum用来做分页查询:

在这我了解到rownum用来做top-n分析。就是对前几名的数据的获取,先是查询出来用某一列用order by排序作为虚拟表用rownum选择我们要的前几名然后在可以用一个order by 语句来选择我们想要的顺序输出,注意用什么来排序必须在上述的select 虚拟表中查出来的。

序列 

create sequence 序列名  :用来产生一个递增的值,但不保证连续 

删除 drop sequence 序列名

索引

作用:有助于提高查询效率

创建时机:一般在系统上上线运行半年,基于优化性能角度考量,将用户经常使用的查询条件列创建索引。

自动索引,oracle中存在主键索引和唯一约束索引

创建索引的语句create index 索引名 on 表名(列名,列名)可以一列 为单一索引可以多列复合索引

删除索引 是drop index 索引名

视图

view 创建视图 语句 create view 视图名字 as select 查询出来的数据 相当于一个虚拟表 真正项目中不会用到视图的 

删除语句 drop view 视图名字

视图与原始表的关系:

视图只是原始表数据的引用,视图中,没有任何数据

当查询视图的时候,相当于将创建视图时select语句再执行一次,

视图的作用:混淆原始数据,重构数据,简化查询。