Oracle學(xué)習(xí)筆記(2)范圍查詢,模糊查詢,單行行數(shù),多表查詢
--day02-----------------------------------------------------------------------------------------------
目標(biāo)
1. 范圍查詢。從...到...
2. 模糊查詢.以什么開頭,以什么結(jié)尾,包含什么
3. 單行行數(shù):字符函數(shù)、數(shù)字函數(shù)、轉(zhuǎn)換函數(shù)
4. 多表查詢(簡寫版)
1.查工資從1000~2500的員工信息
select ename,sal from emp where sal>=1000 and sal<=2500; --and 邏輯與,兩邊都成立返回true
--or 邏輯或,有一遍成立返回true
針對范圍查詢關(guān)鍵字:between ...小... and ...大...
select eName,sal from emp where sal between 1000 and 2500;
2.模糊查詢
模糊查詢即像什么一樣,語法:列名 like '%X%' %任意多個(gè)字符 _任意一個(gè)字符
select * from dept where dName like '%O%'; --部門名稱包含“O”的部門信息
select * from Dept where dName like 'A%'; --部門名稱以“A”開頭的部門信息
select * from Dept where dName like '_A%'; --部門名稱中“A”是第2個(gè)字符的部門信息
3.單行函數(shù)
專用來做測試查詢的表:dual 此表1行1列的值
字符函數(shù):
轉(zhuǎn)大寫 upper('字符') select upper('abcDEF') from dual; 'ABCDEF'
轉(zhuǎn)小寫 lower('字符') select lower('abcDEF') from dual; 'abcdef'
首字符大寫 initcap('字符') select initcap('miss.wu') from dual; 'Miss.Wu'
練習(xí):查部門所在地區(qū)NEW YORK要求不區(qū)分大小寫
select * from dept where lower(loc) = lower('New York');
鏈接 concat('字符1','字符2') select concat('abc','def') from dual; 'abcdef'
獲得長度 length('字符') select length('abcde') from dual; 5
截取 substr('字符',啟點(diǎn),幾個(gè)); select substr('abcde',2,3) from dual; 'bcd'
select substr('abcde',-2,1) from dual; 'd'
注意啟點(diǎn)是正數(shù)時(shí)從前向后的第N個(gè)字符開始,向后截取幾個(gè)
? ? 啟點(diǎn)是負(fù)數(shù)時(shí)從后向前的第N個(gè)字符開始,向后截取幾個(gè)
練習(xí):顯示部門信息,部門名稱、所在區(qū)域最多承載5個(gè)字符顯示位
select deptNo,subStr(dName,1,5)||'...' deptName,substr(loc,1,5)||'...' deptLoc? from dept;
數(shù)學(xué)函數(shù):
四舍五入 round(數(shù)值,有效位數(shù)) select round(1255.55) from dual; 1256
select round(1255.55,1) from dual; 1255.6
select round(1255.55,-1) from dual; 1260
全舍去 trunc(數(shù)值,有效為主) select trunc(1255.55) from dual; 1255
select trunc(1255.55,1) from dual; 1255.5
select trunc(1255.55,-1) from dual; 1250
練習(xí):SMITH此員工在干1/3的時(shí)離職,因此工資只拿1/3
select eName,sal,trunc(sal/3,1) from emp where upper(eName)=upper('smith');
轉(zhuǎn)換函數(shù):
字符轉(zhuǎn)數(shù)值* to_number('字符') select to_number('123') from dual;
字符轉(zhuǎn)日期* to_date('字符','yyyy-mm-dd hh:mi:ss')?
select to_date('2018-01-04','yyyy-mm-dd') from dual;
顯示 '04-01-2018'
數(shù)值轉(zhuǎn)字符/日期轉(zhuǎn)字符 to_char(日期,'格式')
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
返回系統(tǒng)日期 2018-04-04 12:00:23
select to_char(800,'$9999.99') from dual;
返回字符:'$800.00'
格式說明:
9? --? 任意1個(gè)字符,小數(shù)點(diǎn)前不強(qiáng)制補(bǔ)0,小數(shù)點(diǎn)后強(qiáng)制補(bǔ)0
0? --? 任意1個(gè)字符,小數(shù)點(diǎn)前后強(qiáng)制補(bǔ)0
$? --? 貨幣符號:美金
L? --? 貨幣符號:本地
yyyy -- 年 mm -- 月 dd--日
hh? -- 小時(shí)(12進(jìn)制) hh24 -- 小時(shí)(24進(jìn)制)
mi? -- 分鐘 ss -- 秒
獲取明天的日期:select to_char( sysdate+1 ,'yyyy-mm-dd hh24:mi:ss' ) from dual;
練習(xí):查詢時(shí)當(dāng)月當(dāng)天入職的員工信息(請調(diào)整系統(tǒng)時(shí)間2月22日)
SQL> select empNo,eName,to_char(HIREDATE,'yyyy-mm-dd') from emp
? 2? ? where to_char(HIREDATE,'mm') = to_char(sysdate,'mm')
? 3? ? ? and to_char(HIREDATE,'dd') = to_char(sysdate,'dd');
4、多表查詢(簡版)
? ?內(nèi)鏈查詢:顯示是多表的共有數(shù)據(jù)(你有、我有、他也有,大家都有的數(shù)據(jù))
思考題:一句查詢語句顯示員工姓名和部門名稱,怎么辦?怎么辦?怎么辦?
員工姓名eName 在員工表emp中
部門名稱dName 在部門表dept中
分析emp員工表與dept部門表的結(jié)構(gòu)中都有一個(gè)deptNo部門編號
答:select e.eName,e.deptNo, d.deptNo,d.dName from emp e,dept d
? ? ? ? where e.deptNo = d.deptNo;
解:員工“KING ”的部門是10,10號部門是 《ACCOUNTING》
? ? 外鏈查詢:顯示(+)對面表的所有數(shù)據(jù)
思考題:顯示所有員工信息(共13行),沒有部門的員工部門信息補(bǔ)null
答:select e.eName,e.deptNo,d.deptNo,d.dName from emp e,dept d
? ? where e.deptNo = d.deptNo(+);
思考題:顯示沒有員工的部門信息
答:select d.deptNo,d.dName,d.loc from dept d,emp e
? ? where e.deptNo(+) = d.deptNo
? ? ? and e.eName is null;