Oracle学习笔记

1、数据库语言分类

  • DDL——定义语言:创建(create)、修改(ALTER)、删除(DROP)
  • DQL——查询语言:查询(SELECT)
  • DML——操纵语言:插入(INSERT)、更新(UPDATE)、删除(DELETE)
  • DCL——控制语言:权限(GRANT)、DENY、REVOKE

2、创建表

//创建表
CREATE TABLE supplier
( 字段名 字段类型  <是否主键> comment '描述',
	...
)Innodb=存储引擎charset=编码 comment '表描述';

2.1使用语句指定主键

alter table 表名 add constraint 主键名 primary key(字段名1,字段名2,......字段名n);
2.2 指定外键
create table 表名(
	字段1 类型(长度) references 表名(字段) [约束],
	s_id char(4) references student(ID) not null
)

3、其他语句

select * from user_tables;
//查看当前用户拥有的对象权限
select * from user_tab_privs_recd;
//查看当前用户拥有的系统权限
select * from user_sys_privs;
//查看表结构
desc 表名
select * from user_tab_columns where TABLE_NAME='大写表名';
//清空表中数据,保留表结构
truncate table 表名; 
//删除表
drop table 表名;
//修改表名
alter table 老表名 rename to 新表名;
//新增字段
alter table 表名 add  字段名 字段类型;
//修改表字段类型
alter table 表名 modify 表字段 新类型 [default '默认填充的值'];
//修改字段名
alter table 表名 rename column 原字段名 to 新字段名;
//修改字段长度
alter table 表名 modify 字段名 类型及长度;
//删除字段
alter table 表名 drop column 字段名;
//更新表中数据
update 表名 set 字段名=新值 where 条件;  
//删除数据
delete from 表名 where 字段=值; 

多表查询

INNER JOIN连接

select 字段名1,字段名2,...,字段n
	from 表名1
		INNER JOIN 表名2
		ON 连接规则
		INNER JOIN 表名3
		ON 连接规则
		...
		INNER JOIN 表名N
		ON 连接规则
	[where 查询条件]

左连接/右连接(LEFT OUTER JOIN/RIGHT OUTER JOIN)

select 字段名1,字段名2,...,字段名3
	from 表名1
	LEFT OUTER JOIN 表名2
	ON 连接规则
	LEFT OUTER JOIN 表名3
	ON 连接规则
	[where 查询条件]

组合查询(UNION)

select 语句1
	UNION
	select 语句2
	UNION
	select 语句3

存储过程

create [or replace] proceduce name
(声明输入和输出参数) 
AS
 (变量声明)
BEGIN
(SQL语句)
EXCEPTION
(异常处理语句)
END;
例:
	create proceduce delstu
	(st_name IN varchar2)
	AS 
	BEGIN
		delete from student
		where name=stu_name;
	END;

运算部分

关系运算

    =	--等号
	!=	<>	--不等
	<	<=	--小于[等于]
	>	>=	--大于[等于]
	between...and...
	in()	
	--in (值1[,值2,.....]) 等同于 过滤的对象 = 值1 or 过滤的对象 = 值2 or ....
	distinct	--去重

集合运算

intersect	--交集
union		--并集,去重
union all	--并集,不去重。性能最好
minus		--补集

DQL通用

select 要返回的信息
from   表
join...on...
where  过滤条件
group by 分组字段
having   分组后的过滤条件
order by 排序字段

连接查询格式

--内连接
	select...
	from 表1,表2,...
	where 关联条件1/过滤条件 [and/or 关联条件2 and/or ....]
	--左外连接
	select...
	from 表1,表2,...
	where 表1的某个字段 运算符 表2的某个字段(+) --表1是主表,表2是从表
	--右外连接
	select...
	from 表1,表2,...
	where 表1的某个字段(+) 运算符 表2的某个字段 --表2是主表,表1是从表

表的约束

primary key	--主键约束
foreign key	--外键约束
check	--检查约束
unique	--唯一约束
not null	--非空约束

ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(列名1[,列名2...]);	--添加主键约束
ALTER TABLE 主表名 ADD CONSTRAINT 约束名 FOREIGN KEY(列名1[,列名2...]) REFERENCES 从表名(列名1[,列名2...]);
			--添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(条件);--添加check约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名);--添加唯一约束
ALTER TABLE 表名 MODIFY 列名 NOT NULL;	--添加非空约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名;	--删除约束

对用户的操作

--语法结构:创建用户
	CREATE USER 用户名 IDENTIFIED BY password [ACCOUNT LOCK|UNLOCK];

	--语法结构:给用户授权
	GRANT CONNECT,RESOURCE TO 用户名;  
	--- 直接将connect角色,--resource角色授予用户。
	--- CONNECT角色:连接数据库。RESOURCE:正常使用数据库

	GRANT CREATE TABLE TO 用户名; --- 给用户创建表的权限
	GRANT CREATE VIEW TO 用户名; --- 给用户创建视图的权限

	--语法结构:收回用户权限
	REVOKE 角色|权限 FROM 用户(角色)

	--语法结构:修改用户的密码
	ALTER USER 用户名 IDENTIFIED BY 新密码;

	--语法结构:给用户加锁/解锁
	ALTER USER 用户名 ACCOUNT LOCK/UNLOCK;

条件判断(if/else)

declare
	   --声明部分
	begin
	   --逻辑/操作部分
	   select...
	   
	   if 条件1 and/or  条件2 then 
		 操作1;
	   elsif 条件3 and/OR 条件4 then 
		 操作2;
	   ...
	   else
		 其他操作;
	   end if;
	   
	end;

条件判断(case…when…)

declare
	   --声明部分
	begin
	   --逻辑/操作部分
	   case
		 when 条件1 and/or 条件2 then 
		   操作1;
		 when 条件3 and/OR 条件4 then 
		   操作2;
		 ...
		 else
		   其他操作;
	   end case; 
	end;

循环控制(loop)

declare
	  --声明部分
	begin
	  --逻辑部分
	  loop
		--循环体
		
		if 退出循环的条件 then
		  exit;
		end if;   
		
		--退出循环的简写
		exit when 退出循环的条件;
		
	  end loop;
	end;

循环控制(while)

declare
	  --声明部分
	begin
	  while 进入循环的条件 loop
		--循环体
	  end loop;
	end;

循环控制(for)

declare
	  --声明部分
	begin
	  --逻辑部分
	  for 循环变量 in 循环下限 .. 循环上限 loop
		--循环体
	  end loop;
	end;

函数

1、concat(字段名1,字段名2),字符串拼接
2、is null 查询空值
3、rownum返回记录的个数:rownum>10
4、正则匹配关键字:regexp_like(字段,正则)
5、add_months(date,number),用于在参数date上加上number个月,
	返回一个新月值,number为负数,返回date之前几个月的日期,number为正返回number之后的几个月的日期
	例:add_montns(to_date('2022-08-01','YYYY-MM-DD'),3)
6、months_between(date1,date2)该函数用于返回两个日期之间的月份数,sysdate()函数可获取当前系统时间,
7、nvl(表达式,其他值)nvl函数可将空值显示为其他值
	例:nvl(price,0)将price字段的NULL值显示为0
8、decode(表达式,值1,返回值,值2,返回值,...,值n,返回值)
	例:decode(cycle,'1.1','元旦','10.1','国庆')将cycle字段中1.1的值显示为元旦,10.1的值显示为国庆

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@不会写代码的小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值