Oracle简单的Sql语句
一. Sql语言中的DML
DML:数据操纵语言
1. insert:添加数据
语法:insert into 表名(列名,列名,...) values (值,值,...)
注意:没有指定列名添加数据时,添加的值要与表中的列一 一对应
例如:insert into student values(sno,sname,sage,...)
如果添加的是时间对象,则需要使用to_date('时间字符串','格式字符串')
insert 将一个表的数据复制到另一个表
语法:insert into 表名 select 列名,列名,... from 表名
注意:select出来的字段数量和数据类型必须要与添加的字段数量和数据类型对应,字段的名称不要求一样
例如:insert into 表名(sno,sname,sage) select t_sno,t_sname,t_sage from 表名
2. update:更新修改数据
语法:update 表名 set 列名=新值,列名=新值,...[where 过滤条件]
注意:如果不添加where条件则默认将表中所有行的数据都修改
一般不修改主键
3. delete:删除数据
语法:delete from 表名 [where 过滤条件]
注意:如果不添加where条件则默认将表中所有数据删除
truncate:清空表中所有的数据,不删除指定的删除
语法:truncate
区别:
(1)truncate 只能清除表中所有的数据,但是delete可以删除指定数据
(2)truncate 删除的数据不能撤回,但是delete删除的数据可以撤回
(3)truncate 删除数据的时候数据不会放到撤销表空间,所以效率比delete高
二. Oracle数据库中的事务处理:
1. 事务:从业务角度来说,事务就是一个完整的业务逻辑
从sql语句角度来说,事务就是多条sql语句的集合
从数据库层面来说,事务是数据库中处理数据的最小单位
2. 事务特性:
1. 原子性:是处理数据的最小单位,事务中的操作是一个整体,要么全部执行成功,如果有一个失败,则全部撤回
2. 一致性:数据在事务处理之前和处理之后必须要保持一致
3. 持久性:一旦事务执行结束,事务对数据库所做的修改就会永久保存下来
4. 隔离性:用来代事务在操作的时候多个事务之间相互独立,互不影响
5. 隔离级别:
(1)串行读:serializable
隔离级别最高,可以解决下面所有的问题,但是效率相对较低
(2)可重复读:repeatable
(3)提交读:read_committed
(4)未提交读:read_uncommitted
事务操作常见的问题:
脏读:事务A去修改某一条数据,但是还没提交,事务B来读取数据,后来事务A撤销修改操作
导致事务B读到的数据根本不存在
不可重复读:事务A中有两个地方要读取数据,当他读取了第一次的之后,事务B对数据进行修改,
导致第二次读到的数据和第一次读到的不一致
幻读:和不可重复读类似,只不过操作的是一个结果集也就是查询结果
设置隔离级别:isolation level
设置当前事务的隔离级别
Set transaction isolation level read committed
设置当前会话中的事务的隔离级别
Alter session set isolation level serializable
3. 事务的操作:
事务的开启:
在Oracle中事务都是系统自动开启,一般情况只有对数据库操作修改的一些操作才会开启事务
事务的结束:
在Oracle中只有在以下情况系统会自动提交或者回滚事务
(1)执行了DDL语句或者DCL语句自动提交事务
(2)正常退出数据库连接的时候会自动提交事务
在Oracle中如果执行的是DML语句则需要手动提交事务
事务操作的语句:
commit:提交
让对数据库所做的修改永久生效,一旦一个事务被提交了之后就代表不能撤回
优化:在保证数据完整性的情况下多使用commit
rollback:撤回
撤销对数据库所做的所有修改操作,撤销的前提操作就是事务不能被提交
savepoint:保存点
可以在事务中设置一个点,使得撤销的时候不会全部撤回,只会撤销到保存点,此时事务并不会结束
使用步骤:
(1)设置保存点:savepoint 保存名
(2)撤销到保存点:rollback to savepoint 保存名
三. 数据表的简单查询
DQL:数据查询语言:select
语法:select [distinct 去重\all] 列名,列名,... [into 变量]
from 表名\视图
[where 过滤条件]
[group by 分组字段,分组字段,...]
[having 分组过滤语句]
[order by 排序列 [desc|asc] ,列,...]
1. 单表查询:
(1)简单查询
select 列名,列名,... from 表名
*:是一个通配符,代表所有列
sql优化:在查询所有列时不要写*,直接写列名,使用*的时候在查询之前会先去数据字典中查询该表中字段的名称,然后再执行查询操作
在列上使用算数运算符:+ - * /
字符串拼接使用:||
(2)筛选查询
where 查询条件
算数运算符:> < <= >= <> != =
any:只满足其中一个就可以 列名 = any(集合)
all:满足全部 列名 = all(集合)
(3)特殊关键字查询
1. like:进行模糊匹配查询
匹配符:
_:代表任意一个字符
%:代表不确定多少个字符
语法:select 列名,列名,... from 表名 where 列名 like '匹配模式'
2. in:和any类似
语法:select 列名,列名,... from 表名 where 列名 in(数据集合)
3. between .... and ...:进行范围查询
语法:select 列名,列名,... from 表名 where 列名 between .... and ...
4. is null:判断字段是否为空
语法:select 列名,列名,... from 表名 where 列名 is null
(4)逻辑运算符筛选
and:左右两边都要满足
or:左右两边只要满足一个即可
not:取反
(5) 分组查询
group by:在查询的时候进行数据分组的目的是用来进行数据的汇总,
分组完之后会将数据按照每一组显示一个单行的统计信息,常与聚合函数一起使用
聚合函数:
avg(列名):返回指定字段的平均值
sum(列名):返回指定字段的和
max(列名):返回指定字段的最大值
min(列名):返回指定字段的最小值
count(列名):返回查询指定字段的数据条数
语法:select 列名,列名,... from 表名 group by 列名 [having 过滤语句]
注意:1. select 后面的列名 必须为group by 后面的列名,但是聚合函数除外
2. group by 后面出现的字段,并不一定要出现在select后面
(6)排序查询
语法:order by 字段名 [desc/asc],字段名,...
2. 多表查询
(1)普通连接:
语法:select * from 表A 别名1,表B 别名2 where 别名1.关联字段 = 别名2.关联字段
例如:select * from emp e,dept d where e.deptno = d.deptno
(2)内连接:[inner] join ... on ...
语法:select * from 表A 别名1 join 表名B 别名2 on 别名1.关联字段 = 别名2.关联字段
(3)外连接:[outer] join ... on ...
左外连接:select * from 表A 别名1 left join 表名B 别名2 on 别名1.关联字段 = 别名2.关联字段
查询结果:表A显示所有的信息,表B显示符合条件的
右外连接:select * from 表A 别名1 right join 表名B 别名2 on 别名1.关联字段 = 别名2.关联字段
查询结果:表A显示符合条件的,表B显示所有的信息
全外连接:select * from 表A 别名1 full join 表名B 别名2 on 别名1.关联字段 = 别名2.关联字段
查询结果:显示表A和表B的所有信息
(4)自然连接:natural join
语法:select * from 表A natural join 表B
使用自然连接的前提条件:关联的两张表中必须有一个相同名称的字段,如果没有则关联不成功
查询结果:结果和内连接和普通关联一样只显示符合条件的数据
(5)自连接:自己和自己连接
语法:select * from 表A 别名1,表A 别名2 where 别名1.关联字段 = 别名2.关联字段
(6)交叉连接:cross join
直接将两张表中的数据进行笛卡尔积操作
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库