查找表的所有索引(包括索引名 類(lèi)型 構(gòu)成列)
專(zhuān)注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)雙陽(yáng)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
select t * i index_type from user_ind_columns t user_indexes i where t index_name = i index_name and t table_name = i table_name and t table_name = 要查詢(xún)的表
查找表的主鍵(包括名稱(chēng) 構(gòu)成列)
select cu * from user_cons_columns cu user_constraints au where nstraint_name = nstraint_name and nstraint_type = P and au table_name = 要查詢(xún)的表
查找表的唯一性約束(包括名稱(chēng) 構(gòu)成列)
select column_name from user_cons_columns cu user_constraints au where nstraint_name = nstraint_name and nstraint_type = U and au table_name = 要查詢(xún)的表
查找表的外鍵(包括名稱(chēng) 引用表的表名和對(duì)應(yīng)的鍵名 下面是分成多步查詢(xún))
select * from user_constraints c where nstraint_type = R and c table_name = 要查詢(xún)的表
查詢(xún)外鍵約束的列名
select * from user_cons_columns cl where nstraint_name = 外鍵名稱(chēng)
查詢(xún)引用表的鍵的列名
select * from user_cons_columns cl where nstraint_name = 外鍵引用表的鍵名
查詢(xún)表的所有列及其屬性
lishixinzhi/Article/program/Oracle/201311/17150
select e.empno, e.ename, d.deptno, d.dname
from emp e, dept d
where e.deptno = d.deptno;
在之前所使用的查詢(xún)操作之中,都是從一張表之中查詢(xún)出所需要的內(nèi)容,那么如果現(xiàn)在一個(gè)查詢(xún)語(yǔ)句需要顯示多張表的數(shù)據(jù),則就必須應(yīng)用到多表查詢(xún)的操作,而多表查詢(xún)的語(yǔ)法如下:
SELECT [DISTINCT] * | 字段 [別名] [,字段 [別名] ,…] FROM 表名稱(chēng) [別名], [表名稱(chēng) [別名] ,…] [WHERE 條件(S)] [ORDER BY 排序字段 [ASC|DESC] [,排序字段 [ASC|DESC] ,…]]。
擴(kuò)展資料:
Oracle 常用的關(guān)聯(lián)查詢(xún):
Oracle外連接:
(1)左外連接 (左邊的表不加限制)。
(2)右外連接(右邊的表不加限制)。
(3)全外連接(左右兩表都不加限制)。
outer join則會(huì)返回每個(gè)滿(mǎn)足第一個(gè)(頂端)輸入與第二個(gè)(底端)輸入的聯(lián)接的行。它還返回任何在第二個(gè)輸入中沒(méi)有匹配行的第一個(gè)輸入中的行。
外連接分為三種: 左外連接,右外連接,全外連接。 對(duì)應(yīng)SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我們省略outer 這個(gè)關(guān)鍵字。 寫(xiě)成:LEFT/RIGHT/FULL JOIN。
在左外連接和右外連接時(shí)都會(huì)以一張表為基表,該表的內(nèi)容會(huì)全部顯示,然后加上兩張表匹配的內(nèi)容。 如果基表的數(shù)據(jù)在另一張表沒(méi)有記錄。 那么在相關(guān)聯(lián)的結(jié)果集行中列顯示為空值(NULL)。
跟my sql一樣的關(guān)聯(lián),這些關(guān)聯(lián)查詢(xún)都是一樣的,例如內(nèi)聯(lián)查詢(xún),左聯(lián)查詢(xún)
內(nèi)聯(lián)查詢(xún):
想把用戶(hù)的積分信息, 等級(jí),都列出來(lái),一般會(huì)出現(xiàn):
select * from emd_mteller t1,emd_mrole t2 where t1.teller_id = t2.teller_id
select * from emd_mteller t1 inner join emd_mrole t2 on t1.teller_id = t2.teller_id
左聯(lián)查詢(xún):
left join 或者left outer join
返回左表中的所有行。如果左表的某行在右表中沒(méi)有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值(null)。
Select * from t1 left outer join t3 on t1.userid = t2.userid
1. 查詢(xún)一張表里面索引
select * from user_indexes where table_name=XX;
2. 查詢(xún)被索引字段
select * from user_ind_columns where index_name=XX;
3.查詢(xún)數(shù)據(jù)庫(kù)中所有索引
select * from user_objects where object_type='INDEX';
可以通過(guò) desc table_name; 來(lái)查看這三張表的數(shù)據(jù)結(jié)構(gòu),選擇自己需要的字段查看。
關(guān)聯(lián)在Oracle數(shù)據(jù)查詢(xún)時(shí)會(huì)經(jīng)常用到 靈活的應(yīng)用關(guān)聯(lián)可以解決很多實(shí)際應(yīng)用的問(wèn)題 下面給出一些示例:
建表
create table ab ( ab_id number( ) ab_name varchar ( ) ); create table bb ( bb_id number( ) bb_name varchar ( ) );
插入數(shù)據(jù)
insert into ab(ab_id ab_name) values( ab_name ); insert into ab(ab_id ab_name) values( ab_name ); insert into ab(ab_id ab_name) values( ab_name ); insert into bb(bb_id bb_name) values( bb_name ); insert into bb(bb_id bb_name) values( bb_name ); insert into bb(bb_id bb_name) values( bb_name ); insert into bb(bb_id bb_name) values( bb_name );
等值關(guān)聯(lián)(全關(guān)聯(lián))
select a ab_id a ab_name b bb_name from ab a bb b where a ab_id=b bb_id;
返回結(jié)果
AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name
返回兩個(gè)表中所有能匹配的記錄 不能匹配的記錄不返回
左關(guān)聯(lián)
select ab_id ab_name bb_name from ab a left join bb b on a ab_id=b bb_id; 同 select ab_id ab_name bb_name from ab a bb b where a ab_id=b bb_id(+);
返回結(jié)果
AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name ab_name
返回左邊表的左右記錄 在右邊表中沒(méi)有對(duì)應(yīng)記錄的右表字段顯示為空
右關(guān)聯(lián)
select ab_id ab_name bb_name from ab a right join bb b on a ab_id=b bb_id; 同 select ab_id ab_name bb_name from ab a bb b where a ab_id(+)=b bb_id;
返回結(jié)果:
AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name bb_name bb_name
返回右邊表中所有的記錄 在右邊表不能匹配的記錄行上 左邊表對(duì)應(yīng)的字段顯示為空
完全外關(guān)聯(lián)
select ab_id ab_name bb_name from ab a full join bb b on a ab_id=b bb_id;
返回結(jié)果
AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name ab_name bb_name bb_name
返回兩個(gè)表所有的結(jié)果 如果在關(guān)聯(lián)條件上沒(méi)有對(duì)應(yīng)的記錄 那么將在該列上顯示為空
lishixinzhi/Article/program/Oracle/201311/18919
---關(guān)聯(lián)查詢(xún)
/**
等值連接:關(guān)聯(lián)表中存在相同列
非等值連接:表中沒(méi)有相同的列名,但是一個(gè)表中列,在另外表中存在某種關(guān)系,比如在范圍內(nèi)
外連接:左外連接(左邊顯示全部記錄)和右外連接(右邊顯示全部記錄)
自連接:自己關(guān)聯(lián)自己查詢(xún)
*/
select * from emp;
select * from dept;
-- 笛卡爾積
select * from emp,dept;
-- 關(guān)聯(lián)查詢(xún)
select * from emp,dept where emp.deptno = dept.deptno;
-- 查詢(xún)雇員的名稱(chēng)和部門(mén)的名稱(chēng)
select ename,dname from emp,dept where emp.deptno = dept.deptno;
select * from salgrade;
--查詢(xún)雇員名稱(chēng)和薪水等級(jí)
select e.ename,g.grade from emp e,salgrade g where e.sal between g.losal and g.hisal;
-- 需要將雇員表中的數(shù)據(jù)全部顯示,利用等值連接,只能把關(guān)聯(lián)到的數(shù)據(jù)顯示出來(lái),這就需要外連接
select * from emp e,dept d where e.deptno = d.deptno; --等值連接
select * from emp e,dept d where e.deptno = d.deptno(+); --左外連接(左數(shù)據(jù)要顯示全,右表補(bǔ)空)
select * from emp e,dept d where e.deptno(+) = d.deptno; --右外連接(右數(shù)據(jù)要顯示全,左表補(bǔ)空)
-- 自連接,把一張表自己關(guān)聯(lián)自己
-- 將雇員和他的經(jīng)理查出來(lái) e表示雇員表,m也表示雇員表 匹配的e.mgr的經(jīng)理是哪個(gè)雇員
select e.ename,m.ename from emp e,emp m where e.mgr = m.empno;
-- 不加任何連接條件 笛卡爾積
select * from emp e,dept d;
--以上是sql 92語(yǔ)法問(wèn)題
-- 關(guān)聯(lián)查詢(xún)條件放到where子句中,而where語(yǔ)句還負(fù)責(zé)對(duì)結(jié)果集進(jìn)行條件過(guò)濾,
-- 意味著將連接條件和過(guò)濾條件寫(xiě)在一起,可讀性差,不符合單一職責(zé)
sql 99 語(yǔ)法
cross join 等價(jià) 92語(yǔ)法笛卡爾積
select * from emp cross join dept;
select * from emp cross join dept;
-- natural join 相當(dāng)于等值連接,但是不需要等值條件,會(huì)做動(dòng)找相同列左連接
-- 如果兩表中沒(méi)有相同列,相當(dāng)于笛卡爾積
-- 有相同的列,會(huì)自動(dòng)做等值連接
select * from emp e natural join dept d;
-- 沒(méi)有相同的列,相當(dāng)于笛卡爾積
select * from emp e natural join salgrade;
--on 子句,添加連接條件
-- on子句等值連接,相連接當(dāng)于92語(yǔ)法等值連接
select * from emp e join dept d on e.deptno = d.deptno;
--on 子句非等值連接,相當(dāng)于92語(yǔ)法非等值連接
select * from emp e join salgrade sg on e.sal between sg.losal and sg.hisal;
-- left outer join ,其中outer可省略 99語(yǔ)法左外連接 會(huì)把左表記錄顯示全,右表無(wú)對(duì)應(yīng)記錄,顯示空
select * from emp e left outer join dept d on e.deptno = d.deptno;
-- 92語(yǔ)法 左外連接
select * from emp e,dept d where e.deptno = d.deptno(+);
-- right outer join ,其中outer可省略 99語(yǔ)法右外連接
select * from emp e right outer join dept d on e.deptno = d.deptno;
-- 92語(yǔ)法 右外連接
select * from emp e,dept d where e.deptno = d.deptno;
-- full outer join 99語(yǔ)法獨(dú)有相當(dāng)于同時(shí)滿(mǎn)足左外連接和右外連接
select * from emp e full outer join dept d on e.deptno = d.deptno;
-- inner join 就是表連接
select * from emp e inner join dept d on e.deptno = d.deptno;
-- 省略inner
select * from emp e join dept d on e.deptno = d.deptno;
--using,除了使用on作為連接條件,也可使用using作為連接條件
--此時(shí)查出的deptno不屬于任何一張表
select * from emp e join dept d using(deptno);
-- 發(fā)現(xiàn)會(huì)出現(xiàn)兩列deptno,分別屬于兩張表
select * from emp e join dept d on e.deptno = d.deptno;
99語(yǔ)法和92語(yǔ)法,實(shí)際開(kāi)發(fā)中都可使用,建議使用99語(yǔ)法,可讀性更強(qiáng)
-- 檢索雇員名字、所在單位、薪水等級(jí)
select e.ename,d.loc,sg.grade from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;