oracle基本查詢用法入門示例
本文例項講述了oracle基本查詢用法。分享給大家供大家參考,具體如下:
一、基本select語句
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;
例如:
--查詢所有資料 select * from emp; --查詢指定列資料 select empno,ename,sal from emp; --算數運算子(+ - * /) select ename,sal,sal+30 from emp; --使用括號 select ename,12*(sal+30) from emp; --定義空值 --(空值是無效的,未指定,未知的或不可預知的值,空值不是空格或是0) select ename,job,comm from emp; --空值的數學運算 --包含空值的數學表示式的值都為空值 select ename,12*sal+comm from emp; --列的別名 --別名使用雙引號,AS可以省略 select deptno as "no",ename as "name" from emp; --連線符,把列與列,列與字元連線在一起 select deptno || '--' || ename from emp; --字串 --日期和字元只能在單引號中出現 select 'hello ' || ename from emp; --刪除重複行 select distinct deptno from emp; --顯示錶結構 desc[ribe] tablename;
二、過濾和排序
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE condition(s)];
例如:
--查詢指定條件資料 select deptno,ename from emp where deptno=10; --字串和日期包含在單引號中 --字串大小寫敏感,日期格式敏感 select ename,deptno from emp where ename='King'; --比較運算子(= > < <= >= <> !=) select ename,sal from emp where sal<1500; --其他比較運算子 --BETWEEN ... AND ... 在兩個值之間包含邊界 --IN(set) 等於值列表中的一個 --LIKE 模糊查詢 --IS NULL 空值 select ename,deptno from emp where deptno in(10,30); select ename,comm from emp where comm is null; --邏輯運算(AND OR NOT) select ename,sal from emp where deptno=10 and sal>1500;
排序
ORDER BY 欄位 [DESC|ASC]
例如:
select ename,sal from emp order by sal desc; --多列排序 --先按第一列排序,如果相同,則按第二列排序,以此類推 select * from emp order by sal desc,hiredate desc;
三、單行函式
1、字元函式
--LOWER 轉換小寫 --UPPER 轉換大寫 --INITCAP 首字母大寫 select lower(ename) from emp; --CONCAT 接接字串 --SUBSTR 擷取字串 --LENGTH 字串長度 --INSTR 查詢字串 --LPAD 左邊填充字元 --RPAD 右邊填充字元 --TRIM([leading|trailing|both] 字串1 from 字串2) --TRIM可以刪除兩邊空格,也可刪除其他字元 --REPLACE 替換字串 select concat('aa','bb') from emp; select substr('abcdefg',2,3) from emp; select length('test...') from emp; select instr('hello world','w') from emp; select lpad(sal,'10','0') from emp; select rpad(sal,'*') from emp; select trim(' test ') from emp; --從尾部刪除字串*號 select trim(trailing '*' from '**1212121**') from emp; --把字串中的22替換成88 select replace('11223344','22','88') from emp;
2、數字函式
--ROUND 四捨五入 --TRUNC 截斷 --MOD 求餘 select round(25.533,2) from dual; select trunc(25.323,2) from dual; select mod(8,3) from dual;
3、日期
oracle中日期型資料實際含有兩個值:日期和時間。
預設格式為:DD-MON-RR
--返回系統時間 select sysdate from dual; --兩個日期相減,返回日期之間相差的天數 select ename,(sysdate-hiredate) / 7 "weeks" from emp; --MONTHS_BETWEEN 兩日期相差月數 --ADD_MONTHS 指定日期加上若干月數 --NEXT_DAY 指定日期的下一個日期 --LAST_DAY 本月的最後一天 --ROUND 日期四捨五入 --TRUNC 日期截斷 select months_between(sysdate,hiredate) from emp;
4、顯式資料型別轉換
--TO_CHAR(date,'format_model') --把日期轉換成字串 select to_char(sysdate,'YYYY MM DD HH:MI:SS') from dual; --TO_CHAR(number,'format_model') select ename,to_char(sal,'$99,999.00') from emp; --TO_NUMBER(char[,'format_model']) --TO_DATE(char[,'format_model'])
通用函式,適用於任何資料型別,也適用於空值
NVL(expr1,expr2) NVL2(expr1,expr2,expr3) NULLIF(expr1,expr2) COALESCE(expr1,...)
5、條件表示式
在sql語句中使用if-then-else邏輯
case表示式,sql99語法,類似basic,比較繁鎖
decode函式,oracle自已語法,類似java,比較簡潔
CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_expr3 THEN return_expr3 ELSE else_expr] END
DECODE(col|expression,search1,result1 [,search2,result2,...,] [,defautl] )
select ename,decode(round(sal/1000),1,'一倍', 2,'二倍', 3,'三倍','不知倍數' ) from emp;
6、函式巢狀
單行函式可以巢狀,巢狀函式的執行是由內到外。
四、分組函式
分組函式作用於一組資料,並對一組資料返回一個值。
常用組函式
--AVG --COUNT --MAX --MIN --SUM select sum(sal) as "total" from emp; select max(sal) from emp; select count(*) from emp where deptno=10; select count(distinct deptno) from emp;
分組資料
通過GROUP BY可以將資料分成若干組
select deptno,avg(sal) from emp group by deptno;
(*注意:在select列表中所有未包含在組函式中的列都必須包含在group by中。)
--多列分組 select deptno,avg(sal) from emp group by deptno,job;
過濾分組
通過HAVING子句對分組進行過濾
select deptno,avg(sal) from emp group by deptno having deptno in(10,20);
(*注意:不能在where子句中使用組函式,having子句中可以。)
巢狀組函式
select max(avg(sal)) from emp group by deptno;
五、多表查詢
oracle的連線 sql99的連線
等值連線 cross joins
不等值連線 natural joins
外連線 using clause
自連線 full or two sided outer joins
SELECT table1.column,table2.column FROM table1,table2 WHERE table1.column1=table2.column2;
--等值連線 select d.dname,e.ename,e.sal from emp e,dept d where e.deptno=d.deptno; --多連線條件和and操作符 select d.dname,dept d where e.deptno=d.deptno and e.deptno=10;
表的別名
1、使用表別名可簡化查詢
2、使用表名字首可以提高執行效率
3、如果使用了表的別名,則不能再使用表的真名。
--不等值連線 --查詢員工部門名稱和工資等級 select d.dname,e.sal,s.grade from emp e,dept d,salgrade s where e.deptno = d.deptno and e.sal >= s.losal and e.sal <= s.hisal;
外連線語法
外連線查詢可以查詢不滿足連線條件的資料。
外連線的符號是(+)
SELECT table1.column,table2 WHERE table1.column(+) = table2.column; SELECT table1.column,table2 WHERE table1.column= table2.column(+) ;
--查詢部門人數 select d.dname,d.deptno,count(e.empno) from emp e,dept d where e.deptno(+) = d.deptno group by d.deptno,d.dname;
自連線
--查詢員工的上級 select e.ename as "員工",e2.ename as "上級" from emp e,emp e2 where e.empno = e2.mgr;
使用sql:1999語法連線
SELECT table1.column,table2.column FROM table1 [CROSS JOIN table2] | [NATURAL JOIN table2] | [JOIN table2 USING (column_name)] | [JOIN table2 ON(table1.column_name=table2.column_name)] | [LEFT|RIGHT|FULL OUTER JOIN table2 ON(table1.column_name=table2.column_name)];
使用cross join連線的表產生叉集,叉集和笛卡爾集是相同的。
select e.ename,d.dname from emp e cross join dept d;
使作natural join自然連線,會以兩個表中具有相同名字的列為條件建立等值連線。
select e.ename,d.dname from emp e natural join dept d;
使用using建立連線,用natural join建立等值連線時,可以使用using指定等值連線中需要用到的列。
select e.ename,d.dname from emp e join dept d USING (deptno);
使用on建立連線,可以指定額外的連線條件。
select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;
使用on建立多表連線
select e.ename,d.dname,e2.ename from emp e join dept d on e.deptno = d.deptno join emp e2 on e.empno = e2.mgr;
內連線和外連線
在sql:1999中,內連線只返回滿足連線條件的資料。
兩個表在連線過程中除了返回滿足連線條件的行以外,還返回左(右)表中不滿足條件的行,這種稱為左(右)外連線。
兩個表在連線過程中除了返加滿足連線條件的行以外,還返回兩個表中不滿足條件的行,這種連線稱為滿外連線。
--左外連線 select e.ename,d.dname from emp e left outer join dept d on e.deptno = d.deptno;
--右外連線,返回右表中不滿足條件的行 select e.ename,d.dname from emp e right outer join dept d on e.deptno = d.deptno;
--滿外連線 select e.ename,d.dname from emp e full outer join dept d on e.deptno = d.deptno;
更多關於Oracle相關內容感興趣的讀者可檢視本站專題:《Oracle常用函式彙總》、《Oracle日期與時間操作技巧總結》及《php+Oracle資料庫程式設計技巧總結》
希望本文所述對大家Oracle資料庫程式設計有所幫助。