一、簡(jiǎn)單查詢語(yǔ)句 ================ 1、查詢所有列 select * from dept;--做練習(xí)可以,真正做開發(fā)不要這樣。 2、查詢指定列 desc emp; select empno, ename, sal, job from emp; 3、查詢?nèi)掌诹?/p> select ename, to_char(hiredate, 'yyyy-mm-dd') from emp; 4、取消重復(fù)行 select distinct deptno, job from emp; 5、使用算術(shù)表達(dá)式 select ename, sal, sal * 12 from emp 6、使用列別名 select ename as NAME, sal * 12 as "ANNUALSALARY" from emp; 7、處理NULL select ename, sal, comm, sal + comm from emp; select ename, sal, comm, sal + nvl(comm, 0) from emp; 8、連接字符串 select ename || '的崗位是' || job from emp; 9、去掉結(jié)果中的重復(fù)行 select distinct job from emp; 二、限制數(shù)據(jù) ============ 1、在where子句中使用數(shù)字值 select ename, sal from emp where sal > 2000; 2、在where子句中使用字符值 select ename, sal from emp where job = 'MANAGER'; 3、在where子句中使用日期值 select ename, sal, hiredate from emp where hiredate > '01-1月-82'; 4、在where子句中使用between...and操作符 select ename, sal, deptno from emp where sal between 2000 and 3000; 5、在where子句中使用like操作符 %:表示0個(gè)或多個(gè)字符 _:表示單個(gè)字符 select ename, sal, deptno from emp where ename like 'S%'; select ename, sal, deptno from emp where ename like '__O'; select ename, sal, deptno from emp where ename like '%a_'; 6、在where子句中使用in操作符 select ename, sal, deptno from emp where job in ('CLERK', 'MANAGER'); 7、在where子句中使用is null操作符 select ename, sal, deptno from emp where mgr is null; 8、在where子句中使用and操作符 select ename, sal, deptno from emp where deptno = 20 and job = 'CLERK'; 9、在where子句中使用not操作符 select ename, sal, deptno from emp where comm is not null; 10、顯示表中前幾行內(nèi)容 select * from emp where rownum <= 3; 偽列 rownum rowid 三、排序數(shù)據(jù) ============ 1、升序排序 select ename, sal, deptno from emp order by sal; 2、降序排序 select ename, sal, deptno from emp order by sal desc; 3、使用多列排序 select ename, sal, deptno from emp order by deptno asc, sal desc; 4、使用非選擇列表進(jìn)行排序 select ename, deptno from emp order by sal desc; 5、使用列別名排序 select ename, sal * 12 年收入, deptno from emp order by 年收入 desc; 6、使用列位置排序 select deptno, ename, sal from emp order by 1; 四、復(fù)雜查詢 ============ 1、數(shù)據(jù)分組 1)分組函數(shù) max和min select max(sal) 最高工資, min(sal) 最低工資 from emp; avg和sum select avg(sal) 平均工資, sum(sal) 總計(jì)工資 from emp; count select count(*) 雇員總數(shù) from emp; count(表達(dá)式) 顯示非null的總計(jì)行數(shù) 2)group by和having子句 使用group by進(jìn)行單列分組 select deptno, avg(sal) from emp group by deptno; 使用group by進(jìn)行多列分組 select deptno, job, avg(sal), max(sal) from emp group by deptno, job; 使用having子句限制分組顯示結(jié)果 select deptno, avg(sal) from emp group by deptno having avg(sal) < 2500; 使用order by子句改變分組排序結(jié)果 select deptno, avg(sal) from emp group by deptno order by avg(sal); 使用數(shù)據(jù)分組的注意事項(xiàng) 分組函數(shù)只能出現(xiàn)在選擇列表、having子句和order by子句中。 如果同時(shí)包含有g(shù)roup by、having以及order by子句,則必須將子句放在最后 如果選擇列表包含有列、表達(dá)式和分組函數(shù),則這些列和表達(dá)式必須出現(xiàn)在group by子句中,否則會(huì)顯示錯(cuò)誤信息。 當(dāng)限制分組顯示結(jié)果時(shí),必須使用having子句,而不能在where子句中使用分組函數(shù),否則會(huì)顯示錯(cuò)誤信息。 2、連接查詢 連接查詢是指基于兩個(gè)或兩個(gè)以上表或視圖的查詢。 當(dāng)使用連接查詢時(shí),必須在from子句后指定兩個(gè)或兩個(gè)以上的表當(dāng)使用連接查詢時(shí),如果不同表之間的列名相同,則必須在列名前加上表名作前綴,否則會(huì)造成二義性。 當(dāng)使用連接查詢時(shí),必須在where子句中指定有效的連接條件,否則會(huì)導(dǎo)致生成笛卡爾集。 當(dāng)進(jìn)行連接查詢時(shí),使用表別名可以簡(jiǎn)化連接查詢語(yǔ)句。 相等連接 是指使用相等比較符指定連接條件的連接查詢,主要用于檢索主從表之間的相關(guān)數(shù)據(jù)。 select e.ename, e.sal, d.dname from emp e, dept d where e.deptno = d.deptno; select d.dname, e.ename, e.sal from emp e, dept d where d.deptno = e.deptno and d.deptno = 10; 不等連接 select a.ename, a.sal, b.grade from emp a, salgrade b where a.sal between b.losal and hisal; 自連接 是指在同一張表之間的連接查詢,主要用于在自參照表上顯示上下級(jí)關(guān)系或?qū)哟侮P(guān)系 select worker.ename, manager.ename from emp manager, emp worker where manager.empno = worker.mgr; 內(nèi)連接與外連接 內(nèi)連接用于返回滿足連接條件的所有記錄。 select d.dname, e.ename from dept d, emp e where d.deptno = e.deptno and d.deptno = 10; 左外連接 使用左外連接時(shí),不僅會(huì)返回滿足條件的所有記錄,而且還會(huì)返回不滿足連接條件的連接操作符左邊表 的其他行。 select d.dname, e.ename from dept d left join emp e on d.deptno = e.deptno and d.deptno = 10; 右外連接 使用右外連接時(shí),不僅會(huì)返回滿足條件的所有記錄,而且還會(huì)返回不滿足連接條件的連接操作符右邊表的其他行。 select d.dname, e.ename from dept d right join emp e on d.deptno = e.deptno and d.deptno = 10; 完全外連接 使用右外連接時(shí),不僅會(huì)返回滿足條件的所有記錄,而且還會(huì)返回不滿足連接條件的所有其他行。 select d.dname, e.ename from dept d right join emp e on d.deptno = e.deptno and d.deptno = 10; 外連接也可使用(+)操作符。 使用(+)操作符進(jìn)行外連接時(shí),應(yīng)該將該操作符放在顯示較少行的一端。 (+)操作符只能出現(xiàn)在where子句中,且不能與outer join語(yǔ)法同時(shí)使用 使用(+)操作符進(jìn)行外連接時(shí),如果在where子句中包含多個(gè)條件,則必須在所有條件中都包含(+)操作符。 (+)操作符只適用于列,而不能用在表達(dá)式上。 (+)操作符不能與on和in一起使用。 (+)操作符只能用于左或右外連接,不能用于完全外連接。 |
|