desc emp顯示emp表的結構
dual 是一個特殊的表,裏面沒有任何數據
select 語句:
計算數學表達式:select from 3*2 from dual
重命名的形式輸出: select 3*2 as mult_result from dual;
注意中間的as可以省略不寫,且中間不能用空格隔開(eg:mult result );要想用空格隔開mult result 加上雙引號“”後將可以原樣輸出;as後面的重命名要麼加雙引號要麼不加,使用單引號將會出錯。而插入值時除了number類型的值,其他類型的值都要用單引號括起來
空值運算函數:nvl(name,number)
任何運算法則(加減乘除)與含有空值的字段的運算結果都是空值,nvl(name,number)可以用number值來代替name字段爲null處的值
eg: select ename ,sal *12+nvl(comm,0) from emp //表示如果comm列裏面的值是空值,則用0代替,如果不是空值,則不起任何作用
查詢空值情況:
* 不能用‘=’作爲判斷連接詞,不是空就是 is not null
eg:select * from a_tbl where money is null
字符串的連接用||
連接字符:select ename || 'fdfdfdfd' from emp;
如果連接的字符裏面已經有一個單引號了,就用兩個單引號代替一個單引號;
如:select ename || 'fdf''dfdfd' from emp;
dintinct 表示去掉重複的,修飾多個字段的組合的時候表示把這多個字段組成的重複的記錄消除掉
模糊查詢:like
eg:select name from a_tbl where name like '%lms%'
_代表一個字母,如:查詢第二個字母爲a的姓名 like '_a%'
默認的轉義字符是\
eg:當模糊查詢的條件裏面就有%時查詢語句如下: like '%\%%'
當不使用\作爲轉義字符寫法如下(轉義字符爲$):select name from a_tbl where name like '%$%%' escape '$'
in
eg: select * from a_tbl where name in ('張三','李四','王五');
排序:order by(desc降序,asc升序),order by 默認爲asc
eg:select * from emp order by EMPNO desc
兩個字段進行排序:select * from emp order by EMPNO desc,sal desc
如果使用列的別名進行查詢,那麼列的別名要用雙引號括起來
eg:select sal as "月工資" from emp order by "月工資" desc;
字符串操作函數:
lower(char),upper(char) 大小寫的轉換
eg:select name from a_tbl where lower(name) like '_a%' 查詢所有姓名的第二個字符爲(a/A)的姓名
length(char) 獲取字符串的長度
substr(str,beginIndex,login)截字符串,從1開始
eg:select substr(name,2,3) from a_tbl 從name第二個字符開始截取name值一個截取三個字符
chr(int):將ascii碼轉換爲字符
eg:select chr(65) from dual
ascii(char):將字符轉換爲ascii碼
eg:select chr('a') from dual
replace (char,search_string,replace_string)替換字符串中的字符
eg:將僱員名字中的字母'A'替換成'我是A'
select replace(ename,'A','我是A') from emp;
instr(char1,char2,[,n[,m]])取子串在字符串中的位置
常用字符串函數綜合應用
以首字母大寫的形式顯示所有員工姓名
select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) as "姓名" from emp;
數學函數:
數學函數的輸入參數和返回值類型都是數字類型的,數學函數包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round,最常用的有如下幾個
round(c,[m]):該函數用於執行四捨五入,如果省掉m,則四捨五入到整數;如果m是正數,就四捨五入到小數點的m位後,如果是負數,則四捨五入到小數點的m位前
eg:select round(23.652) from dual 結果爲:24
eg:select round(23.652,1) from dual 結果爲:23.7
eg:select round(23.652,-1) from dual 結果爲:20
trunc(c,[m])該函數用於截取數字,如果省掉m,就截取去小數部分,如果m是正數就截取到小數點的m位後,如果m是負數,就截取到小數點的前m位
eg:select trunc(23.652) from dual; 結果爲23
eg: select trunc(23.652,1) from dual;結果爲23.6
select trunc(23.652,-1) from dual;結果爲20
mod(m,n)取模的餘數
eg:select mod(23,6) from dual; 結果爲5
eg:select mod(23.5,6) from dual; 結果爲5.5
floor(n)返回小於或是等於n的最大整數,向下取整
eg:select floor(23.6) from dual;返回23
ceil(n)返回大於或是等於n的最小整數,向上取整
eg:select ceil(23.6) from dual;返回24
eg:顯示一個月爲30天的情況所有員工的日薪金,忽略餘數
第一種寫法:select trunc(sal/30) as "日薪" from emp;
第二種寫法:select floor(sal/30) as "日薪" from emp;
對數字的處理,在財務系統或銀行系統中用的最多,不同的處理方法,對財務報表會有不同的結果
其他的數學函數
abs(n)返回數字的絕對值
acos(n)返回數字的反餘弦值
asin(n)返回數字的反正弦值
atan(n)返回數字的反正切值
cos(n)返回餘弦值
exp(n)返回e的n次冪
log(m,n)返回對數值
power(m,n)返回m的n次冪
日期函數
日期函數用於處理date類型的數據
默認情況下日期格式是dd-mon-yy即12-7月-88
(1)sysdate:返回系統時間
eg:select sysdate from dual;返回值是2011-10-26
(2)add_months(d,n)
返回入職日期大於300個月的員工信息
eg:select * from emp where sysdate>add_months(hiredate,300);
(3)last_day(d)返回制定日期所在的月份的最後一天
eg:查出各月倒數第三天被僱傭的員工
select hiredate,ename from emp where last_day(hiredate)-2=hiredate;
eg:輸入每個員工的入職日期
select trunc(sysdate-hiredate) as "入職天數" from emp;
轉換函數
to_char():把數字或者日期轉換爲某種格式
to_date();把日期類型的字符串轉換成日期類型
to_numbrt()把字符轉換成數據類型
eg:select to_char(sal,'$999,999.999')from emp; //9代表的一位,當給定的格式位數不夠時將顯示爲##的形式
eg: select to_char(sal,'L999,999.999')from emp; //L代表本地貨幣,不區分大小寫,位數不夠同上
eg; select to_char(sal,'000000000000.00')from emp; //0代表一位數字,且位數不夠的用0代替,位數不夠同上
eg; select to_char(sysdate,'YYYY-MM-DD HH:MI:SS') from dual// 輸出格式爲:2008-10-2 02:20:30 ,HH默認爲12時制,sysdate表示當前時間
eg; select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual//輸出格式爲24時制
eg: to_date('2008-01-01','yyyy-mm-dd') //將字符串'2008-01-01'轉換成'yyyy-mm-dd'的date類型
eg : select to_number('$888,888.00,'$999,999.00'')
eg:select to_char(sysdate,'yyyy') from dual; //返回2011
系統函數
terminal:當前會話客戶所對應的終端標識符
language:語言
db_name:當前數據庫名稱
nls_date_formate:當前會話客戶所對應的日期格式
session_user:當前會話客戶所對應的數據庫用戶名
current_schema:當前會話客戶所對應的默認方案名(一個用戶對應一個方案,用戶名與方案名相同)
host:返回數據庫所在主機的名稱
host:返回數據庫所在主機的名稱
通過該函數,可以查詢一些重要信息,比如你在使用哪個數據庫?
eg:select sys_context('userenv','db_name') from dual;
其它的還有>,<,<>,他們不僅可以比較數字還可以比較字符串與日期,當比較字符串時比較第一個不相同的字符的ascii碼值,當比較日期時要求進行比較的日期的格式一致
還有:between,and,or等
比較日期可以用如下形式
select * from table
where 日期字段 between to_date('2008-01-01','yyyy-mm-dd')
and to_date('2008-10-20','yyyy-mm-dd')