本文實(shí)例講述了oracle基本查詢用法。分享給大家供大家參考,具體如下:
一、基本select語(yǔ)句
SELECT *|{[DISTINCT] column|expression [alias], ...}
FROM table;
例如:
--查詢所有數(shù)據(jù)
select * from emp;
--查詢指定列數(shù)據(jù)
select empno,ename,sal from emp;
--算數(shù)運(yùn)算符(+ - * /)
select ename,sal,sal+30 from emp;
--使用括號(hào)
select ename,sal,12*(sal+30) from emp;
--定義空值
--(空值是無(wú)效的,未指定,未知的或不可預(yù)知的值,空值不是空格或是0)
select ename,job,sal,comm from emp;
--空值的數(shù)學(xué)運(yùn)算
--包含空值的數(shù)學(xué)表達(dá)式的值都為空值
select ename,12*sal+comm from emp;
--列的別名
--別名使用雙引號(hào),AS可以省略
select deptno as "no",ename as "name" from emp;
--連接符,把列與列,列與字符連接在一起
select deptno || '--' || ename from emp;
--字符串
--日期和字符只能在單引號(hào)中出現(xiàn)
select 'hello ' || ename from emp;
--刪除重復(fù)行
select distinct deptno from emp;
--顯示表結(jié)構(gòu)
desc[ribe] tablename;
二、過(guò)濾和排序
SELECT *|{[DISTINCT] column|expression [alias], ...}
FROM table
[WHERE condition(s)];
例如:
--查詢指定條件數(shù)據(jù)
select deptno,ename from emp where deptno=10;
--字符串和日期包含在單引號(hào)中
--字符串大小寫(xiě)敏感,日期格式敏感
select ename,job,deptno from emp where ename='King';
--比較運(yùn)算符(= > = >= > !=)
select ename,sal from emp where sal1500;
--其他比較運(yùn)算符
--BETWEEN ... AND ... 在兩個(gè)值之間包含邊界
--IN(set) 等于值列表中的一個(gè)
--LIKE 模糊查詢
--IS NULL 空值
select ename,sal,deptno from emp where deptno in(10,30);
select ename,sal,comm from emp where comm is null;
--邏輯運(yùn)算(AND OR NOT)
select ename,sal from emp where deptno=10 and sal>1500;
排序
例如:
select ename,sal from emp order by sal desc;
--多列排序
--先按第一列排序,如果相同,則按第二列排序,以此類推
select * from emp order by sal desc,hiredate desc;
三、單行函數(shù)
1、字符函數(shù)
--LOWER 轉(zhuǎn)換小寫(xiě)
--UPPER 轉(zhuǎn)換大寫(xiě)
--INITCAP 首字母大寫(xiě)
select lower(ename) from emp;
--CONCAT 接接字符串
--SUBSTR 截取字符串
--LENGTH 字符串長(zhǎng)度
--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;
--從尾部刪除字符串*號(hào)
select trim(trailing '*' from '**1212121**') from emp;
--把字符串中的22替換成88
select replace('11223344', '22', '88') from emp;
2、數(shù)字函數(shù)
--ROUND 四舍五入
--TRUNC 截?cái)?
--MOD 求余
select round(25.533,2) from dual;
select trunc(25.323,2) from dual;
select mod(8, 3) from dual;
3、日期
oracle中日期型數(shù)據(jù)實(shí)際含有兩個(gè)值:日期和時(shí)間。
默認(rèn)格式為:DD-MON-RR
--返回系統(tǒng)時(shí)間
select sysdate from dual;
--兩個(gè)日期相減,返回日期之間相差的天數(shù)
select ename,(sysdate-hiredate) / 7 "weeks" from emp;
--MONTHS_BETWEEN 兩日期相差月數(shù)
--ADD_MONTHS 指定日期加上若干月數(shù)
--NEXT_DAY 指定日期的下一個(gè)日期
--LAST_DAY 本月的最后一天
--ROUND 日期四舍五入
--TRUNC 日期截?cái)?
select months_between(sysdate,hiredate) from emp;
4、顯式數(shù)據(jù)類型轉(zhuǎn)換
--TO_CHAR(date, 'format_model')
--把日期轉(zhuǎn)換成字符串
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'])
通用函數(shù),適用于任何數(shù)據(jù)類型,也適用于空值
NVL(expr1,expr2)
NVL2(expr1,expr2,expr3)
NULLIF(expr1,expr2)
COALESCE(expr1,expr2,...)
5、條件表達(dá)式
在sql語(yǔ)句中使用if-then-else邏輯
case表達(dá)式,sql99語(yǔ)法,類似basic,比較繁鎖
decode函數(shù),oracle自已語(yǔ)法,類似java,比較簡(jiǎn)潔
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,sal,decode(round(sal/1000),
1, '一倍',
2, '二倍',
3, '三倍',
'不知倍數(shù)'
) from emp;
6、函數(shù)嵌套
單行函數(shù)可以嵌套,嵌套函數(shù)的執(zhí)行是由內(nèi)到外。
四、分組函數(shù)
分組函數(shù)作用于一組數(shù)據(jù),并對(duì)一組數(shù)據(jù)返回一個(gè)值。
常用組函數(shù)
--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;
分組數(shù)據(jù)
通過(guò)GROUP BY可以將數(shù)據(jù)分成若干組
select deptno,avg(sal) from emp group by deptno;
(*注意:在select列表中所有未包含在組函數(shù)中的列都必須包含在group by中。)
--多列分組
select deptno,job,avg(sal) from emp group by deptno,job;
過(guò)濾分組
通過(guò)HAVING子句對(duì)分組進(jìn)行過(guò)濾
select deptno,avg(sal) from emp group by deptno having deptno in(10,20);
(*注意:不能在where子句中使用組函數(shù),having子句中可以。)
嵌套組函數(shù)
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、使用表別名可簡(jiǎn)化查詢
2、使用表名前綴可以提高執(zhí)行效率
3、如果使用了表的別名,則不能再使用表的真名。
--不等值連接
--查詢員工部門(mén)名稱和工資等級(jí)
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;
外連接語(yǔ)法
外連接查詢可以查詢不滿足連接條件的數(shù)據(jù)。
外連接的符號(hào)是(+)
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(+) ;
--查詢部門(mén)人數(shù)
select d.dname, d.deptno, count(e.empno)
from emp e, dept d
where e.deptno(+) = d.deptno
group by d.deptno,d.dname;
自連接
--查詢員工的上級(jí)
select e.ename as "員工", e2.ename as "上級(jí)"
from emp e, emp e2
where e.empno = e2.mgr;
使用sql:1999語(yǔ)法連接
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連接的表產(chǎn)生叉集,叉集和笛卡爾集是相同的。
select e.ename,d.dname from emp e cross join dept d;
使作natural join自然連接,會(huì)以兩個(gè)表中具有相同名字的列為條件創(chuàng)建等值連接。
select e.ename,d.dname from emp e natural join dept d;
使用using創(chuàng)建連接,用natural join創(chuàng)建等值連接時(shí),可以使用using指定等值連接中需要用到的列。
select e.ename,d.dname from emp e join dept d USING (deptno);
使用on創(chuàng)建連接,可以指定額外的連接條件。
select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;
使用on創(chuàng)建多表連接
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;
內(nèi)連接和外連接
在sql:1999中,內(nèi)連接只返回滿足連接條件的數(shù)據(jù)。
兩個(gè)表在連接過(guò)程中除了返回滿足連接條件的行以外,還返回左(右)表中不滿足條件的行,這種稱為左(右)外連接。
兩個(gè)表在連接過(guò)程中除了返加滿足連接條件的行以外,還返回兩個(gè)表中不滿足條件的行,這種連接稱為滿外連接。
--左外連接
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;
更多關(guān)于Oracle相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Oracle常用函數(shù)匯總》、《Oracle日期與時(shí)間操作技巧總結(jié)》及《php+Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》
希望本文所述對(duì)大家Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- Oracle 11GR2的遞歸WITH子查詢方法
- Oracle基礎(chǔ)學(xué)習(xí)之子查詢
- Oracle數(shù)據(jù)庫(kù)中基本的查詢優(yōu)化與子查詢優(yōu)化講解
- Oracle通過(guò)遞歸查詢父子兄弟節(jié)點(diǎn)方法示例
- 一個(gè)oracle+PHP的查詢的例子
- oracle 查詢表名以及表的列名
- oracle查詢語(yǔ)句大全(oracle 基本命令大全一)
- oracle數(shù)據(jù)庫(kù)常用的99條查詢語(yǔ)句
- ORACLE查詢刪除重復(fù)記錄三種方法
- oracle常用sql查詢語(yǔ)句部分集合(圖文)
- oracle基本查詢操作子查詢用法實(shí)例分析