本篇內(nèi)容介紹了“怎么理解Oracle數(shù)據(jù)庫(kù)中的多表查詢,分組查詢,子查詢”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)是專業(yè)的西鄉(xiāng)網(wǎng)站建設(shè)公司,西鄉(xiāng)接單;提供網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行西鄉(xiāng)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
多表查詢
FROM
性能不好,海量的大數(shù)據(jù)不建議使用
多表查詢:在FROM子句后面設(shè)置多張數(shù)據(jù)表
笛卡爾積:會(huì)將兩張表相乘
使用別名,若表名很長(zhǎng)
表的連接
SELECT *
FROM emp e,dept d
WHERE e.des=d.des;
表連接的的兩種形式:
內(nèi)連接(等值連接):所有滿足條件的數(shù)據(jù)都會(huì)被顯示出來(lái);
外連接(左連接,右連接,全外連接)控制左表與右表的數(shù)據(jù)是否全部顯示。(+)標(biāo)記僅Oracle才有
SELECT *
FROM emp e,dept d
WHERE e.des=d.des(+);
//左外連接,顯示所有emp表的內(nèi)容
1999語(yǔ)法
左外連接
SELECT * FROM emp LEFT OUTER JOIN dept USING(deptno);
全外連接
SELECT * FROM emp FULL OUTER JOIN dept USING(deptno);
分組查詢
GROUB BY
select d.deptno,d.dname,d.loc,trunc(avg(months_between(sysdate,e.hiredate)/12)) years
from dept d,emp e
group by d.deptno,d.dname,d.loc;
Oracle執(zhí)行語(yǔ)句及順序
5確定要使用的數(shù)據(jù):SELECT
1確定要查找的數(shù)據(jù)源:FROM
2.針對(duì)于數(shù)據(jù)行的篩選:WHERE
3針對(duì)于數(shù)據(jù)實(shí)現(xiàn)分組:GROUP BY
4針對(duì)于分組后的數(shù)據(jù)進(jìn)行篩選:HAVING
6針對(duì)于返回?cái)?shù)據(jù)進(jìn)行排序:ORDER BY
WHERE和HAVING的區(qū)別:
WHERE出現(xiàn)在GROUP BY 操作之前,即分組前的數(shù)據(jù)篩選,不允許使用統(tǒng)計(jì)函數(shù)
HAVING出現(xiàn)在GROUP BY 之后,針對(duì)分組后的數(shù)據(jù)進(jìn)行篩選,可以使用統(tǒng)計(jì)函數(shù)
UNION和UNION ALL的區(qū)別:
union: 對(duì)兩個(gè)結(jié)果集進(jìn)行并集操作, 不包括重復(fù)行,相當(dāng)于distinct, 同時(shí)進(jìn)行默認(rèn)規(guī)則的排序;
union all: 對(duì)兩個(gè)結(jié)果集進(jìn)行并集操作, 包括重復(fù)行, 即所有的結(jié)果全部顯示, 不管是不是重復(fù);
子查詢
可同時(shí)嵌套多個(gè)子查詢
未選定行可能是子查詢返回為空
作用:解決多表查詢帶來(lái)的笛卡爾積影響的性能問(wèn)題。
SELECT子句
返回單行單列,使用較少
FROM子句
返回多行多列(表結(jié)構(gòu))
SELECT d.dname,d.loc,count
FROM dept d,(SELECT deptno,COUNT(empno) count from emp GROUP BY deptno) temp
WHERE d.deptno=temp.deptno(+);
WHERE子句(用到最多)
返回單行單列,單行多列,多行單列
作用:數(shù)據(jù)行的篩選,過(guò)濾條件使用
單行單列:
SELECT *
FROM emp
WHERE sal>(SELECT AVG(sal) FROM emp);
單行多列:
SELECT *無(wú)錫婦科費(fèi)用 http://www.wxbhnkyy39.com/
FROM emp
WHERE (sal,job)=(SELECT sal,job FROM emp WHERE ename='SCOTT');
多行單列:
三種操作符IN,ANY,ALL
IN 操作
與子查詢中的sal相同均滿足此條件
SELECT *
FROM emp
WHERE sal IN (SELECT sal FROM emp WHERE ename='SCOTT');
ANY
>ANY ()—大于其中最小數(shù)值就滿足
=ANY ()—等于其中一個(gè)數(shù)值就滿足
SELECT *
FROM emp
WHERE sal=ANY (SELECT sal FROM emp WHERE job='CLERK');
ALL
>ALL ()—比查詢得到的最大值要大
SELECT *
FROM emp
WHERE sal>ALL (SELECT sal FROM emp WHERE job='CLERK');
HAVING子句
返回單行單列,同時(shí)表示要使用統(tǒng)計(jì)函數(shù)
SELECT job,COUNT(ename),AVG(SAL)
FROM emp
GROUP BY job
HAVING AVG(sal)>(SELECT AVG(sal) FROM emp);
“怎么理解Oracle數(shù)據(jù)庫(kù)中的多表查詢,分組查詢,子查詢”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!