-
常用分組函數
avg
sum
min
max
count
wm_concat:行轉列
查看全部 -
分組函數概念及其使用
查看全部 -
如何用mysql來解決這個最后一個的聯系查看全部
-
rollup(deptno,job)查看全部
-
having用在分組函數中,用于過濾查看全部
-
oracle的分組函數會過濾空值,建議?NVL賦值查看全部
-
wm_concat行轉列查看全部
-
當一個結果有兩種解法,就是實現一個功能可以是多種sql語句時,可以通過執行計劃查看哪個的效率更高 -----
explain plan for ?sql語句;
select * from table (dbm_xplan.display);
查看全部 -
示例一
rownum 只能使用<,<=,不能使用> , >=
行號的生成機制:oracle數據庫是一個行式數據庫(即:取了第一行才能取第二行,取了第二行才能取第三行,以此類推)
oracle實現分頁查詢是通過嵌套子查詢實現的
--分頁查詢,先排序,每頁4行,查詢第二頁(就是行號從5~8)
select r,empno,sal
from (select rownum r,empno,ename,sal
from (select rownum,empno,ename,sal from emp order by sal desc) e1
where rownum<=8) e2
where r>=5;
查看全部 -
多行子查詢中的null值問題
One of the values returned by the inner query is a null value,and hence the entire query returns no rows.The reason is that all conditions that compare a null value result in a null.So whenever null values are likely to be part of the results set of a subquery,do not use the not in operator.The NOT IN operator is quivalent to <>ALL.
Notice that the null value as part of the results set of a subquery is not a problem if you use the IN operator.The IN operator is equivalent to =ANY.For example,to display the employees who have subordinates,use the following SQL statement:
SELECT * FROM emp WHERE empno IN (SELECT mgr FROM EMP);
Alternatively,a WHERE clause can be included in the subquery to display all employees who do not have any subordinates:
SELECT * FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL);
-----如果多行子查詢出現null值,再使用not in進行多行子查詢,將查不到任何記錄,因為此時相當于不等于所有(<>all),所以在子查詢中必須先在where條件中,把null值過濾掉,再使用not in
查看全部 -
子查詢注意的10個問題
子查詢語法中的小括號
子查詢的書寫風格
可以使用子查詢的位置:where,select,select,having,from ?(在select后的子查詢必須是一個單行子查詢---即,子查詢返回的結果集只有一條記錄)
不可以使用子查詢的位置:group by
強調:from 后面的子查詢
主查詢和子查詢可以不是同一張表
一般不在子查詢中,使用排序;但在Top-N分析問題中,必須對子查詢排序
一般先執行子查詢,再執行主查詢;但相關子查詢例外
單行子查詢只能使用單行操作符;多行子查詢只能使用多行操作符
注意:子查詢中是null值問題
查看全部 -
子查詢概述
子查詢使用
子查詢類型
查看全部 -
自連接:當顯示結果需要通過自連接實現,則需要給表一個別名,虛擬兩張表進行連接查詢。
自連接優點:顯示結果清晰明了 ? ? 缺點:多表連接查詢會產生笛卡爾積
層次查詢可以解決自連接查詢產生的問題
層次查詢本質是一個單表查詢
相鄰兩層的上一層的員工號,用關鍵字prior實現
connect by(connect by表示連接) 上一層的員工號=老板號(條件)
start with empno=7839; ---從哪個節點開始找,此處可以從任意一個節點開始
level為層次查詢的偽列,要顯示層次查詢中的數據,必須顯示加上level關鍵字
總語句:
select level,empno,ename,sal,mgr from emp
connect by prior empno=mgr start with empno=7839;
查看全部 -
笛卡爾集=列數相加,行數相乘?
目的:找到連接條件
查看全部 -
group by語句的增強
group by語句的增強用在報表中會非常有用
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
查看全部
舉報