-
select rownum,empno,ename,sal from (select * from emp order by sal desc) where rownum<=3查看全部
-
rownum默認生成行號,即使用order by排序,也不會打亂rownum默認生成行號的順序 行號只能用< <= 不能用> >=查看全部
-
select * from emp where deptno=(select deptno from dept where dname='SALES'); 使用多表查詢: select e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES' ; 理論上應該盡量使用多表查詢,因為上面的子查詢有兩個from語句,所以要對數據庫訪問查詢兩次,而下面的多表查詢只訪問了一次!這是理論上的結論,并沒有考慮實際比如多表查詢中產生的笛卡爾積的大小,具體情況還是要具體對待。查看全部
-
示例一: select * from (select empno,ename,sal from emp); 示例二: select * from (select empno,ename,sal,12*sal 年薪 from emp);查看全部
-
group by后面不能跟子查詢!查看全部
-
where后面的子查詢中不能有分組函數 having后面的子查詢中可以有分組函數 select后面的子查詢得到的結果必須是單條記錄 from后面的子查詢得到的結果必須是多條記錄查看全部
-
121查看全部
-
子查詢注意查看全部
-
子查詢的使用查看全部
-
子查詢概述查看全部
-
自連接存在的問題: (1)自連接不適合操作大表,也就是記錄多的表,原因是自連接至少有兩張表參與,并進行笛卡爾全集,連接之后的記錄數就是單張表記錄數的平方(笛卡爾積行數是兩張表行數的乘積),如果有三張表記錄數就是原來的三次方,如果原來的表包含的記錄數過多,連接之后的結果就會很大,所以自連接不適合操作大表。解決辦法:層次查詢。注意層次查詢是單表查詢,不存在第二張表!因為只有在一張表的情況下才不會產生笛卡爾積,才能解決這個問題。 層次查詢在某些情況下可以替代自連接,本質上是單表查詢。 例: select empno,ename,sal,mgr from emp //層次查詢只涉及一張表 connect by prior empno=mgr //層次查詢的條件不用where表示,而用connect by表示,上一層的員工號=當前曾的老板號 start with mgr is null或者start with empno=7839; //stsrt with表示從何處開始遍歷查詢,只有從根節點開始時才可以使用 * is null 的格式,其余節點都只能使用第二種格式。 此外層次查詢的樹的深度用level表示,可以在select語句中加入level就可以得到深度的查詢結果,還可以對查詢結果進行排序如order by 1; 比較自連接和層次查詢的優劣: 自連接得到的查詢結果比較直觀但是不適合操作大表; 層次查詢只涉及一張表,不產生笛卡爾積,但是得到的結果不夠直觀。 所以不同的查詢語句有不同的特點,不是萬能的!查看全部
-
1.自連接<br> 優點:查詢的結果直觀<br> 缺點:是不適合大表查詢<br> 解決辦法:用層次查詢<br> <br> 2.層次查詢<br> 優點:屬于單表查詢,只有單表查詢才不會產生笛卡爾積<br> 缺點:查詢結果不太直觀 層次查詢屬于單表查詢,<br> 使用關鍵字prior,此關鍵字代表上一層,<br> 使用start with函數,區別開始于哪一層,<br> 此處可以使用該層的值表示,如果是首層,也可使用上一層為null條件表示。<br> 層次查詢中都會有level這個虛擬列,如果要顯示,必須在select后面一并查詢。查看全部
-
層次查詢的原理查看全部
-
層次查詢查看全部
-
自連接:通過別名,將同一張表視為多張表 查詢員工姓名和員工的老板姓名: select e.ename 員工姓名,b.ename 老板姓名 from emp e,emp b where e.mgr=b.empno; //員工的老板號=老板的員工號查看全部
舉報
0/150
提交
取消