oracle数据库基础知识讲解
Sql:结构查询语句,被称为”第四代计算机语言“。根据功能共分以下数据库对象
Table:表,是数据库存储的基本单元。用户的所有数据都存储在表中
View:视图,是将一个或多个表通过逻辑关系连接起来,按照需求对存储在表中的数据进行查询并显示
Sequence:序列,是数据库中生成表中唯一数字值的数据库对象。序列生成器会自动生成顺序递增的序列号,可以帮助生成唯一的主键值。可以在插入对象时作为参数传入
注:currval的第一次使用必须在nextval之后
Index:索引,是数据库中用于加速访问的一种数据库对象(具体怎么用不清楚)
Synonym:同义词,是对象的别名。在操作数据时,使用同义词可以简化对对象的查询,如果需要对一个表在同一级中多次访问,则必须通过同义词进行区分
Program unit:程序单元,包括procedure、package、function,是数据库中的一些子程序
Sql语言: Sql的语言可根据其操作的对象分为四大类
一、select语句。数据查询语言,用于检索数据库的语言,是Sql语言中最为复杂和灵活的语言
二、DML(Data ManipulationLanguage):数据操作语言,用于操作数据库中的数据。包括insert、delete、update三条语句
三、DDL(Data DefinitionLanguage):数据定义语言,用于操作数据库对象。包括create、drop、alter三条指令
注:DDL指令会自动提交事务,使用delete删除的表无法使用flashback恢复
四、DCL(Data Control Language)数据控制语言,用于操作权限,包括grant、invoke两条指令
注:DCL指令会自动提交事务
Sql命令执行顺序
From子句---à where子句---à select子句---àgroup by 子句-----à select子句---àorder by子句----àselect子句
注:Group by子句中不能使用别名
Select语句:数据查询语言
语法:select [distinct] *,column[alias],… from table;
特点:是Sql语言中最复杂、最灵活的语言
编写sql命令
1.一条sql语句可以是一行或多行,分号作为一条语句的结束
2.单词不可分割和缩写
3.大小写不敏感
4.select子句中可以指定多列,列名之间使用逗号隔开,查询结果的显示顺序与列名的排列顺序相同
列格式设置:
语法:column {column} [option]
columncol_name format|justify|clear|heading …
format可设置数据的显示格式,an可控制显示宽度为n,9或0可控制数字显示精度和格式
justify后面可跟left、right、center,设置数据显示是的对齐方式
clear可清除格式
heading后跟别名,给列起别名
起别名:起别名有两种方式
1. 使用columncol_name heading 别名。使用范围为清除格式或退出用户前,不可保存
2. 跟在列名后面,使用空格分开。适用范围在该语句执行顺序之后的语句,只能在该条命令里使用,不可保存
去重:distinct
在select子句增加distinct关键字可去除重复结果,保证结果或结果对唯一
字符串拼接:
字符串拼接有两种方式
1. 使用||进行拼接
2. 使用concat(字符串1,字符串2)函数进行拼接
两种拼接方式的效果一致
排序
语法:order by column1[,column2,…]asc|desc;
在oracle中不写排序方式,则默认为升序排序
限制条件
Between … and … 闭区间
通配符
% 代表0到多个任意字符
_ 代表1个任意字符
Like
匹配字符串为like后面的字符串
转义字符
转义字符可为任意字符,但在使用后必须使用escape进行声明
亚表 dual
单行单列的特殊表
作用:将单行单列的数据进行输出
单行函数
字符函数
Lower 大写转小写
Upper 小写转大写
initcap 将每一个单词首字母大写,其他小写
Concat 作用和||一样
Substr 字符串截取函数
Length 求字符串长度
空值函数
Nvl、Nvl2
数学函数
Round、trunc、mod
日期函数
Sysdate 系统当前时间
add_months 返回给定日期+n个月后的那个日期
next_day 返回即将来临的星期几的日期
months_between两个日期相差多少个月
Round(date,’option’)
trunc(date,’option’)
Option:day、month、year。可将时间转换为对应的格式
多表查询
1. 等值连接,使用=、like
2. 不等值连接,使用!=、 <>、 ^=、>、<、between … and …
3. 外连接
a) 左外连接,在右边使用(+)
b) 右外连接,在左边使用(+)
c) 全连接,使用full[outer] join table on
注:(+)加在较少的一方
4. 自然连接,连接表的副本
5. 并集,使用union连接两个查询出来的表,得出两个表的全部数据,重复行只显示一次,unionall则会显示重复行
6. 差集,使用minus连接两个查询出来的表,然后用第一个结果减去第二个结果
7. 交集,使用intersect连接,得出两个表的相同数据
8. 伪劣,使用rownum,是oracle中特有的,用于记录表中的数据行
分组函数
avg:求平均值
count:计算记录总数
Max:求最大值
Min:求最小值
sum:求和
STDDEV:标准差
VARIANCE:方差
注:分组函数使用的数据,必须先进行分组。在select子句中的非组函数参数的列必须使用group by进行分组,反之,则不用
运行时可变参数
定义一个变量,让用户输入值
accept name PROMPT '提示信息:'
在语句中定义是,使用&标注
清除这个变量
undefine name;
ER图中的符号
#:唯一
*:非空
O:随意
虚线:may be
实线:must be
| :将另一端的主键作为该端的一个外键
实体间的关系
1 -------- 1:外键可维护在任意一端
1 -------- n:外键需要维护在多的一端,原因:避免大量的冗余数据
M --------n:将两个表的主键对应维护在桥表中
键的分类
主键:可唯一标识一行数据的属性,作为主键的列的值必须非空并且唯一
外键:该键是外表的主键。当引用了外表的主键时,外表为主表,该表为从表。在做修改时,需要注意级联的问题
联合主键:两个或两个以上的列组合在一起,作为该表的主键。当表中的某一列不能唯一标识该表时,需要引用联合主键进行唯一标识
联合外键:引用的外键是主表的联合主键或联合唯一
三范式:
范式一:表中的列值是单值
范式二:表必须有主键
范式三:表中列与列之间没有依赖关系
表的命名规则
1) 以字母开头;
2) 长度限制为30个字符;
3) 内容组成为:A-Z, a-z, 0-9, _, $和#;
4) 不能为Oracle的保留字;
5) 对象名不能重名;
语法:create table table_name(
列的完整定义,
……
列的完整定义,
[表级约束1,
表级约束…..]
);
约束
主键:primary key,一个表只能有一个主键
外键:
列级约束:在列的定义后面跟references table(column)
表级约束:foreign key(column)references table(column)
非空:not null.注:not null不能作为表级约束
唯一:unique
检查:check(条件)
DDL语言
Create drop alter
Create:可以创建数据库对象
建表:create tabletable_name(列的完整定义,表级约束);
建视图:create [orreplace] [force] view view_name
As
Select子句
[with read only][with check option];
建序列:create sequenceseq_name
maxvaluev|nomaxvalue
minvaluev|nominvalue
start with v
incrememt byv
cycle|nocycle
cachev|nocache;
创建用户
Create user user_nameidentified by password
授权
Grant power [on object] touser;
收权
Invoke power [on object] touser
drop:
删除用户
Drop user user_name [cascade]
删除数据库对象
Drop object_type object_name[cascade];
Alter:
修改数据库对象
Alter object_type object_nameadd|modify|drop option;
修改约束
Alter table table_name add constraintconstraint_name constraint;
下一篇: C++ —— C++程序编译的四个过程