一、基本查詢 (表:emp 列:ename ,depton,sal 、表示換行) 1.查當前用戶 SQL> show user 2.查表結構 SQL> desc emp (emp:表名) --查詢出名稱、類型、是否為空 3.清屏 SQL> host cls 4.設置行寬 SQL> show line ...
一、基本查詢
(表:emp 列:ename ,depton,sal 、表示換行)
1.查當前用戶 SQL> show user
2.查表結構 SQL> desc emp (emp:表名) --查詢出名稱、類型、是否為空
3.清屏 SQL> host cls
4.設置行寬 SQL> show linesize 、 set linesize 120 設置列寬 SQL> col ename for a8 、 col sal for 9999
5.包含 null 的表達式都為 null 。
解決辦法:nvl(a,b) --如果 a為null 則返回 b;不為空返回 a
--nvl(a,b,c) 如果 a為null 則返回 b;否則返回 c
6.distinct:去掉重覆記錄 SQL> select distinct depton from emp
7.||:連接符 、concat:連接函數
SQL> select concat('hello',' world') from emp --註:select函數後面必須要有from關鍵字
8.偽表:dual
SQL> select 'hello' || ' world' 字元串 from dual 、 SQL> select ename||'的薪水是'||sal 信息 from emp
二、過濾,排序
1.註意:字元串的大小寫嚴格區分、日期格式敏感 如 DD-MON-RR:'17-11月-81'
2.修改日期格式 SQL > alter session set NLS_DATE_FORMAT='yyyy-mm-dd' --修改格式為2017-11-81
3.設置區間:between and --小值在前大值在後
4.在設置集合中:in SQL> select * from emp where deptno in (10,20)
--對應的,不在就是 not in 另外,如果及合作含有 null 則不能使用 not in 僅可使用 in
SQL> select * from emp where deptno in (10,20,null)
5.模糊查詢
查詢名字以 S 開頭的員工 SQL> select * from emp where ename like 'S%' --'%’表示n個字元
查詢名字是四個字的員工 SQL> select * from emp where ename like '----' --'_'表示單個字元
查詢名字中含有下劃線的 SQL> select * from emp where wname like '%\_%' --'\'表示轉義字元
6.排序:order by desc:降序 asc:升序 --by後參數可以直接寫數字,對應select列表中的列
多列排序 SQL> select * from emp order by deptno desc , sal desc --desc只作用於它前面的列
為保證空值在後面可以添加 nulls last --預設null是最大的值
三、函數
1.字元函數
1)SQL> select lower('Hello World') 轉小寫,upper('Hello World') 轉大寫,initcap('hello world') 首字母大寫
2)substr --取子字元串 SQL> select substr ('hello world',4) 子串 from dual
3)length/lengthb 字元/位元組 數 SQL> select length('hello world') 字元,lengthb('hello world') 位元組 from dual
4)instr(a,b) --在a中查找b SQL> select instr('hello world','ll') 位置 from dual
5)lpad/rpad --左/右 填充 SQL> select lpad('abcd',10,'*') --在abcd左填充6個*使串達到10位
6)trim --去掉前後指定的字元 SQL> select trim('H' from 'Hello WorldH') from dual --取兩個H中間部分
7)replace --不顯示某字元 SQL> select replace('hello world','l','*') from dual --用*代替 l
2.四捨五入 round
SQL> select round(45.926,1) 1,round(45.926,0) 2,round(45.926,-1) 3,round(45.926,-2)
1--45.9 、2--46 、 3--50 、 4--0
3.當前時間 sysdate 10個月後:add_months(sysdate,10)
4.根據job不同進行不同操作
1) select ename,job,sal,
case job when 'yuangong' then sal+800
when 'jingli' then sal+1000
else sal+500
from emp
2) select ename,job,sal,
decode(job,'yuangong',sal+800,
'jingli',sal+1000,
sal+500)
from emp
5.求和:sum(列名) 求記錄數:count(*/列名) 求平均:avg(列名)
6.having:可以使用多行函數而where不行
select deptno,avg(sal) from emp group by deptno having deptno=10
四、多表聯查
1.外連 SQL> select d.deptno,d.dname,count(e.empno) from emp e,dept d where ~
左外連會把最後不成立的左表項包含在結果中,右外連則包含右表
2.子查詢
1)可以在主查詢的 where select having from 後使用子查詢
2.除top-n問題外一般不在子查詢中排序
五、對錶的操作
1.取另表數據創表 SQL> create table emp00 as select * from emp where deptno=20
SQL> create table empinfo as
select e.empno,e.ename,e.sal,d.dname from emp e,dept where e.deptno=d.deptno
2.修改列 SQL> alter table emp modify ename varchar2(40)
刪除列 SQL> alter table emp drop column photo
重命名列 SQL> alter table emp rename column tname to username
重命名錶 SQL> rename text1 to text2
六、其它
1.分頁
SQL> select *
from (select rownum r,e1.* from (select * from emp order by sal ) e1
where rownum <= 8 )
) where r >= 5