Skip to content

Commit c6089d5

Browse files
committed
upload
1 parent ed1abc1 commit c6089d5

11 files changed

Lines changed: 475 additions & 4 deletions

database/code/04行专列.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,6 @@ select ss01.name, ss01.score
8787
on ss01.name = ss03.name;
8888

8989
--union all
90-
select ss01.name,ss01.score 语文,0 数学,0 英语 from student_score ss01 where ss01.subject='语文' union all
90+
select t.name,sum(t.语文),sum(t.数学),sum(t.英语) from (select ss01.name,ss01.score 语文,0 数学,0 英语 from student_score ss01 where ss01.subject='语文' union all
9191
select ss02.name,0 语文,ss02.score 数学,0 英语 from student_score ss02 where ss02.subject='数学' union all
92-
select ss03.name,0 语文,0 数学,ss03.score 英语 from student_score ss03 where ss03.subject='英语'
92+
select ss03.name,0 语文,0 数学,ss03.score 英语 from student_score ss03 where ss03.subject='英语') t group by t.name

database/code/04行专列.~sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,6 @@ select ss01.name, ss01.score
8787
on ss01.name = ss03.name;
8888

8989
--union all
90-
select ss01.name,ss01.score ����,0 ��ѧ,0 Ӣ�� from student_score ss01 where ss01.subject='����' union all
90+
select t.name,sum(t.����),sum(t.��ѧ),sum(t.Ӣ��) from (select ss01.name,ss01.score ����,0 ��ѧ,0 Ӣ�� from student_score ss01 where ss01.subject='����' union all
9191
select ss02.name,0 ����,ss02.score ��ѧ,0 Ӣ�� from student_score ss02 where ss02.subject='��ѧ' union all
92-
select ss03.name,0 ����,0 ��ѧ,ss03.score Ӣ�� from student_score ss03 where ss03.subject='Ӣ��'
92+
select ss03.name,0 ����,0 ��ѧ,ss03.score Ӣ�� from student_score ss03 where ss03.subject='Ӣ��') t group by t.name

database/code/05视图.sql

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
CREATE [OR REPLACE] VIEW view
3+
[(alias[, alias]...)]
4+
AS subquery
5+
[WITH READ ONLY];
6+
7+
*/
8+
--如果普通用户第一次创建视图,提示没有权限,要使用管理员去修改权限
9+
grant create view to scott;
10+
11+
--创建视图
12+
create view v_emp as select * from emp where deptno = 30;
13+
--视图的使用
14+
select * from v_emp;
15+
--向视图中添加数据,执行成功之后,需要提交事务,绿色表示提交事务,让数据生效,红色表示回滚事务,让数据恢复原状态
16+
insert into v_emp(empno,ename) values(1111,'zhangsan');
17+
select * from emp;
18+
--如果定义的视图是非只读视图的话,可以通过视图向表中插入数据,如果是只读视图,则不可以插入数据
19+
create view v_emp2 as select * from emp with read only;
20+
select * from v_emp2;
21+
--只读视图只提供查询的需求,无法进行增删改操作
22+
insert into v_emp2(empno,ename) values(1234,'lisi');
23+
--删除视图
24+
drop view v_emp2;
25+
--当删除视图中的数据的时候,如果数据来源于多个基表,则此时不能全部进行删除,只能删除一个表中的数据
26+
27+
--我们要求平均薪水的等级最低的部门,它的部门名称是什么,我们完全使用子查询
28+
--1、求平均薪水
29+
select e.deptno,avg(e.sal) from emp e group by e.deptno;
30+
--2、求平均薪水的等级
31+
select t.deptno,sg.grade gd
32+
from salgrade sg
33+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
34+
on t.vsal between sg.losal and sg.hisal;
35+
--3、求平均薪水的等级最低的部门
36+
select min(t.gd) from (select t.deptno,sg.grade gd
37+
from salgrade sg
38+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
39+
on t.vsal between sg.losal and sg.hisal) t
40+
--4、求平均薪水的等级最低的部门的部门名称
41+
42+
select d.dname, d.deptno
43+
from dept d
44+
join (select t.deptno, sg.grade gd
45+
from salgrade sg
46+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
47+
on t.vsal between sg.losal and sg.hisal) t
48+
on t.deptno = d.deptno
49+
where t.gd =
50+
(select min(t.gd)
51+
from (select t.deptno, sg.grade gd
52+
from salgrade sg
53+
join (select e.deptno, avg(e.sal) vsal
54+
from emp e
55+
group by e.deptno) t
56+
on t.vsal between sg.losal and sg.hisal) t);
57+
--查看sql语句能够发现,sql中有很多的重复的sql子查询,可以通过视图将重复的语句给抽象出来
58+
--创建视图
59+
create view v_deptno_grade as select t.deptno, sg.grade gd
60+
from salgrade sg
61+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
62+
on t.vsal between sg.losal and sg.hisal;
63+
--使用视图替换
64+
65+
select d.dname, d.deptno
66+
from dept d
67+
join v_deptno_grade t
68+
on t.deptno = d.deptno
69+
where t.gd =
70+
(select min(t.gd)
71+
from v_deptno_grade t);

database/code/05视图.~sql

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
CREATE [OR REPLACE] VIEW view
3+
[(alias[, alias]...)]
4+
AS subquery
5+
[WITH READ ONLY];
6+
7+
*/
8+
--�����ͨ�û���һ�δ�����ͼ����ʾû��Ȩ�ޣ�Ҫʹ�ù���Աȥ�޸�Ȩ��
9+
grant create view to scott;
10+
11+
--������ͼ
12+
create view v_emp as select * from emp where deptno = 30;
13+
--��ͼ��ʹ��
14+
select * from v_emp;
15+
--����ͼ����������,ִ�гɹ�֮����Ҫ�ύ������ɫ��ʾ�ύ������������Ч����ɫ��ʾ�ع����������ݻָ�ԭ״̬
16+
insert into v_emp(empno,ename) values(1111,'zhangsan');
17+
select * from emp;
18+
--����������ͼ�Ƿ�ֻ����ͼ�Ļ�������ͨ����ͼ����в������ݣ������ֻ����ͼ���򲻿��Բ�������
19+
create view v_emp2 as select * from emp with read only;
20+
select * from v_emp2;
21+
--ֻ����ͼֻ�ṩ��ѯ�������޷�������ɾ�IJ���
22+
insert into v_emp2(empno,ename) values(1234,'lisi');
23+
--ɾ����ͼ
24+
drop view v_emp2;
25+
--��ɾ����ͼ�е����ݵ�ʱ�����������Դ�ڶ�����������ʱ����ȫ������ɾ����ֻ��ɾ��һ�����е�����
26+
27+
--����Ҫ��ƽ��нˮ�ĵȼ���͵IJ��ţ����IJ���������ʲô��������ȫʹ���Ӳ�ѯ
28+
--1����ƽ��нˮ
29+
select e.deptno,avg(e.sal) from emp e group by e.deptno;
30+
--2����ƽ��нˮ�ĵȼ�
31+
select t.deptno,sg.grade gd
32+
from salgrade sg
33+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
34+
on t.vsal between sg.losal and sg.hisal;
35+
--3����ƽ��нˮ�ĵȼ���͵IJ���
36+
select min(t.gd) from (select t.deptno,sg.grade gd
37+
from salgrade sg
38+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
39+
on t.vsal between sg.losal and sg.hisal) t
40+
--4����ƽ��нˮ�ĵȼ���͵IJ��ŵIJ�������
41+
42+
select d.dname, d.deptno
43+
from dept d
44+
join (select t.deptno, sg.grade gd
45+
from salgrade sg
46+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
47+
on t.vsal between sg.losal and sg.hisal) t
48+
on t.deptno = d.deptno
49+
where t.gd =
50+
(select min(t.gd)
51+
from (select t.deptno, sg.grade gd
52+
from salgrade sg
53+
join (select e.deptno, avg(e.sal) vsal
54+
from emp e
55+
group by e.deptno) t
56+
on t.vsal between sg.losal and sg.hisal) t);
57+
--�鿴sql����ܹ����֣�sql���кܶ���ظ���sql�Ӳ�ѯ������ͨ����ͼ���ظ��������������
58+
--������ͼ
59+
create view v_deptno_grade as select t.deptno, sg.grade gd
60+
from salgrade sg
61+
join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t
62+
on t.vsal between sg.losal and sg.hisal;
63+
--ʹ����ͼ�滻
64+
65+
select d.dname, d.deptno
66+
from dept d
67+
join v_deptno_grade t
68+
on t.deptno = d.deptno
69+
where t.gd =
70+
(select min(t.gd)
71+
from v_deptno_grade t);

database/code/06序列.sql

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--��oracle�������Ҫ���һ���е���������������Ҫʹ������
2+
/*
3+
create sequence seq_name
4+
increment by n ÿ��������
5+
start with n ���ĸ�ֵ��ʼ����
6+
maxvalue n|nomaxvalue 10^27 or -1 ���ֵ
7+
minvalue n|no minvalue ��Сֵ
8+
cycle|nocycle �Ƿ���ѭ��
9+
cache n|nocache �Ƿ��л���
10+
11+
*/
12+
create sequence my_sequence
13+
increment by 2
14+
start with 1
15+
16+
--���ʹ�ã�
17+
--ע�⣬�������������֮��û�о����κε�ʹ�ã���ô���ܻ�ȡ��ǰ��ֵ������Ҫ��ִ��nextval֮����ܻ�ȡ��ǰֵ
18+
--dual��oracle���ṩ��һ�������������ʾ�κ����壬�ڲ��Ե�ʱ���������ʹ��
19+
--�鿴��ǰ���е�ֵ
20+
select my_sequence.currval from dual;
21+
--��ȡ���е���һ��ֵ
22+
select my_sequence.nextval from dual;
23+
24+
insert into emp(empno,ename) values(my_sequence.nextval,'hehe');
25+
select * from emp;

database/code/06序列.~sql

Whitespace-only changes.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
--DML:数据库操作语言
2+
--
3+
--
4+
--
5+
6+
--在实际项目中,使用最多的是读取操作,但是插入数据和删除数据同等重要,而修改操作相对较少
7+
8+
/*
9+
插入操作:
10+
元组值的插入
11+
查询结果的插入
12+
13+
*/
14+
--最基本的插入方式
15+
--insert into tablename values(val1,val2,....) 如果表名之后没有列,那么只能将所有的列都插入
16+
--insert into tablename(col1,col2,...) values(val1,val2,...) 可以指定向哪些列中插入数据
17+
18+
insert into emp values(2222,'haha','clerk',7902,to_date('2019-11-2','YYYY-MM-dd'),1000,500,10);
19+
select * from emp;
20+
--向部分列插入数据的时候,不是想向哪个列插入就插入的,要遵循创建表的时候定义的规范
21+
insert into emp(empno,ename) values(3333,'wangwu')
22+
23+
--创建表的其他方式
24+
--复制表同时复制表数据,不会复制约束
25+
create table emp2 as select * from emp;
26+
--复制表结构但是不复制表数据,不会复制约束
27+
create table emp3 as select * from emp where 1=2;
28+
--如果有一个集合的数据,把集合中的所有数据都挨条插入的话,效率如何?一般在实际的操作中,很少一条条插入,更多的是批量插入
29+
30+
/*
31+
删除操作:
32+
delete from tablename where condition
33+
34+
*/
35+
--删除满足条件的数据
36+
delete from emp2 where deptno = 10;
37+
--把整张表的数据全部清空
38+
delete from emp2;
39+
--truncate ,跟delete有所不同,delete在进行删除的时候经过事务,而truncate不经过事务,一旦删除就是永久删除,不具备回滚的操作
40+
--效率比较高,但是容易发生误操作,所以不建议使用
41+
truncate table emp2
42+
43+
/*
44+
修改操作:
45+
update tablename set col = val1,col2 = val2 where condition;
46+
可以更新或者修改满足条件的一个列或者多个列
47+
*/
48+
--更新单列
49+
update emp set ename = 'heihei' where ename = 'hehe';
50+
--更新多个列的值
51+
update emp set job='teacher',mgr=7902 where empno = 15;
52+
53+
54+
/*
55+
增删改是数据库的常用操作,在进行操作的时候都需要《事务》的保证, 也就是说每次在pl/sql中执行sql语句之后都需要完成commit的操作
56+
事务变得非常关键:
57+
最主要的目的是为了数据一致性
58+
如果同一份数据,在同一个时刻只能有一个人访问,就不会出现数据错乱的问题,但是在现在的项目中,更多的是并发访问
59+
并发访问的同时带来的就是数据的不安全,也就是不一致
60+
如果要保证数据的安全,最主要的方式就是加锁的方式,MVCC
61+
62+
事务的延申:
63+
最基本的数据库事务
64+
声明式事务
65+
分布式事务
66+
为了提高效率,有可能多个操作会在同一个事务中执行,那么就有可能部分成功,部门失败,基于这样的情况就需要事务的控制。
67+
select * from emp where id = 7902 for update
68+
select * from emp where id = 7902 lock in share mode.
69+
70+
如果不保证事务的话,会造成脏读,不可重复读,幻读。
71+
*/
72+
73+
74+
75+
76+
77+
78+
79+
80+
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
--DML�����ݿ��������
2+
--��
3+
--ɾ
4+
--��
5+
6+
--��ʵ����Ŀ�У�ʹ�������Ƕ�ȡ���������Dz������ݺ�ɾ������ͬ����Ҫ�����޸IJ�����Խ���
7+
8+
/*
9+
���������
10+
Ԫ��ֵ�IJ���
11+
��ѯ����IJ���
12+
13+
*/
14+
--������IJ��뷽ʽ
15+
--insert into tablename values(val1,val2,....) �������֮��û���У���ôֻ�ܽ����е��ж�����
16+
--insert into tablename(col1,col2,...) values(val1,val2,...) ����ָ������Щ���в�������
17+
18+
insert into emp values(2222,'haha','clerk',7902,to_date('2019-11-2','YYYY-MM-dd'),1000,500,10);
19+
select * from emp;
20+
--�򲿷��в������ݵ�ʱ�򣬲��������ĸ��в���Ͳ���ģ�Ҫ��ѭ��������ʱ����Ĺ淶
21+
insert into emp(empno,ename) values(3333,'wangwu')
22+
23+
--��������������ʽ
24+
--���Ʊ�ͬʱ���Ʊ����ݣ����Ḵ��Լ��
25+
create table emp2 as select * from emp;
26+
--���Ʊ��ṹ���Dz����Ʊ����ݣ����Ḵ��Լ��
27+
create table emp3 as select * from emp where 1=2;
28+
--�����һ�����ϵ����ݣ��Ѽ����е��������ݶ���������Ļ���Ч����Σ�һ����ʵ�ʵIJ����У�����һ�������룬���������������
29+
30+
/*
31+
ɾ��������
32+
delete from tablename where condition
33+
34+
*/
35+
--ɾ����������������
36+
delete from emp2 where deptno = 10;
37+
--�����ű�������ȫ�����
38+
delete from emp2;
39+
--truncate ,��delete������ͬ��delete�ڽ���ɾ����ʱ�򾭹����񣬶�truncate����������һ��ɾ����������ɾ�������߱��ع��IJ���
40+
--Ч�ʱȽϸߣ��������׷�������������Բ�����ʹ��
41+
truncate table emp2
42+
43+
/*
44+
�޸IJ�����
45+
update tablename set col = val1,col2 = val2 where condition;
46+
���Ը��»����޸�����������һ���л��߶����
47+
*/
48+
--���µ���
49+
update emp set ename = 'heihei' where ename = 'hehe';
50+
--���¶���е�ֵ
51+
update emp set job='teacher',mgr=7902 where empno = 15;
52+
53+
54+
/*
55+
��ɾ�������ݿ�ij��ò������ڽ��в�����ʱ����Ҫ�����񡷵ı�֤�� Ҳ����˵ÿ����pl/sql��ִ��sql���֮����Ҫ���commit�IJ���
56+
�����÷dz��ؼ���
57+
����Ҫ��Ŀ����Ϊ������һ����
58+
���ͬһ�����ݣ���ͬһ��ʱ��ֻ����һ���˷��ʣ��Ͳ���������ݴ��ҵ����⣬���������ڵ���Ŀ�У�������Dz�������
59+
�������ʵ�ͬʱ�����ľ������ݵIJ���ȫ��Ҳ���Dz�һ��
60+
���Ҫ��֤���ݵİ�ȫ������Ҫ�ķ�ʽ���Ǽ����ķ�ʽ��MVCC
61+
62+
��������꣺
63+
����������ݿ�����
64+
����ʽ����
65+
�ֲ�ʽ����
66+
Ϊ�����Ч�ʣ��п��ܶ����������ͬһ��������ִ�У���ô���п��ܲ��ֳɹ�������ʧ�ܣ������������������Ҫ����Ŀ��ơ�
67+
select * from emp where id = 7902 for update
68+
select * from emp where id = 7902 lock in share mode.
69+
70+
�������֤����Ļ������������������ظ������ö���
71+
*/
72+
73+
74+
75+
76+
77+
78+
79+
80+
46.5 KB
Binary file not shown.

0 commit comments

Comments
 (0)