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)
就是表的容器,实际上就是一堆数据文件的集合,用户表中的数据,实际上存储到表空间的指定文件中.
表空间的分类:
1.临时表空间-----做交换分区
2.永久表空间------用以存储数据
删除表有两个:
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' )
时间的运算按天
多表关联查询中,表之间的构型
1.一主多从
2.一从多主
3.单线连珠
自连接 : 一个表和自己建立连接,把自己虚拟成另一张表就可以连接啦
比如查询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语句再执行一次,
视图的作用:混淆原始数据,重构数据,简化查询。