视频:跟老谭学oracle第一季,课后自记资料

查询:select

数据维护语言DML:insert update delete merge

数据定义语言DDL:create alter drop rename truncate

数据控制语言DCL:grant revoke

事务控制:commit rollback savepoint


数据和信息的载体,信息是数据的内涵

数据库database

定义:按照数据结构来组织,存储和管理数据的仓库

特点:长期存储在计算机内、有组织的、可共享的大量数据集合


二维的数据表是关系数据


数据库的

提供存储和处理大量数据的能力

方便查询


数据操纵语音DML

select

insert

update

delete

merge


数据定义语音DDL

create

alter

drop

rename

truncate

comment


数据控制语音DCL

grant

revoke


事务处理控制

commit

rollback

savepoint


列的约束:域完整性

行的约束:实体完整性

引用的约束:引用完整性


重复数据称为数据冗余

唯一约束:要求该列唯一,允许为空,但只能出现一个值

主键约束:要求主键列的数据唯一,并且不允许为空


域完整性:

限制数据类型

检查约束:某列取值范围限制、格式限制等,如有关年龄,手机号码***号码的约束

外键约束:用于两表建立关系,需要指定引用主表列

默认值约束:某列的默认值,如我们的男性学员较多,性别默认为“男”

非空约束


引用完整性:

使用SQL创建

主键约束:用于唯一标识一条记录的列

选择原则

最少性:尽量选择单个键作为主键

稳定性:尽量选择数值更新少的列作为主键


主键(Primary Key)约束:pk_colname

唯一(Unique Key)约束:uq_colname

检查(Check Key)约束:ck_colname

外键(Foreign Key)约束:fk_colname


create table table_name(

id int primary key,

name char(10) not null,

password varchar2(25) nor null,

gender char(1) default('m'),默认约束

email varchar2(50)

--constraint ck_gender check(gender='m' or gender='f')

);

加检查约束:

alter table table_name 

  add constraint ck_gender 

    check(gender='m' or gender='f');

加唯一约束:

alter table table_name

  add constraint uq_email

    unique(email);

默认约束:

alter table table_name modify(gender char(1) default'm');



表之间的关系:

一对多/多对一;例如:员工-部门,学生-班级,

多对多:形成两个一对多;例如:学生-课程,电影-演员

一对一:使用相对较少;例如:员工-合同


建立外键关系

create table employee(

in int primary key,

name char(5char) not null,

deptid int

);

create table department(

in int primary key,

name char(5char)naot null

)

alter table employee

 add constraint fk_deptid

  foreign key(deptid) references department(id);

符合主键

所以函数依赖关系是{学号,课程号}->{成绩}

alter table tb

add constraint PK_ID primary key(学号,课程号)

go



删除约束

alter table table_name dorp constraint fk_name 



约束的使用场景

要求数据库强制进行数据完整性检查的时候



使用SQL增删改查

create table department(

in int primary key,  --主键约束

name varchar2(5char) not null--部门名

);


create table employee(

in int primary key,   --主键

name varchar2(4char) not null,--员工姓名

birthdate date not null, --出生年月

hiredate date not null,  --入职时间

gender char(1char) not null,--性别

job varchar(5char) not null,--职位

salary number(7,2) not null,--月工资

deptid int           --部门ID

);


alter table employee

 add constraint fk_deptid

   foreign key(deptid) references department(id);


insert into department(id,name) values(1,'财务部');

insert into department values ();

commit;


insert into employee(id,name,birethdate,hiredate,gender,job,salary)

values(1,'张三',to_date('1988-2-12','yyyy-mm-dd'),sysdate,'男','职员',3500);

insert into employee

values(2,'张三',to_date('1988-2-12','yyyy-mm-dd'),sysdate,'男','职员',3500,1,default默认值调用);

commit;


update employee set salary=salary+500 where id=2;

commit;


insert into <表名>values();

commit;--提交事务


update employee set salary=salary+500,deptid=1 where id=2;

commit;


delete from emplyee where id=1;

commit;



基本查询

select name as 姓名,gender 性别 from employee;


过滤列

为列取别名,去掉空格

select trim(name) as 姓名,gender 性别

trim()去空格


带条件查询

比较与逻辑运算符

not  or


null值比较

用is null不能用=null



查询

排序

select *from table_name order by 列名,id desc;

升序asc

降序desc



范围查询

3000-4000之间

select * from employee where salary between 3000 and 4000;

deptid是1或者2

select * from employee where deptid=1 or deptid=2;

select * from employee where deptid in(1,2);

模糊查询like:%,_表示一个字符

select * from employee where like''


聚合函数

select  max(salary) from employee;最高工资

select  min(salary) from employee;最低工资

select  avg(salary) from employee;平均工资

select  sum(salary) from employee;总工资

select count(*) from employee;总行数

select  sum(salary),max(salary),min(salary),avg(salary) from employee;


select distinct job from employee;去掉重复数据distinct


分组查询

group by

按部门统计人数

select deptid,count(*) from employe group by deptid;

所查询的列不在聚合函数内就在group by里面


按照职务分组计算平均工资

select job,avg(salary) from employee group by job;


按部门查询平均工资大于4000

select deptid,avg(salary) from employee group by deptid having avg(salary)>4000;

having用于分组条件增加现在行


查询同名的员工

select name,count(*) from employee group by name having count(*)>1;


按部门查询平均工资在3500之上的部门,并按平均工资降序

select deptid,avg(salary) from employee 

group by deptid having avg(salary)>3500 

order by avg(salary) desc; 


不能再where子句中使用聚合函数来限制行

只能通过having子句来限制行



多表连接查询:笛卡尔成集

select e.name,d.name from 

employee e,department d 

where deptid=d.id;

只要有逻辑上的连接,不建立外键也能应用


汇总各部门的总工资,要求带出部门名

select sum(salary) from employee e,department d

where e.deptid=d.id

group by d.name;


外连接使用关键字outer join用于检索一个表的所有记录和另外一个表中的匹配行



左外连接:作边的表所有数据都应该查出来

控制也可以查询出来

左外连接

select *from employee e

left outer join department d

on e.deptid=d.id;


右外连接

select *from employee e

right outer join department d

on e.deptid=d.id;


全外连接

select *from employee e

full outer join department d

on e.deptid=d.id;


oracle专有写法

右外连接

select e.name,d.name from 

employee e,department d 

where deptid(+)=d.id;

左外连接

select e.name,d.name from 

employee e,department d 

where deptid=d.id(+);



子查询

在select、insert、update

单行子查询用=

select name from employee 

where salary=(select max(salary) from employee);

多行子查询用in

select name from employee 

where deptid in

(select deptid from employee where name in('陈晨'or'熊成'));



分页查询:伪列关键字rownum

不能用*号,取前3条,

子查询伪列的rownum取别名,使用别名查询

select * from (select rownum rn.id from employee) a

where rn between 4 and 6;



序列sequence为表中的行自动生成序列号


创建序列create sequence序列名称

[increment by 增量]

[start with 起始数字]--默认是1

[maxvalue 最大值|nomaxvalue]

[minvalue 最小值|nominvalue];


create sequence id_seq;

序列的属性:

nextval下一个序列号

currval当前的序列号

select id_seq.nextval from dual;

select id_seq.currval from dual;

增加主键

insert into department values(id_seq.nextval,'部门1');



视图是一张虚拟表,他表示一张表的部分数据或多张表的综合数据,

其结构和数据是建立在对表的查询基础上。

视图中并不存放数据,主要用于查询,一般不用作增删改


创建视图

create or replace view view_name

as

<select 语句>

删除视图:

drop view view_name;


create or replace view v_employee

as

 select e.name as ename,d.name as dname from employee e,department d

 where e.deptid=d.id


事务是一个独立的逻辑工作单元,

它由特定的一系列必须作为一个整体一起成功或失败的SQL语句组成,

它为数据库提供了读访问的一致性。

特点(ACID)

atomicity(原子性):事务要么完全成功,要么完全失败,不存在局部事情。

consistency(一致性):数据库总会保持一致性的状态

isolation(隔离性):在事务提交以前,由该事务所做的修改,只对该事务的当前会话可见

durability(持久性):事务完成以后,就不能被取消

oracle没有专门启动事务的语句,但只要启动DML命令,oracle就会锁定正在被修改的一些对象,

而且一直锁定到被完成为止。


提交事务commit

回滚事务rollback

使用savepoint的部分回滚

语法:

savepoint name;

rollback to savepoint name;


你可能感兴趣的:(oracle,计算机,database)