oracle初級(續)

来源:http://www.cnblogs.com/shandouji1121/archive/2017/11/27/7901150.html
-Advertisement-
Play Games

oracle基本簡單的用法,之前的筆記稍作整理一下,希望對各位有用,如有問題可在下方留言,所有SQL都是經過oracle環境測試的,可複製可粘貼。 今天先寫這些,未完,待續。。。。 ...


                          有志者、事竟成,破釜沉舟,百二秦關終屬楚;
                          苦心人、天不負,卧薪嘗膽,三千越甲可吞吳。

oracle基本簡單的用法,之前的筆記稍作整理一下,希望對各位有用,如有問題可在下方留言,所有SQL都是經過oracle環境測試的,可複製可粘貼。

  1 select * from emp order by deptno asc ;
  2 
  3 select * from dept;
  4 --oracle 拼接字元串
  5 --oracle中字元串需要在英文或其他文字兩端用單引號包含
  6 select empno, ename, '職位是' || job, sal from emp;
  7 
  8 --列名的別名起別名利用空格
  9 select empno, ename, '職位是' || job haha, sal from emp;
 10 --如果使用雙引號聲明別名,則可以區分大小寫
 11 select empno, ename, '職位是' || job "haha", sal from emp;
 12 --如果想在別名中顯示空格,一定要有雙引號
 13 
 14 --–關鍵字AS
 15 select empno, ename, '職位是' || job as "ha ha", sal from emp;
 16 --–註意:推薦使用as聲明別名,容易區分表達式與別名的界限
 17 
 18 --  去掉重覆行
 19 select distinct deptno from emp;
 20 -註意:distinct只能放在select與列名之間的位置
 21 -- select distinct 列1,列2,..列n
 22 --select和from 書寫順序 select…from
 23 執行順序 fromselect
 24 
 25 --不等於
 26 select * from emp where deptno != 20;
 27 select * from emp where deptno <>20;--推薦這種寫法
 28 
 29 --查詢條件中的 與關係
 30 問題一:
 31 查詢在10號部門工作,並且月薪高於2000,
 32 並且職位是MANAGER的員工信息
 33 
 34 select * from emp where deptno = 10 and sal>2000 and job = 'MANAGER';
 35 --或關係or
 36 問題一:
 37 查詢在10號部門工作或者工資高於2000的員工
 38 
 39 select * from emp where deptno =10 or sal>2000;
 40 --如果and與or一起使用
 41 –and的優先順序要比or高(重要)
 42 如果要想修改優先順序,加括弧查詢在10號部門工作或者工資高於2000,並且職位是MANAGER的員工
 43 
 44 
 45 select * from emp where (deptno = 10 or sal > 2000) and job = 'MANAGER';
 46 
 47 -- 特殊的比較運算符
 48 
 49 --beetween ... and
 50 
 51 --beetween 上限 and 下限
 52 
 53 查詢emp表中,20號部門月薪在1000~2000之間的員工信息
 54 
 55 select * from emp where (sal between 1000 and 2000) and deptno = 20;
 56 
 57between and 使用範圍 數值和日期
 58 –資料庫的常見數據類型:
 591)文字
 602)數值
 613)日期/時間
 62 
 63 select * from emp where hiredate between '1-1月-1982' and '31-12月-1982';
 64 
 65 --between and 也可以比較字元串,比較順序是按照字典的順序比較
 66 
 67 
 68 select * from emp where ename between 'A' and 'C';
 69 
 70 --上下限反著寫 
 71 select * from emp where sal between 2000 and 1000;
 72 -- 語句不報錯,但是邏輯關係沒有,沒有結果
 73 --關鍵字in 格式 列 in(值1,值2,值3…值n)列的取值是值1或值2或值3…或值n
 74 select ename, mgr from emp where mgr in(7902, 7698, 7788);
 75 --like… 像…(重點)
 76 模糊查詢
 77 通配字元
 78 % :0­n個任意字元
 79 _:1一個任意字元
 80 --查詢所有員工首字母為B的員工信息
 81 select * from emp where ename like 'B%';
 82 --–練習:查詢倒數第二個字元是R的員工信息
 83 
 84 --like只能用於文字類型的模糊查詢匹配。
 85 select * from emp where ename like '%R_';
 86 
 87 --is null
 88 用於篩選空值
 89 因為=null的邏輯關係是null,不能篩選出空值
 90 查詢沒有獎金的人
 91 
 92 
 93 select * from emp where comm = 0 or comm is null;
 94 
 95 --NOT
 96 邏輯非關係,表示取反
 97 
 98 --not between and
 99 
100 查詢月薪不在1000~2000之間的員工信息
101 
102 select * from emp where sal not between 1000 and 2000;
103 列名在not前後結果一致,保證列名在between前即可
104 --not in
105 
106 查詢其上司的員工編號不是7902,7698,7788的員工的信息
107 
108 select * from emp where mgr not in(7902, 7698, 7788);
109 
110 --not like 
111 
112 查詢所有不姓張的員工
113 
114 select * from emp
115 where ename not like '張%';
116 --is not null
117 select * from emp
118 where comm is not null;
119 
120 
121 排序
122order by
123 –升序 由小到大
124 –數值:由小到大
125 –日期:由早到晚
126 –文字:字典順序
127 
128 
129 查詢所有10號部門的員工信息,按照月薪升序進行排序
130 
131 
132 select * from emp where deptno = 10 order by sal ;
133 
134 有的環境下不加升序排列,環境預設的是升序,
135 oracle預設的是升序
136 
137 select * from emp where deptno = 10 order by sal asc ;
138 
139 推薦寫法
140 
141 SQl語句執行順序
142 書寫順序:selectfromwhereorder by
143 執行順序:fromwhereselectorder by
144 where不能使用別名,因為select中尚未執行,
145 所以還沒有創建出別名,order by可以使用別名,
146 因為order by在select之後執行,列的別名已經被創建
147 --多列排序
148 查詢員工信息,按照部門編號排序,月薪降序
149 select * from emp order by deptno asc, sal desc;
150 
151 --oracle函數
152 單行函數、多行函數(分組函數)
153 單行函數
154 dual
155 --系統顯示當前日期
156 select sysdate from dual;
157 
158 使用的單行函數,對查詢結果的每一行記錄都有效,
159 會影響到每一行的記錄
160 dual表為了補全sql語句
161 
162 --轉大寫 upper(str) 將str字元串轉成大寫
163 
164 select upper('hAHa') as 描述 from dual;
165 
166 可以為列增加別名
167 
168 --轉小寫lower(str) 將str字元串轉成小寫
169 
170 select lower('hAHa') from dual;
171 
172 --首字母轉大寫,其餘字母小寫initcap(str)
173 
174 select initcap('hAHa') from dual;
175 
176 select initcap('i LiKe GIRL') from dual;
177 
178 --以單詞為單位,每個單詞的首字母大寫,其餘的小寫
179 
180 select * from emp where lower(ename) = lower('ScOTT');
181 --lower()替換為upper()效果一樣
182 
183 字元截取函數
184 --substr(str,n1,n2)
185 str:被截取的字元串
186 n1:開始截取的位置(以1的位置開始)
187 n2:截取字元的個數
188 將str字元串從n1位置起,截取n2個字元
189 結果:字元型類
190 
191 
192 select substr('0123456', 3, 3) from dual;
193 
194 從n1的位置開始,要包含該位置的字元
195 
196 字元查找函數
197 --instr(str1,str2,n1,n2)
198 在str1中尋找str2的字元串,
199 從n1的位置起,第n2次出現的位置
200 結果是一個位置,位置是一個數值
201 
202 select instr('I LIKE GIRL', 'I', 2, 1) from dual;
203 
204 --字元拼接函數
205 select 'haha' || 'xixi' || 'hehe' from dual;
206 –將str1和str2拼接組成一個字元串,功能等同於 ||
207 --concat(str1,str2)
208 select concat('haha', 'xixi') from dual;
209 
210 select concat(concat('haha', 'xixi'),'hehe') from dual;
211 
212 字元替換函數
213 --replace(str1,str2,str3)
214 在str1字元串中,使用str3來替換全部的str2
215 
216 select replace('ABCDECD', 'CD', 'HAHA') from dual;
217 
218 字元串的長度函數
219 --length(str)
220 返回str字元串的文字的個數
221 
222 select length('abcde'), length('哈哈') from dual;
223 
224 字元串補齊函數
225 lpad(str1,n1,str2)
226 rpad(str1,n1,str2)
227 lpad:將str1字元串,使用str2在左側補充到n1個長度
228 rpad:將str1字元串,使用str2在右側補充到n1個長度
229 
230 select lpad('abc', 6, '哈呵'), rpad('abc', 2, '*')
231 from dual;
232 
233 --trunc(n1,n2)
234 –將n1數字捨棄,精確到小數點後n2位
235 select trunc(3.1415, 3), trunc(3.14, 0), trunc(6.14, -1)from dual;
236 --MOD(n1,n2)
237 求n1除以n2後得到的餘數 取餘
238 
239 select mod(5, 3), mod(5, -3), mod(-5, 3), mod(-5, -3)
240 from dual;
241 取餘運算區分正負值,看被除數 編程也是遵循這樣原則
242 
243 日期函數(重要)
244 --sysdate(函數)
245 獲取資料庫所在伺服器的當前系統時間
246 select sysdate from dual;
247 
248 
249 --months_between(date1,date2) date1與date2之間的月數差
250 假設emp表中,所有員工至今未辭職,計算他們現在的司齡
251 months_between(date1,date2)與between and上下限不是對應的
252 
253 
254 select ename, hiredate,trunc(months_between(sysdate, hiredate) / 12, 0) as 司齡 from emp;
255 用於計算年齡,司齡,工齡
256 這些類似的隨著時間流逝而改變的數據
257 
258 
259 --add_months(date1,d1)
260 為date1的時間,追加d1個月,結果還是一個日期
261 設公司的試用期為6個月,計算emp表中員工的轉正日期
262 
263 
264 select ename, hiredate, add_months(hiredate, 6)as 轉正日期 from emp;
265 
266 --last_day(date1)
267 date1所在月份最後一天的日期(結果的類型還是日期)
268 
269 select ename, hiredate, last_day(hiredate)
270 from emp;
271 
272 兩個日期之間的天數(重要)
273 
274 差值就是天數,沒有小數點
275 
276 --next_day(date1,n1)
277 返回date1起之後周幾的日期
278 1:周日 2:周一 … 7:周六
279 
280 select next_day(sysdate,7) from dual;
281 
282 
283 轉換函數(重點)
284 --to_number(str)
285 將str字元串轉為數字
286 
287 select to_number('1234') from dual;
288 
289 按照特定格式轉換
290 --to_number(str1,fmt) fmt格式也一定要是一個字元串 fmt也叫做格式碼
291 –$ : 美元符號
292 –, :三位分隔符或者千位分割符 100,222,119.00
2939 :一位數字
2940 :一位數字或者前導0(補全前面的位置)(瞭解)
295 
296 
297 如果實際數據超過fmt定義的長度,則數值無法顯示
298 實際數據小於fmt定義的長度,數值可以顯示
299 
300 
301 --to_char(n1,fmt)
302 將數值轉換為fmt表示的文字
303 
304 select to_number('$23,412,123.34','$99,999,999.99')from dual;
305 
306 select to_char(2236778,'$9,999,999.99') from dual;
307 
308 –日期轉字元 to_char(date1,fmt)
309 –日期的格式碼:
310 –YYYY 年
311 –MM 月
312 –DD 日
313 –HH24 24進位的小時
314 –HH12 12進位的小時
315 –MI 分
316 –SS 秒
317 – ­ / 常規日期分割符
318 –: 常規時間分割符
319 DATE類型 精確到秒
320 查詢員工姓名和入職日期
321 入職日期按照”年//日 時:分:秒”的格式顯示
322 
323 select ename, to_char(hiredate, 'YYYY/MM/DD HH24:MI:SS')from emp;
324 YY,RR 也是表示年
325 
326 --to_date
327 
328 select to_date('2017-4-7','YYYY-MM-DD') from dual;
329 
330 查詢在1982年期間入職的員工 按照規定格式顯示
331 XXXX­XX­XX
332 select * from empwhere hiredate between to_date('1982-1-1','YYYY-MM-DD')and to_date('1982-12-31','YYYY-MM-DD');
333 
334 
335 通用函數
336 --nvl(expr1,expr2)
337 當expr1值不是null時,函數結果是expr1
338 當expr1值是null時,函數的結果是expr2
339 計算員工月收入,如果員工有獎金,則獎金+500
340 如果員工沒有獎金,則不發獎金
341 
342 select ename, comm, sal + nvl(comm + 500,0) from emp;
343 --nvl2(expr1,expr2,expr3)
344 判斷expr1的值是否為null
345 如果是null使用expr3的值
346 如果不是null使用expr2的值
347 
348 select comm, nvl2(comm, 1, 2) from emp;
349 給員工發節日福利,有獎金的人節日福利是1000,沒有獎金的人節日福利是800
350 select comm, nvl2(comm, 1000, 800) from emp;
351 
352 多行函數(分組函數)
353 由多行記錄為一組統計出的數據,利用的是分組函數(多行函數)
354 常見的統計型數據
355 求和
356 --sum()
357 –查詢emp表中,所有月薪的總和
358 select sum(sal) from emp;
359 求平均
360 --avg()
361 求emp中平均司齡
362 select avg(months_between(sysdate,hiredate) / 12)from emp;
363 最大值
364 --max()
365 –查詢emp表中,最高月薪
366 select max(sal) from emp;
367 最小值
368 --min()
369 –查詢emp表中,最低月薪
370 select min(sal) from emp;
371 計數
372 --count()
373 查詢emp表中,有多少個員工
374 select count(empno) from emp;
375 select count(distinct deptno) from emp;
376 去掉重覆數據用distinct,在count函數內部
377 查詢每個部門的平均工資
378 --group by 依據XX分組 不是分組函數
379 只有使用了分組函數,才能使用group by
380 
381 select deptno ,avg(sal) from emp group by deptno;
382 
383 只有在group by中出現的列,才能寫在select之後(必須記住)
384 多次分組,第二次分組是在第一次分組的基礎上進行的
385 查詢10號和20號部門的平均工資
386 
387 select deptno,avg(sal)from emp where deptno in(10,20)group by deptno order by deptno asc;
388 --書寫順序
389 --執行順序 from...where...group by...select...order by...
390 分組函數是在group by 執行位置進行計算
391 查詢平均工資高於2500的部門id和其平均工資
392 select deptno, avg(sal)from emp where avg(sal) > 2500  --錯誤寫法group by deptno
393 -- where 後面不允許使用分組函數
394 --having
395 –專門處理分組函數的篩選
396group byhaving397 
398 –查詢平均工資在2000~2500之間的部門ID和其平均工資
399 select deptno, avg(sal)from emp group by deptno having avg(sal) between 2000 and 2500;
400 select deptno, avg(sal)from emp group by deptno having avg(sal) >= 2000 and avg(sal) <= 2500;
401 select deptno, avg(sal)from emp group by deptno having avg(sal) > 2500;
402 --執行順序
403 
404 --from ...where... group by ... having... select ...order ...by

今天先寫這些,未完,待續。。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Mysql邏輯架構 引用自《高性能Mysql》 二、併發控制讀寫鎖:讀鎖是共用的,寫鎖是排他的,會阻塞其他的寫鎖和讀鎖。鎖粒度:表鎖、行級鎖三、事務事務(ACID特性):原子性、一致性、隔離性、持久性隔離級別 Read uncommitted未提交讀 事務中的修改,即使沒有提交,其他事務也是可見... ...
  • 一、配置MySQL資料庫 1、解壓綠色版mysql,並改名為mysql5.7,如下圖 對比一下下圖5.6以前的版本,少data目錄(存放數據)和my-default.ini文件(配置信息) 二、安裝服務 1、運行cmd(管理員版本,否則沒有許可權),如下圖 2、對於新版mysql5.7沒有了data目 ...
  • 各位小伙伴,上次講了《深入淺出Redis》和《Redis安裝和實際應用》本篇文章將為大家解密redis的持久化和主從複製機制。 Redis持久化 Redis 提供了多種不同級別的持久化方式: RDB 持久化可以在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)。 ...
  • 參考鏈接:http://www.yiibai.com/mysql/ 一、 SQLECT 語法 SELECT column_1, column_2, ... FROM table_1 [INNER | LEFT |RIGHT] JOIN table_2 ON conditions WHERE cond ...
  • 解決power designer 不能自動生成註釋的解決辦法只需要3步: 一、快捷鍵 Alt+Shift+X 打開腳本編輯器; 二、將下麵天藍色的字體腳本添加到腳本編輯器裡面; Option ExplicitValidationMode = TrueInteractiveMode = im_Batc ...
  • [20171128]rman Input or output Memory Buffers.txt--//做一個簡單測試rman 的Input or output Memory Buffers.1.環境:SCOTT@book> @ &r/ver1PORT_STRING VERSION BANNER ...
  • 一、建表 1、最簡單的建表CREATE TABLE user(id int,name char(20),age int); 2、帶主鍵帶註釋和預設值創建表CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT COMMENT '設置主鍵自增',name ...
  • (開頭閑淡)項目需要必須安裝SQL的,查了很久,斷斷續續用了各種方法,今天終於用了正確的姿(xia)勢(mo)弄成了。 最開始用的方法是調用Win的API模擬滑鼠操作安裝的,嗯,雖然勉強可以,就是有些狗屎。 大概可以放到GitHub 上丟人現眼了 今天搜資料庫創建的問題看到"無人值守安裝sql",才 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...