oracle查询注意点,oracle查询相关注意点
單表查詢:
1.or?和?and?混合使用
需求:查詢業(yè)主名稱包含'劉'或門牌號(hào)包含'5'的,并且地址編號(hào)為3的記錄SELECT?*?FROM?T_OWNERS?WHERE?("NAME"?LIKE?'%劉%'?or?HOUSENUMBER?LIKE?'%5%')?AND?ADDRESSID?=?3
and?的權(quán)限優(yōu)先于 or?所以需要在or的兩邊添加()
2.?范圍查詢
除了傳統(tǒng)的?where usenum >=100 and usenum <=200,還可以用between and?查詢
SELECT?*?from?T_ACCOUNT?WHERE?USENUM?BETWEEN?100?and?200???--只適合>=?或<=
3.去空查詢
SELECT?*?FROM?T_PRICETABLE?WHERE?MAXNUM?IS?NULL;SELECT?*?FROM?T_PRICETABLE?WHERE?MAXNUM?IS?NOT?null;
4.去掉重復(fù)記錄SELECT?ADDRESSID?FROM?T_OWNERS?GROUP?BY?ADDRESSID;SELECT?DISTINCT?ADDRESSID?FROM?T_OWNERS;?--執(zhí)行效率高
5.基于偽列的查詢
rowid :?表中每一行在數(shù)據(jù)文件中都有一個(gè)物理地址,rowid返回就是該行的物理地址
SELECT?ROWID?,?t.*?FROM?T_AREA?t;
rownum :?通過rownum偽列可以限制查詢結(jié)果集中返回的行數(shù),可用于分頁SELECT?ROWNUM?,?t.*?FROM?T_OWNERS?t;
6.聚合函數(shù)
sum(),avg(),max(),min(),count()?括號(hào)內(nèi)傳遞條件,如:
SELECT?"COUNT"(*)?FROM?T_OWNERS?t?WHERE?OWNERTYPEID?=?1;
分組聚合group by?如果后面加?having條件,即在分組后過濾數(shù)據(jù)SELECT?AREAID?,?"SUM"(MONEY)?FROM?T_ACCOUNT?GROUP?BY?AREAID?HAVING?"SUM"(MONEY)?>?169000
多表查詢:
連接規(guī)定 能用內(nèi)連接 就不用外鏈接 能用左外 就 不用右外
1.內(nèi)連接
需求:查詢顯示業(yè)主編號(hào),業(yè)主名稱,業(yè)主類型名稱
SELECT
t1."ID",
T1."NAME",
T2."NAME"FROM
T_OWNERS?t1,
T_OWNERTYPE?t2WHERE
T1.OWNERTYPEID?=?T2."ID"
需求:查詢顯示業(yè)主編號(hào),業(yè)主名稱,地址,業(yè)主類型名稱
SELECT
T1."ID",
T1."NAME",
t2."NAME",
T3."NAME"FROM
T_OWNERS?t1,
T_OWNERTYPE?t2,
T_ADDRESS?t3WHERE
T1.OWNERTYPEID?=?T2."ID"AND?t1.ADDRESSID?=?T3."ID";
注意:多表的內(nèi)連接,可以先寫from?xxx ,xxx ,xxx?以及where?xx=yy,aa=bb,xx=zz,最后再寫select * 需要顯示的內(nèi)容
2.左外連接
需求:查詢業(yè)主的賬務(wù)記錄,顯示業(yè)主的編號(hào),名稱,年,月,金額,沒有賬務(wù)信息也要列出
SELECT???????????????????--這是SQL1999標(biāo)準(zhǔn)的語法
A1."ID",
A1."NAME",
B1."YEAR",
B1."MONTH",
B1.MONEYFROM
T_OWNERS?a1LEFT?JOIN?T_ACCOUNT?b1?ON?A1."ID"?=?b1.OWNERUUID
SELECT? --這是ORACLE提供的語法
A1."ID",
A1."NAME",
B1."YEAR",
B1."MONTH",
B1.MONEYFROM
T_OWNERS?a1,
T_ACCOUNT?b1WHERE
A1."ID"?=?B1.OWNERUUID?(+);
注意:left join?左邊的是主表,右邊的是輔表,on后面是條件;ORACLE提供的,誰是輔表就在誰身上
加 (+) .
3.子查詢
單行子查詢:
需求:查詢2012年01月用水量大于臺(tái)賬記錄平均值的數(shù)據(jù).分析:先查平均值,再傳入
SELECT
*FROM
T_ACCOUNTWHERE
"YEAR"?=?'2012'AND?"MONTH"?=?'01'AND?USENUM?>?(????SELECT --查平均值
"AVG"?(USENUM)????FROM
T_ACCOUNT????WHERE
"YEAR"?=?'2012'
AND?"MONTH"?=?'01')
多行子查詢:
需求:查詢地址編號(hào)為1,3,4的業(yè)主記錄.分析:如果用or來編寫太繁瑣,所以用inSELECT?*?FROM?T_OWNERS?WHERE?ADDRESSID?IN?(1,3,4);
需求:查詢地址含有"花園"的業(yè)主信息.分析:先模糊查詢,再傳入
SELECT
*FROM
T_OWNERSWHERE
ADDRESSID?IN?(????????SELECT
"ID"? --外查詢需要addressID,所以內(nèi)查詢要查id????????FROM
T_ADDRESS????????WHERE
"NAME"?LIKE?'%花園%'
);
注意:not in?不包含? is not null?代表不為空;子查詢?查詢的結(jié)果作為條件傳入另一個(gè)SQL語句
分頁查詢:
簡(jiǎn)單分頁查詢:
需求:分頁查詢臺(tái)賬表,每頁10條記錄.分析:rownum不能使用>符號(hào),只能
使用子查詢:
SELECT
*FROM
(
SELECT
ROWNUM?r,
A1.*
FROM
T_ACCOUNT?a1????????WHERE
ROWNUM?<=?20?? --如果要嵌套排序查,代碼該如何寫??
)WHERE
r?>?10;
基于排序的分頁:
SELECT
*FROM
(????????SELECT
A?.*,?ROWNUM?RN????????FROM
(????????????????SELECT
*
FROM
T_ACCOUNT????????????????WHERE
YEAR?=?'2012'
ORDER?BY
USENUM?DESC
)?A --A表代表排序,也是三層中的數(shù)據(jù)層,第一步
)?B ??--B表代表基于偽列查詢,也是三層中的偽列層,第二步WHERE ?--最后就是分頁查詢了,也是三層中的分頁層,第三步
B.RN?BETWEEN?(3?-?1)?*?5?+?1 --ORACLE中索引是從1開始的AND?3?*?5;???????????????????????????--條件要知道怎么計(jì)算
未完待續(xù)...
總結(jié)
以上是生活随笔為你收集整理的oracle查询注意点,oracle查询相关注意点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的主函数在哪_打开一个别人的文件
- 下一篇: 现代谱估计-互谱功率