三篇拿下oracle【篇二】

多表查询

内连接
	inner join
外连接
	left outer join
	right outer join
	(画图)特殊链接+
//内连接
select * from emp el,emp t1 where el.mgr = t1.empno;
//t1表的所有记录都会显示,如果t1.empno在el.mgr中没有对应的记录,就加空值
select * from emp el,emp t1 where el.mgr(+) = t1.empno;

子查询
	select ename,deptno from emp;
	关联子查询
		select e.name,e.deptno,(select d.dname) 

DDL DML

DDL
	创建表空间
DML
其他数据库对象
	视图
	序列
	索引
PLSQL编程语言

DDL

创建表空间:逻辑单位,通常我们新建一个项目,就会去新建表空间,在表空间中创建用户来创建表
create tablespace 表空间名称 datefile ‘文件路径’ size 大小 autoextend on next 每次扩展的大小;
drop tablespace name;
创建用户(没有权限)
create user 用户名 identified by 密码 default tablespace 表空间名称 授权(oracle默认三个角色DBA CONNECT RESOURCE)
grant 角色/权限 to 用户
用户:
create user name identified by 123456;
alter user name identified by 123;
drop user name cascde;

创建表:
	create table 表名(
		列名 列的类型[约束],
		列名 列的类型
	);
	
	列的类型:
		varchar
		varchar2(len) 可变  varchar2(10) hello 占5个字符
		char(len) 固定      char(10) hello 占10个字符,空格填充
		number(总长度,小数长度) 数字类型
		date   年月日时分秒
		timestamp  时间戳,比date更精确
	
	create table test1(
		name1 varchar2(10),
		name2 char(10),
		age number(2,3)
	);
	insert into test1(name1,age) values('hello',12);
	
	使用子查询创建表
		create table 表名 as 查询语句;
			*只会负责表结构和表中的数据,不会负责列的约束
			*如果查询语句没有结果,只负责结构
		select * from scott.emp;
		create table emp as select * from scott.emp;
		
修改表:
	添加列 
	修改列 
	删除列
	修改列名
	重命名表
	
	--添加一列
		alter table stu add phone varchar2(11);
		
		alter table stu add (
							phone varchar2(11),
							sex varchar2(2)
							);`
	--修改列的类型
		alter table stu modify sex varchar2(4);
	--修改列名
		alter table stu rename column sex to gender;
	--删除列
		alter table stu drop  column gender;
	--修改表名
		rename stu to student;
	--删除表
		drop table student;
		truncate table stu;//清空表的数据
		
表的五大约束:
列的约束:约束表中数据的规则
	主键约束 primary key
	非空约束 not null
	唯一约束 unique
	检查约束 check (mysql忽略检查约束)
	
	外键约束:references
		约束从表中记录必须存在于主表中
	
	create table student(
		stuid number primary key,
		sanme varchar2(10) unique,
		age varchar2(10) not null,
		gender varchar2(4) check(gender in ('男','女','人妖'))
	);
	
	--主表中必须存在11号,先在主表中插入数据,再在从表中插入数据
		insert into category vlaues(1,'电脑办公');
		insert into product(11,'外星人',2);
	--强制删除外键主表:先删除外键关联表的约束,再删除自己(不推荐使用)
	drop table category cascade constraint;
	--级联删除表
	添加外键约束,使用级联约束(只在删除的时候,使用级联删除)
	alter table product add foreign key(cno) references category(cid) on delete cascade;

DML

插入数据 insert into 表名 values(所有列的值都要对应写上);
insert into 表名(1,2) values(1,2);
使用子查询插入数据:inset into 表名 查询语句;

	--将emp中10号部门的员工插入到emp1
	insert into emp1 select * from emp where deptno=10;
	
更新数据:
	update 表名 set 列名=值  {where=};
删除数据:
	delete from 表名 {where=};
	
	delete和truncate差别
		delete:逐条删除 DMl 支持事务操作
		truncate:先删除表再创建表 DDl 不支持事务操作(效率高)

事务

一系列操作,要么成功,要么失败
四大特性:原子性 隔离性 持久性 一致性

如果不考虑隔离级别:脏读 虚读 不可重复读
mysql事务隔离级别:READ UNCOMMITTED,READ
COMMITTED,REPEATABLE READ,SERIALIZABLE
oracle隔离级别:Read COMMITTED , SERIALIZABLE READ ONLY
默认隔离级别:READ COMMITTED

提交:commit
事务的保存点/回滚点:savepoint 保存点的名称
回滚:rollback

				begin
					insert into lout values(1);
					insert into lout values(2);
					savepoint dangban;
					insert into lout values(3);
					commit;
				exception
					when others then
						rollback to dangban;
						commit;
				end;

视图

是对查询结果的一个封***r> 视图里所有的数据,都是来自原表,视图本身不存储任何数据

  • 1.封装复杂的查询结果
  • 2.屏蔽表中的细节
语法:
create [or replace] view 视图名称 as 查询语句 [with read only];
		例子:	可以隐藏表中的其他数据
		create or replace view Vtest1 as select ename,job,mgr from emp;
		select * from Vtest1;
##通常不要通过视图去修改,视图创建时候,加[with read only]
		update Vtest1 set ename='SMITH2' where name ='SMITH';

同义词的概念

create synonym dept for view_test3;
	select * from dept;

序列

生成类似auto_increment 这样id自动增长;
auto_increment 是mysql (oracle不存在)

语法:
			create sequence 序列的名称
				start with 从几开始
				increment by 每次增长多少
				maxvalue 最大值 | nomaxvalue
				minvalue 最小值 | nominvalue
				cycle | nocycle 是否循环
				cache 缓冲数量 |nocache
				
		如何从序列中获取值
			currval:当前值
			nextval:下一个值
				注意:currval需要在调用nextval之后才能使用
			select seq_test1.nextval from dual;	
			select seq_test1.currval from dual;

索引

相当于一本书的目录,提高我们查询效率;
如果某一列,你经常作为查询的条件,那么就有必要创建索引,数据量比较的情况。

语法:	
		create index 索引的名称 on 表名(列)
		
		注意:主键约束自带组件索引,唯一约束自带唯一索引。
	
	索引原理:btree balance Tree 平衡二叉树
			插入会导致树结构的变化,故插入较慢;
			索引创建好后,过了一段时间,DBA会做重构索引;
			
	create table wubaiwan(
		name2 varchar2(30),
		address varchar2(20)
	);
	
	insert into wubaiwan values('')
	declare
	begin
		for i in 1..5000000 loop
			insert into wubaiwan values('姓名'||i,'地址'||identified);
		end loop;
		commit;
	end;

PLSQL编程

procedure Language 过程语言 Oracle对sql的扩展;
让我们像在java中一样写 条件表达式,还可以编写相应的循环逻辑 for while

语法:	
	declare
		//声明变量
		变量名 变量类型;
		变量名 变量类型 := 初始值;
		vsal emp.sal%type;--引用型变量
		vrow emp%rowtype;--声明记录型变量
	begin
		//业务逻辑
	end;
例子1:		
	declare
		 i varchar2(10):='张三';
	begin
		--输出
		dbms_output.put_line(i);
	end;
	例子2:查询员工7369的工资
	declare
		 vsal emp.sal%type;--vsal的类型和sal相同
	begin
		--将查询结果赋值给vsal
		select sal into vsal from emp where empno = 7369;
		dbms_output.put_line(vsal);
	end;
	例子3:
	declare
		 vrow emp%rowtype;--声明行变量
	begin
		
		select sal into vrow from emp where empno = 7369;
		dbms_output.put_line('姓名:'||vrow.ename||'工资:'||vrow.ral);
	end;
	
	
	PL条件判断:
		if then 
		
		elseif then
		
		else
		
		end if;
	PL循环:
		while
				while 条件 loop
				end loop;
			
		for
				for 变量 in {reverse倒序} 起始..结束值 loop
				end loop;
		loop
				loop
					exit when 条件;
				end loop;
		
	--输出1-10
		declare
		 i number :=1;
		begin
		 while i<=10 loop
			dbms_output.put_line(i);
			i := i+1;
		end loop;
		end;
全部评论

相关推荐

Beeee0927:是缅甸园区吗
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务