oracle如何實(shí)現(xiàn)查詢 Oracle怎么查詢

Oracle之查詢詳解

查詢是數(shù)據(jù)的一個重要操作。用戶發(fā)送查詢請求,經(jīng)編譯軟件變異成二進(jìn)制文件供服務(wù)器查詢,后返回查詢結(jié)果集給用戶,查詢會產(chǎn)生一個虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正的存儲,每次執(zhí)行查詢只是從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來。

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比壽光網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式壽光網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋壽光地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

SELECT 列名

FGROM 表名

[WHERE 查詢條件表達(dá)式]

[GROUP BY 分組表達(dá)式]

[HAVING 分組查詢表達(dá)式]

[ORDER BY 排序的列名 [ASC或DESC]]

group by 用于對查詢的結(jié)果分組統(tǒng)計(jì),通過對group by后面的名字進(jìn)行分組后輸出結(jié)果。

group by后面還可以跟多列表示 多列分組 ,在多列分組時放前面的優(yōu)先分組。

group by 列名,列名

having 子句用于限制分組顯示結(jié)果,其只能和group by一起連用。在where中沒有辦法直接使用聚合函數(shù),即sum avg等無法使用,所以引用了having,在having中可以使用這些函數(shù)。

order by 表示排序,后跟列名和排序方式。如果什么都不加默認(rèn)為升序。ASC表示升序,DESC表示降序。

在Oracle中還可以設(shè)置多列排序

order by 列名1 升降,列名2 升降;

前面的為主要排序,后面的為次一級排序。

注:碰到自己與自己比較的情況下,不能用having,可以創(chuàng)建一個新列。

注:如果select語句同時包含group by,having,order by,按group by,having,order by排序

分組和聚合一起使用,目的是為了統(tǒng)計(jì)信息。

where是為了from服務(wù)的,只能跟 真實(shí)的字段 ,用來篩選from子句中指定的操作所產(chǎn)生的行

group by 用來分組where子句的輸出

having 用來從分組的結(jié)果中篩選行

order by用來對篩選的結(jié)果進(jìn)行排序

(1)分組函數(shù):max min?avg sum count

max表示該列的最大值,min表示該列的最小值,avg表示該列的平均值,sum表示該列的和,count表示該列的行數(shù)。

注:分組函數(shù)(max、min、avg、count、sum)只能出現(xiàn)在選擇列表中having子句、order by子句、不能出現(xiàn)在where子句和group by子句中。

(2)多表查詢

多表查詢是指兩個和兩個以上的表或者是視圖的查詢,在實(shí)際應(yīng)用中,當(dāng)查詢單個表不能滿足需求時,一般使用多表查詢。如:顯示sales部門位置和其員工的姓名,這種情況下需要使用到(dept表和emp表)。

多表查詢的連接一般可以分為:內(nèi)連接、左外連接、右外連接、全連接。

注:在使用多表查詢的時候每個表可以設(shè)置別名,如果表指定了別名,那么語句中所有語句必須使用別名,而不能再使用實(shí)際表名。且在寫屬性的時候如果屬性為其中一個表特有的屬性則不需要寫別名,如果是兩個表都有則必須指定是哪一個表的哪個屬性格式為:表名.屬性名。

select 列名 from 表1 別名,表2 別名...

注:e是emp的別名,d是dept的別名。

但如果對表進(jìn)行了操作則需要設(shè)置別名,如:查詢每個部門中工資高于該部門平均工資的員工人數(shù)。在其中有一個avg表,這個表必須設(shè)置別名(提醒:如果僅有一個被修改的表,則可以不設(shè)置別名,但如果有多個表則必須設(shè)置別名)。

內(nèi)連接

內(nèi)連接通過使用比較運(yùn)算符來使每個表的通用列中的值匹配來組成一個新表,即:把兩個表中間共有的那些行拿出來進(jìn)行連接,如果某些行不是兩個表共有的,則不進(jìn)行連接。

select

from 表1

inner join 表2

on 匹配條件

select

from 表1 表2

where匹配條件

左外連接

左外連接與內(nèi)連接的區(qū)別是:設(shè)置左外連接的時候設(shè)置了主表和附表,主表在前,附表在后。內(nèi)連接是將兩個表匹配的地方輸出出來,而左外連接則是主表全寫,附表一一對應(yīng),附表有則加上,沒有不寫。

select

from 表1

left join 表2

on 匹配條件

右外連接

右外連接和左外連接基本相同只是右外連接的主表寫在后邊。

select

from 表1

right join 表2

on 匹配條件

全連接

全連接是在等值連接的基礎(chǔ)上將左表和右表的未匹配數(shù)據(jù)都加上,使用的關(guān)鍵字為full outer join或者full join。

select

from 表1

full join 表2

on 匹配條件

自連接

還有一種特殊情況即自連接,在Oracle中一個表無法與自己進(jìn)行比較,所以當(dāng)需要自己表的兩個信息做比較的時候也需要使用連接來連接,即同一張表的連結(jié)查詢。

(3)子查詢

子查詢是指嵌套在其他sql語句中的select語句,也叫嵌套查詢。sql語句執(zhí)行順序?yàn)閺挠业阶髨?zhí)行,所以在執(zhí)行查詢時會先執(zhí)行左側(cè)的子查詢后進(jìn)行主查詢。

子查詢分為單行子查詢和多行子查詢,單行子查詢是指返回一行數(shù)據(jù)的子查詢語句,多行子查詢是指返回多行數(shù)據(jù)的查詢語句。子查詢還可以分為多列子查詢、多行子查詢、多列多行子查詢。

在進(jìn)行子查詢時如果內(nèi)部查詢不返回任何記錄,則外部條件中字段DEPTNO與NULL比較永遠(yuǎn)為假,也就是說外部查詢不返回任何結(jié)果。

總結(jié)為:

單行子查詢是指子查詢只返回單列、單行數(shù)據(jù)

多行子查詢是指返回單列多行數(shù)據(jù),都是針對單列而言的

多列子查詢則是指查詢返回多個列數(shù)據(jù)的子查詢語句

單行子查詢

where deptno = (單行數(shù)值)

多行子查詢

where deptno in ( 多行數(shù)值 )

多列子查詢:

where (job,deptno)=(select job,deptno from emp where ename='KING')

多列多行子查詢

where (job,deptno) in (select job,deptno from emp where ename='KING')

單行子查詢

在單行子查詢的外部查詢中可以使用=、、、=、=、等比較運(yùn)算符。

內(nèi)部查詢返回的結(jié)果必須與外部查詢條件中字段(DEPTNO)相匹配。

多行子查詢

在WHERE子句中使用多行子查詢時,可以使用多行比較運(yùn)算符(IN,ALL,ANY)。

IN:等于任何一個。

ALL:和子查詢返回的所有值比較。例如:salALL(1,2,3)等價于sal3,即大于所有。

ANY:和子查詢返回的任意一個值比較。例如:salANY(1,2,3)等價于sal1,即大于任意一個就可以。

注:ANY運(yùn)算符必須與單行比較運(yùn)算符結(jié)合使用,并且返回行只要匹配子查詢的任何一個結(jié)果即可。

多列子查詢

多列子查詢和多行子查詢相同,只是使用多列子查詢的時候會有多列進(jìn)行匹配。

(4)集合運(yùn)算

為了合并多個select語句的結(jié)果,可以使用集合操作符號union,union all,intersect,minus。

union:該操作符用于取得兩個結(jié)果集的并集。當(dāng)使用該操作符時,會自動去掉結(jié)果集中重復(fù)行

union all:該操作與union相似,但是它不會取消重復(fù)行,而且不會排序

intersect:使用該操作符用于取得兩個結(jié)果集的交集

minus:使用該操作符用于取得兩個結(jié)果集的差集,它只會顯示存在第一個集合中,而不存在第二個集合中的數(shù)據(jù)

總結(jié)為集合運(yùn)算就是將兩個或者多個結(jié)果集組合成一個結(jié)果集。

intersect ?交集 返回兩個查詢共有的記錄

union all ?并集 返回各個查詢的所有記錄,包括重復(fù)的記錄

union ? ? ?交集 返回各個查詢的所有記錄,不包括重復(fù)的記錄

MINUS ? 補(bǔ)集 返回第一個查詢檢查出的記錄減去第二個查詢檢索出來的記錄之后剩余的記錄

注意:當(dāng)使用集合操作的時候,查詢所返回的列數(shù)以及列的類型必須匹配,列名可以不同。

(1)Distinct關(guān)鍵字

在Oracle中,可能出現(xiàn)若干相同的情況,那么可以用Distinct消除重復(fù)行

(2)多表查詢與單行子查詢可以實(shí)現(xiàn)相同的功能

查詢出銷售部(sales)下面的員工姓名,工作,工資

(3)顯示高于自己部門平均工資的員工信息

分析:

1.找到所有部門的平均工資

select deptno,avg(sal) from emp group by deptno;

2.找到所有人的工資信息

select ename,sal,deptno from emp;

3.把兩個結(jié)果集使用多表連接組合組合起來

select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno;

4.去掉低于平均工資的那些數(shù)據(jù)即可:

select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno and salavgsal;

(4)emp表介紹

字段? ? ? ? ? ? ? 類型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述

empno ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示雇員編號,是唯一編號

ename ? ? ? ? ?VAECHAR2(10) ? ? ? ? ? 表示雇員姓名

job ? ? ? ? ? ? ? ?VARCHAR2(9) ? ? ? ? ? ? 表示工作職位

mgr ? ? ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示一個雇員的領(lǐng)導(dǎo)編號

hiredate ? ? ? DATE ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示雇傭日期

sal ? ? ? ? ? ? ? NUMBER(7,2) ? ? ? ? ? ? ? 表示月薪,工資

comm ? ? ? ? ?NUMBER(7,2) ? ? ? ? ? ? ? 表示獎金,或者稱為傭金

deptno ? ? ? ? NUMBER(2) ? ? ? ? ? ? ? ? 部門編號

如何查詢oracle的

1.查看所有用戶:

select * from dba_users;

select * from all_users;

select * from user_users;

2.查看用戶或角色系統(tǒng)權(quán)限(直接賦值給用戶或角色的系統(tǒng)權(quán)限):

select * from dba_sys_privs;

select * from user_sys_privs; (查看當(dāng)前用戶所擁有的權(quán)限)

3.查看角色(只能查看登陸用戶擁有的角色)所包含的權(quán)限

sqlselect * from role_sys_privs;

4.查看用戶對象權(quán)限:

select * from dba_tab_privs;

select * from all_tab_privs;

select * from user_tab_privs;

5.查看所有角色: select * from dba_roles;

6.查看用戶或角色所擁有的角色:

select * from dba_role_privs;

select * from user_role_privs;

7.查看哪些用戶有sysdba或sysoper系統(tǒng)權(quán)限(查詢時需要相應(yīng)權(quán)限)

select * from V$PWFILE_USERS

oracle查詢實(shí)現(xiàn)

在一些需求中會要求打亂結(jié)果集順序隨機(jī)展示。

Oracle的實(shí)現(xiàn)方式如下:

select * from table order by dbms_random.value();

這種用法沒有參數(shù),會返回一個具有38位精度的數(shù)值,范圍從0.0到1.0,但不包括1.0。

想了解的可以查詢dbms_random看看

oracle怎么通過索引查詢數(shù)據(jù)語句

oracle對于數(shù)據(jù)庫中的表信息,存儲在系統(tǒng)表中。查詢已創(chuàng)建好的表索引,可通過相應(yīng)的sql語句到相應(yīng)的表中進(jìn)行快捷的查詢:\x0d\x0a1. 根據(jù)表名,查詢一張表的索引\x0d\x0a\x0d\x0aselect * from user_indexes where table_name=upper('表名');\x0d\x0a\x0d\x0a2. 根據(jù)索引號,查詢表索引字段\x0d\x0a\x0d\x0aselect * from user_ind_columns where index_name=('索引名');\x0d\x0a\x0d\x0a3.根據(jù)索引名,查詢創(chuàng)建索引的語句\x0d\x0a\x0d\x0aselect dbms_metadata.get_ddl('INDEX','索引名', ['用戶名']) from dual ; --['用戶名']可省,默認(rèn)為登錄用戶\x0d\x0a\x0d\x0aPS:dbms_metadata.get_ddl還可以得到建表語句,如:\x0d\x0a\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE','表名', ['用戶名']) FROM DUAL ; //取單個表的建表語句,['用戶名']可不輸入,默認(rèn)為登錄用戶\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u; //取用戶下所有表的建表語句\x0d\x0a\x0d\x0a當(dāng)然,也可以用pl/sql developer工具來查看相關(guān)的表的各種信息。

Oracle 10g如何實(shí)現(xiàn)高級查詢

許多人愁不會Oracle 10g的高級查詢,其實(shí)也是比較簡單的。在查詢數(shù)據(jù)時,為了獲取完整的信息就要將多個表連接起來,這也是關(guān)系數(shù)據(jù)庫的一個重要特性---表之間存在的關(guān)系。這種關(guān)系可以將表的數(shù)據(jù)聯(lián)系起來。多表查詢就是根據(jù)這種關(guān)系,實(shí)現(xiàn)從多個表中獲取數(shù)據(jù)還原信息。下面這個圖就是我將要操作的表結(jié)構(gòu)。

工具/材料

電腦

Oracle 10g

01

基本連接查詢

在簡單查詢中我們一般只使用了from字句的一個表,然而在關(guān)系數(shù)據(jù)庫中,表與表之間往往是存在關(guān)系的,這就是要求從多個表中檢索數(shù)據(jù),以輸出更有意義的結(jié)果。最簡單的連接方式就是在select語句中,通過from子句使用多個表,并用逗號將不同的基本表隔開。下面語句將商品信息表和供應(yīng)商信息表連接起來,查詢其中的商品名稱,產(chǎn)地,供應(yīng)商名稱。

02

但此時結(jié)果顯示該查詢語句共顯示了200行記錄,這顯然是錯誤的。因?yàn)閮H僅通過select和from子句連接那么查詢結(jié)果將是一個通過笛卡兒積生成的表,包含大量無意義的信息。而where語句可以有效避免笛卡兒積的出現(xiàn)。只有當(dāng)兩個表具有相同匹配的列時才返回結(jié)果集。例如下面語句通過在where子句中使用連接條件,實(shí)現(xiàn)了每件商品名稱,產(chǎn)地,供應(yīng)商名稱信息。

03

但也要注意一個問題如果想要查詢“供應(yīng)商編號”應(yīng)該怎么處理,因?yàn)閮蓚€表中都有“供應(yīng)商編號”,所以應(yīng)該查詢的時候限定一下,說明究竟是哪一個表中的。

04

join連接查詢

join用于連接兩個不同的表,on用于給出這兩個表之間的連接條件。如果進(jìn)一步限制查詢范圍,可以在后面添加where語句,下面示例使用從商品信息表和供應(yīng)商信息表查詢單價大于1200元的商品信息。

05

并且join連接也可以實(shí)現(xiàn)兩個以上的表查詢,寫語句的時候一個join對應(yīng)一個on,看下面的例子。

06

自然連接查詢

其實(shí)自然連接查詢(natural join)就是更加方便的join連接查詢,自然連接不必指定任何同等連接條件,系統(tǒng)將自動判斷出具有相同名稱的列然后形成匹配,但注意自然連接是根據(jù)兩個表中同名的列而進(jìn)行連接的,當(dāng)列不同名時,自然連接將失去意義。

07

集合操作查詢

集合操作就是將兩個或多個SQL查詢結(jié)合構(gòu)成符合查詢,集合操作符有union(并集)、intersect(交集)、minus(差集),現(xiàn)在以union為例,union查詢必須從每個表中讀取相同的列。

08

子查詢

子查詢和連接查詢一樣提供了使用單個查詢訪問多個表中的數(shù)據(jù)的方法,使用in關(guān)鍵字,意思是在in后面的集合中查詢我們需要的,即in后面是限定條件。

特別提示

注意在Oracle 10g中的標(biāo)點(diǎn)符號是英文狀態(tài)下的

標(biāo)題名稱:oracle如何實(shí)現(xiàn)查詢 Oracle怎么查詢
路徑分享:http://muchs.cn/article36/hjecsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化網(wǎng)站制作網(wǎng)站內(nèi)鏈、標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)