1. 程式人生 > >oracle增刪改查

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