01-基本的查詢語句 A:一些命令 B:sql優化原則 註意:掌握oracle的常規命令,在學習過程中總結一些優化原則; 02-空值和別名 A:處理列值為null oracle中的列值為null做四則運算結果都為null。處理方法:nvl(null,0) B:判斷列值為null oracle中判斷一 ...
01-基本的查詢語句
A:一些命令
- sqlplus sys/[email protected]:1521/orcl as sysdba;
- conn scott/[email protected]:1521/orcl; 從當前用戶轉換成scott用戶
- show user; 顯示當前用戶名
- show linesize; 顯示的行寬
- set linesize 150; 設置行寬
- col ename for a8; col sal for 9999;設置列ename為字元長度為8個長度;設置列sal為4位數字;
- c 命令字元替換,如: c /form/from 或者c!form!from
- host cls;清屏幕
- spool d:/1.sql 將命令寫入到1.sql文件中。spool off終止寫入文件中。
B:sql優化原則
- 查詢的時候儘量使用列名;如:select ename,sal from emp;
- 分組查詢沒有多行函數(聚合函數),如果使用過濾,考慮使用where還是having
- 在子查詢和多表查詢之間選擇,儘量使用多表查詢
- 在集合運算中,如果union 和union all都可以,考慮使用union all 。因為union需要去掉重覆的。
- 能夠不要使用集合運算就不要使用集合運算。
註意:掌握oracle的常規命令,在學習過程中總結一些優化原則;
02-空值和別名
A:處理列值為null
oracle中的列值為null做四則運算結果都為null。處理方法:nvl(null,0)
B:判斷列值為null
oracle中判斷一個列值為null使用is null 或者is not null
C:給一個列取一個別名可以使用as 或者省略as
select empno as “員工編號” , ename 員工姓名 from emp;
註意:別名需要使用“”,或者不加“”。別名中間有空格的需要“”;
不能使用單引號;
D:distinct 取出後面的所有列唯一值
select distinct job,deptno from emp;這裡的distinct作用於後面的所有的列。
select distinct(job) from emp;可以將加()
E:|| 和concat() 將字元連接起來
select concat(‘hello’,’world’) from dual;使用concat()後面需要加表。mysql並嚴格遵循sql1990標準;
select ‘hello’ || ‘world’ from dual;
註意:字元串使用單引號‘’,不能使用雙引號“”,使用雙引號的是別名。
dual是偽表;
03-SQL和iSQLPLUS
A:sql、sqlplus、isqlplus區別
- sql:insert update delete等常見的sql語句,關鍵詞沒有縮寫。命令可以控制表中定義和數據;
- sqlplus:desc/ed/c/col/for等命令都是sqlplus命令,關鍵詞有縮寫,命令不能改變資料庫中的數據;訪問sqlplus服務埠是1158;
- isqlplus:是sqlplus是網頁版本的sqlplus。可以執行腳本,也可以運行腳本;訪問isqlplus服務需要訪問5560埠;
04-過濾where
A:where 後面比較運算符(>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null)
- 後面=可以接數據或者字元串,其中日期格式需要註意
如果select * from emp where hiredate=’81-09-08’ 執行會出現錯誤;
因為該日期字元串格式與oracle當前格式不一致,oralce無法處理成日期類型。但是可以修改日期格式;alter session|system set NLS_DATE_FORMATE=’yy-mm-dd’.select * from v$nls_parameters; 可以查看到系統的所有變數;
- between and (包括邊界,小值在前,大值在後)
- in後面集合中可以加null,not in()集合中不能有null
- 註意:where 後面用於過濾或者連接其他表的條件,重點掌握常用>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null操作;
05-邏輯運算符和排序
A:where 後面使用邏輯運算符(and ,or ,not)
註意:condition1 and condition2 和condition2 and condition1的區別;解析的順序是從右邊到左邊;explain plan for select * from emp where condition1 and condition2;
B:查詢排序(order by)
order by 列名/表達式/別名/序列. 且order by 後面可以接多個列
如果列中有值為null,則desc排序會出現null值行在前null最大,為瞭解決該問題:
select * from emp order by comm desc nulls last;
註意:order by 多個列參與排序的特殊性。
06-函數簡介
A:單行函數和多行函數
註意:操作返回一行數據的函數叫單行函數,操作返回的多行數據的函數叫多行函數;
07-字元函數和數值函數
A:字元函數
- 大小寫控制
B:數值函數
- round():四捨五入
- truncate():截斷
註意:重點掌握length(),substr(),instr(),round().
08-日期函數
A:日期函數
Oracle中提供了很多和日期相關的函數,包括日期的加減,在日期加減時有一些規律
日期 – 數字 = 日期
日期 + 數字 = 日期
日期 – 日期 = 數字
09-轉換函數
A:oracle中隱式轉換(查百度)
B:to_char():日期轉換成字元串,數字轉換成字元
C:to_number():字元串轉換成數字
D:to_date():字元串轉換成日期
註意:掌握to_char(),to_number(),to_date() ,3個轉換函數;
10-通用函數和條件表達式
A:通用函數
- nvl(expr1,expr2) 如果repr1是null則把expr1處理成expr2
- nvl2(expr1,expr2,expr3),如果repr1不為null,則值為expr2,為null則返回expr3
- nullif(expr1,expr2),如果repr1=repr2,則返回null,否則返回expr1
- coalesce(expr1,expr2….), 依次參考各參數表達式,遇到非null值即停止並返回該值。
如果所有的表達式都是空值,最終將返回一個空值B:條件表達式- case xx when xx then xx when xxx then xx else xx end;
- decode()
註意:nvl(),nvlif()和2個條件語句必須掌握。
11-多行函數
A:分組函數(avg(),max(),min(),count(),sum())
B:分組
group by having order by
註意:多行函數在sql中的使用;