oracle增删改查

前言:我是写sql的小白,最近在看oraclesql编程,我的文章只适合小白看,勿喷,有不足之处欢迎指点,这本书真的是

每句都得好好理解。

以下sql都基于k0012,kb0111这两张表

1.先看看我学的查询,书上就两句话,select查询结果集的处理

--小白的我希望你在学习sql之前同志们可以先看看sql执行的顺序,在没看执行顺序时我看别人sql真的很难。

--简单举个low逼的流程,各位不要嫌弃from-where-group by-select-order by,from从右往左,where从上到下
--select后面可以是字段,表达式,或者select语句查询结果
select akb020,(select aab078 from k0012) kb23 from kb0111
--select查询返回表达式
select akb020||akb021 from kb0111
--select查询返回select结果集,作用可以不用外连接内连接等获取另一个表想获取的字段这种被称为标量子查询
--标量子查询只能返回一行一列的值,并且标量查询在每一行结果产生时都要执行一遍

select kb.akb020,(select k2.aab078 from k0012 k2 where k2.aab003=kb.aab003) from kb0111 kb;

--length查询ak001字段长度为5的数据,for update 对查询的数据可以修改,没这个是无法修改数据库数据的

select * from akb001 where length(ak001)='5' for update

--当没有字典的时候如何让数据查的1,2变为男女显示

select aab078,case when(aab078 = 1) then '男' when(aab078 = 2) then '女' end as six
 from k0012

2.orderby排序

--orderby排序

select akb020,count(akb020) as c from kb0111 group by akb020 having count(akb020)>0 order by c

3.--insert插入单表

--普通插入给KB0111插入一行akb024列为200的数据
insert into kb0111 (akb024) values('200')
--把从k0012查询出来的aab003所有数据插入到kb0111的akb024这列
insert into kb0111(akb024) select aab003 from k0012 

--多表插入多表不写了和单表差不多,由于表的数据不能乱改,就没搞思路是下面这样感兴趣的试试
--上面有俩表,k0012,1b0111今天再加一个表k0013,将表k0013的摸个字段插入到前俩表的某个字段
--当指定了all子句的时候,该语句就会无条件执行多表插入
--insert all where 条件1 into 表 1 else where 条件2 into 表 2 select 字段from 表3

4.--update 更新表数据,由update,set,where组成,下面我将写5个更新的方式
--1使用表达式更新一个单列的值
update k0012 set k0123=4
select * from k0012
--2通过子查询更新一个单列的值
update k0012 set k0123 = (select akb001 from k0013 where akb001 = 1) where aab003 = 2
--3通过where条件语句用子查询更新单列的值,简单解释下,首先从k0013表查询出k004='李'

所有k003字段,把k0012表中的k012和k003字段相匹配的全部更新为4

update k0012 set k0123=4 where k012 in (select k003 from k0013 where k004='李')

--4通过select查询定义表修改的条件来更新表,where后面表示aab003为akb001对应的所有值
update k0012 set k0123 = 200 where aab003 in (select akb001 from k0013)
--5通过子查询语句定义表及列的值来更新表(把表k0012中k0123的字段更新为表k0013中akb001的值)
--如果出现无法修改与非键值保存表对应的列的错误请看主键
update (select k12.k0123, k13.akb001 ace
          from k0012 k12, k0013 k13
         where k13.akb001 = k12.aab003)
   set k0123 = ace

--通过子查询更新多列
update k0012
   set (aab078, k0123) =
       (select k13.akb001, k13.akb013
          from k0013 k13, k0012 k12
         where k13.akb001 = k12.aab003)

--delete
--使用where子句中的筛选条件来从指定表中删除行
delete from k0012 where aab003=6
--使用from中的子查询来删除行
delete from (select * from k0012 where aab078='1')
--使用where子句中的子查询来从指定表中删除行
delete from k0012 where k0123 in (select akb001 from k0013 )

以上就是简单的增删改查

顺便提醒下and 和 or 在写sql时sql的执行顺序是先执行and再执行or


猜你喜欢

转载自blog.csdn.net/lihuihao2/article/details/78997482