Oracle:持久化保存数据,保存数据的仓库,重点方便操作数据(增删改查),使用SQL语言
1.保存数据,以及操作数据
2.在项目开发中基本都会使用数据库,数据库是项目的后台开发。
前台开发:界面
后台开发:保存数据
层次模型数据库:相当于树
网状模型数据库:相当于蜘蛛网
关系模型数据库:就是二维表
PK:primary key主键,用来唯一标识表中的数据,不能重复,不能为空
FK:foreign key 外键,用来维护表与表之间的关系,一般情况会把一张表的主键作为另一张 表的外键,FK的值可以为空,如果不为空,它的值必须存在于依赖的那张表的主键的 值
视图:是一张虚表,就是一个查询语句,从一张或者多张表查询出的结果。
序列:是Oracle数据库特有的,主要用来生成主键的值
索引:提高检索的效率
同义词:给对象取别名
PL/SQL:将一条或者多条SQL使用循环语句,判断语句等连接起来的
数据完整性约束:规定/规范
(1)实体性完整性约束:针对主键,非空唯一
(2)参照性完整性约束:针对外键,可以为空,值依赖于主键
(3)列级完整性约束:针对列的数据类型,数据的值必须匹配定义的数据类型
(4)用户自定义完整性约束:check完整性约束,gender check(‘男’,’女’) 规定用户的取值 范围
大型数据库:Oracle,db2…开发银行系统,保存数据量大,安全性高,要收费
中型数据库:SQL Server,MySQL…保存数据量比较大,安全性比较高,免费
小型数据库:sqlite,access…就是文件,保存数据量小,安全性低
SQL:结构化的查询语句,针对所有的数据库。
第四代语言,只关心做什么,而不关心怎么做
SQL*Plus:一个工具。用来执行SQL或者PL/SQL语句。还会用来线束执行的结果
PL/SQL:存储单位
sqlplus “as sysdba”
show user 显示当前用户
数据库安装之后的默认的两个管理员用户:
SYS:数据库的系统管理员,权限最高
System:数据库的管理员,权限非常高 system 123456
conn system/system 切换到system用户下
create user briup identified by briup; 创建用户为briup,密码也为briup
create user oracle identified by oracle; 创建用户为oracle,密码也为oracle
grant resource,connect tobriup; 给briup用户授权
conn briup/briup
alter session setnls_date_language=English; 修改语言模式为英文
start D:\1杰普培训视频\oracle\oracle.sql
select table_name from user_tables;
select count(*) from s_emp;
1.select 语句的格式
select [distinct] *|字段名1,字段名2…….
from 表名s;
distinct 去除重复的数据,*代表所有字段,建议不写*,效率低
*先查询所有的字段名,再根据字段名查询数据
2.使用算术运算(+-*/)
针对数字的类型(number)+-*/
selectlast_name,salary*12 from s_emp;
selectlast_name,(salary+100)*12 from s_emp;
selectlast_name,(salary+commission_pct)*12 from s_emp;
针对日期类型(date)+-,单位是天
selectstart_date,start_date+1 from s_emp;
3.给字段取别名
(1)在需要去别名的字段后空格直接加上别名
selectlast_name,(salary+100)*12 sal from s_emp
(2)使用as关键字
selectlast_name,(salary+100)*12 as sal froms_emp
(3)使用“ ”,可以区分大小写和特殊字符
4.处理空值nvl
该字段有空值的情况,会影响表达式的结果的时候
nvl(字段名,默认值) 如果字段值为null,nvl处理之后的结果为默认值
如果字段值不为null,nvl处理之后的结果为字段本身的值
5.字段的拼接:把多个字符创拼接成一个字符串 用 “||”
查询员工的全名(last_name,first_name)
selectlast_name||‘,’||first_name
froms_emp;
l/list:显示
/
a:在行尾追加文本
c:替换 先定位1,再替换 c/旧串/新串
i:在下一行插入一行文本
del:删除一行,定位 del
save filename 将缓冲区内容保存到文件中 (以下都不需要分号)
get filename 将文件的内容取出到缓冲区
start filename 将文件的内容取出到缓冲区并执行
@filename 同startfilename
edit filename 将文件以编辑的方式打开
spool spool filename:将缓冲区中所有内容都写入到文件中,结束用spool off
如: spool D:/test1.sql (开始)
select last_name froms_emp;
show user
select *from s_dept;
spool off; (结束)
注意:spool必须和spool off一起使用。
exit:退出
col:设置字段的显示格式
select last_name,first_name,salary,start_date
from s_emp;
col last_name format a15;
col first_name format a15;
注意:format不能通过a来设置数字类型
col salary format a10;
select salary from s_emp;
清除salary显示格式:
col salary clear;
col 字段名[ heading 别称] format a20 heading设置别称
col salary justify left或right [format $99,990.00] justify可以将字段的标题居左或居右
col 字段名format a20 null ‘Not hired’ 如果为空,值为Nothired
第二章
一:排序order by
1.升序排序ASC(默认),降序排序DESC,
2.order by 放在select语句最后的位置
3.order by 跟字段名或者别名或者出现在select语句后的序列号(从1开始的)
4.字符串的排序使用ASCII进行排序
5.多个字段进行排序时,用逗号进行隔开,排序规则:先按第一个字段进行排序,如果 第一个字段的值相同,把相同的这些数据按照第二个字段排序,以此类推
6.对于空值的排序规则:空值看做无穷大
例:查询所有员工的工资,按照工资进行降序排序
selectlast_name,salary from s_emp order by salary DESC;
二:限定性的查询where
1将查询结果进行过滤
2.where放在from的后面
3.where后面跟表达式 字段名,常量
不等于 != <> ^=
(not)betweenand (not)in (not)like is(not)null
and or
like中的%,_,表示匹配到的字符数据,不在like中只表示百分号,下划线
escepe ‘任意字符’:组合起来就是转义字符,将任意字符后面的字符进行转义。常用’\’
select *from s_dept where name like ‘\_%’ escape ‘\’;
第三章
单值函数:不会影响数据个数
在字符串上的单值函数:
LOWER:将字符串转化为小写
UPPER:将字符串转化成大写
INITCAP:将字符串转换成首字母大写,其他字母小写
CONCAT:将字符串进行拼接
SUBSTR:求字符串的子串
LENGTH:求字符串的长度
NVL:处理空值的函数
在数值上的单值函数
round:四舍五入
trunc:只舍不取
mod:取余
在日期上的单值函数
MONTHS_BETWEEN:两个日期之间相差多少个月
ADD_MONTHS:在一个日期上加一个月数之后的日期
NEXT_DAY(date,'friday'):指定日期的下一个星期五是哪天
LAST_DAY:一个日期所在月最后一天是多少?
ROUND:四舍五入
TRUNC:只舍不取
转换函数
(1)to_char:将数字类型和日期类型转换成字符串
1将数字类型转换成字符串 to_char(数字,格式)
selectto_char(salary,’fmL99,999.00’)
from s_emp;
9:不足位的时候不会强制补齐
0:不足位的时候会强制补齐
$:西方人显示货币符号
L:显示本地的货币符号
fm:会清除前面的空格
2将日期类型转换成字符串
to_char(时间,格式) to_char(sysdate,’YYYY MM DD’)
(2)to_number:将字符串类型的数字转换成数值类型to_number(‘10‘)’
(3)to_date:将字符串类型的日期转换成日期类型 to_date(’29-AUG-17’)
dual:哑表,该表没有任何实际意义,用来处理函数,还用来满足select语句的格式
多值函数:会影响数据个数
第五章 组函数
AVG:求平均值
COUNT:求非空的个数
MAX:求最大值
MIN:求最小值
SUM:求和
STDDEV:求标准差
VARIANCE:求方差
集合连接
union:并集,重复的列只显示一行
union all:并集,不会消除重复的行
minus:差集
intersect:交集
rownum:位列where rownum=1 rownum<=10 rownum<20
group by 用来分组,跟字段名,放在where后面
组函数不能出现在where条件中,对组函数进行过滤要使用having,having放在group by后面
出现在select后的字段,如果该字段没有出现在组函数中,就必须出现在group by后面
多个字段同时分组,多个字段的值同时相同时才分为一组。
sql执行流程:sql引擎解析sql语句
select------------5
from-------------1
where-----------2
group by--------3
having---------- 4
order by--------6
第六章:子查询 一条select语句嵌套一个或者多个select语句
子查询的值必须与外围查询条件对应
第九章:创建表
create table [schema.]table
(column data
create table:创建表固定语句
schema:可有可无,指定该表创建在谁的用户下的。不写,放在当前用户下
create table stu(
字段名 数据类型 [默认值] [列级约束],
……
[表级约束]
);
(1)命名规则
以字母开头
长度1-30个字符
由字母,数字,_$#组成
同一个用户下不能出现相同的名字
不能使用Oracle保留字
(2)数据类型
字符的数据类型
varchar: 可变长字符串,是所有数据库可用的
varchar2 : 可变长字符串,是Oracle特有的
1节省内存空间
2检索效率不高
保存字符串长度不固定
备注信息
char: 不可变字符串 浪费内存空间,检索效率高,保存字符串长度固定, 长度相差不打的字符串。保存电话号码,身份证号
clob: 定义大数据的字符串,最大2GB
数字的数据类型
Number 定义整数
number(5,2) 定义小数,小数位:2位,整数位:5-2位
日期的数据类型
date
二进制的数据类型
blob
默认值
create table s_stu(
id number(7)constraint s_stu_id_pk primary key,
name varchar2(10) constraints_stu_name_nn not null,
age number(2) default0,
phone char(11) constraints_stu_phone_uk unique,
gender char(2) constraints_stu_gender_ck check(gender in('f','m')),
c_id number(7) constraints_stu_c_id_fk references s_dept(id)
);
(4)列级约束和表级约束
(1)约束的类型
primarykey---主键PK not null----非空NN
unique----唯一键UK check----选择性CK
foreign key----外键FK
(2)查看约束的名字
selectconstraint_name
fromuser_constraints
wheretable_name=’S_STU’;
(3)列级约束:约束类型直接放在字段的后面,只能作用于一个字段
表级约束:约束和字段之间有逗号隔开,可以作用于多个字段
规则:非空约束只能用列级约束
联合主键,联合外键,联合唯一键只能用表级约束
其他情况自选
create table s_stu(
id number(7),
name varchar2(10)constraint s_stu_name_nn not null,
age number(2) default0,
phone char(11),
gender char(2),
c_id number(7)
,
constraint s_stu_id_pkprimary key(id),
constraints_stu_phone_uk unique(phone),
constraints_stu_gender_ck check(gender in('f','m')),
constraints_stu_c_id_fk foreign key(c_id) references s_dept(id)
);
(5)创建表时约束如何写
主键约束
列级约束:字段 数据类型 取名字 约束类型
表级约束:constraint约束名 约束类型(字段),
联合主键:字段1 数据类型,
字段2 数据类型,
取名字 约束类型(字段1,字段2),
唯一键约束:unique
非空约束:not null列级约束
选择性约束 列级约束:字段名 数据类型 取名字 check(字段名 in(值1,值2)),
表级约束:字段名 数据类型, 取名字 check(字段名 in(值1,值2)),
外键约束
列级约束:字段名 数据类型 取名字 references 表(字段)
表级约束:字段名 数据类型, 取名字 foreign key(字段)references 表(字段)
ER图
#代表唯一性
*代表非空
o代表没有任何要求,可以为null
实体之间的关系,通过外键来维护,创建表的时候需要给某张表增加外键
一对一:把外键放在任何一方,如果出现了must be,应该把外键放在must be的一方
一对多:把外键放在多的一方
多对多:创建一张桥表,通过桥表把多对多的关系转换成2个一对多的关系。
may be可能依赖和must be必须依赖,must be外键的值不能为空
数据库开发的步骤
需求分析:将客户的想法转化为系统相关的设计,设计哪些实体,实体包含哪些字段,实体与实体有哪些关系
设计阶段:将需求分析分析出来的数据转化成ER图,直观,很容易了解
建立文档:对实体和关系的属性进行详细的说明,直接给客户看,更方便进行交流
建立表实例图:将ER图转换成表实例图
第十一章
1.插入数据insert
insert into 表名[(字段名,字段名)]
values(值1,值2……)
注意:如果表后没有跟字段,需要给表中的所有字段插入值
注意值和表中的字段的顺序和数据类型,不要违反完整性约束
先插入父表的数据,再插入子表的数据
2.插入多条数据 insert into 表名(字段) 子查询;
如:insert intos_stu(id,name)
select id,last_name
from s_emp
where id>10;
3.更新数据,更新已经存在的数据
update 表名
set 字段名=值,字段名=值
where 条件;
注意:不加where,修改表中所有数据,加where,修改表中满足where条件的数据
4.删除数据delete
delete [from]表名
where 条件;
不加where,删除表中所有数据,加where,删除表中满足where的数据
删除表中的数据,不会删除表结构
先删除子表的数据,再删除父类的数据
在创建表的时候,给外键加了ondelete cascade,就可以直接删除父表的数据
5.事务
事务是一个操作单元中的一个一系列操作,这些操作是不可再分的原子操作,要么同时成功,要么同时失败。
事务开始 打开SQL*PLUS工具时,事务开始
前一个事务结束,新的事务开始
事务结束 commit,rollback
执行DDL,DCL语句会自动提交
非正常情况(系统错误,退出工具,系统崩溃)
事务特点:ACID
原子性:事务不可再分
一致性:事务操作前后的数据总量保持一致
隔离性:一个事务不能看到另外一个事务数据
持久性:数据要持久化的保存
增加列
alter table 表名
add(列名列的数据类型) //增加一列
作用:增加表级约束,不能加notnull
修改列
alter table 表名
modify(属性名数据类型 [default 默认值] [not null])
作用:可以改变数据类型将number(7)增加为number(10),或者改小
改变默认值,仅当默认值
添加了默认值只对后面添加的内容赋予默认值,前面的内容不会将它变成默认值
如果想添加非空约束,必须保证该列的数据为非空,添加非空约束只能用modify语言添加
如果这列为空值,可以改变数据类型,如果不为空值,注意原来的数据的类型要和修改的类型匹配
删除列
alter table 表名 drop(列名)