-
6.
查看全部 -
5.
查看全部 -
4.
查看全部 -
3.
查看全部 -
2.
查看全部 -
1.
\
查看全部 -
instr( a,b):如果字符串b在字符串a的里面,則返回的是b在a中的位置,即返回值大于0;
wm_concat(cols):對學生姓名用逗號進行拼接
查看全部 -
問題:統計員工入職年份:
1.使用函數的方式:
select count(*) from Total,
sum(decode(to_char(hiredate,'YYYY'),'1980',1,0))"1980",
sum(decode(to_char(hiredate,'YYYY'),'1982',1,0))"1982"
from emp;
to_char:將A按照XXX的格式轉換成字符串
decode:hiredate是1980就返回1,否則返回0
2.使用子查詢的方式解決(使用到oqacle的維表,dual)
(select count(*) emp) Total,
(select count(*) from emp where to_char(hiredate,'YYYY')='1980')"1980",
(select count(*) from emp where to_char(hiredate,'YYYY')='1982
3.存儲過程來解決(ORACLE之PL/SQL基礎中的課程中有提到)
查看全部 -
e1表中可以查詢出前8個,(rownum只能寫<=,不能寫>=,另外這里排序完rownum也是亂的),
e2表把e1查出的rownum別名為r,此時作為e2表的第一列數值,可以查詢r>=5 的,則得到查詢結果。
查看全部 -
單行操作符:=,>,>=,<,<=,<>
多行操作符:in,any,all
查看全部 -
上面的圖1:rownum偽列,這里會默認根據偽列排序。
要找出員工表中工資最高的前三名,(在Top-n分析問題中,必須對子查詢進行排序)
行號永遠按照默認順序生成,行號只能用<,<=;不能使用>,>=
圖2,這種結果是錯的,因為它會根據偽列去取了三個,就算根據sal排序,行號還是不會發生變化;
需要在排序后,行號自動生成才可以,如下圖三(先根據子查詢生成新的偽列,再取前三個):
查看全部 -
1.如上圖:子查詢一般先執行子查詢,再執行主查詢,相關子查詢例外,上面的舉例就是相關子查詢,(截圖是我為了這種用法,可以將select avg 放在篩選語句里。
相關子查詢,我的理解就是在子查詢中,通過表別名,將外面表關鍵字段等于子查詢中字段,自己平時也經常用,應該清楚這個概念)
2.還有另一種方法可以查詢(多表查詢的方式),如下圖:
3.explain plan for XXX查詢語句;
執行完之后查詢:select * from table(dbms_xplan.display);
總結:通過3的解釋計劃,相關子查詢的方式消耗cpu資源較少,而多表查詢這種消耗較大。
查看全部 -
可以使用子查詢的位置,?group by后不可使用子查詢,having where from select后面可以。
查看全部 -
先執行子查詢再執行主查詢,但是相關子查詢例外。
?select 后的子查詢,只能是單行子查詢。
查看全部 -
這里第5行指的是從根節點開始遍歷,第9行表示從具體某個節點7839開始遍歷。
level為偽列,樹的深度。相關關鍵字:
connect by prior A=BB
star with A=XXX;
總結:
?自鏈接不適合查詢大表(因為會產生笛卡爾里),
可以層次查詢(樹狀結構,可以從任意一個節點向下遍歷,缺點是結果不夠直觀)
查看全部
舉報