您好,登錄后才能下訂單哦!
本文實例講述了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,sal,12*(sal+30) from emp; --定義空值 --(空值是無效的,未指定,未知的或不可預知的值,空值不是空格或是0) select ename,job,sal,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,job,deptno from emp where ename='King'; --比較運算符(= > < <= >= <> !=) select ename,sal from emp where sal<1500; --其他比較運算符 --BETWEEN ... AND ... 在兩個值之間包含邊界 --IN(set) 等于值列表中的一個 --LIKE 模糊查詢 --IS NULL 空值 select ename,sal,deptno from emp where deptno in(10,30); select ename,sal,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, '10', '*') 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,sal,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,expr2,...)
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, search2, result1 [,search3, result2, ..., ] [,defautl] )
select ename,sal,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,job,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,e.ename,e.sal from emp e, dept d where e.deptno=d.deptno and e.deptno=10;
表的別名
1、使用表別名可簡化查詢
2、使用表名前綴可以提高執行效率
3、如果使用了表的別名,則不能再使用表的真名。
--不等值連接 --查詢員工部門名稱和工資等級 select d.dname, e.ename, 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.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table1.column, table2.column FROM table1, 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數據庫程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。