以兩表為例。
專業(yè)網(wǎng)站制作公司,專做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!成都創(chuàng)新互聯(lián)公司為您提供品質(zhì)好成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,負(fù)責(zé)任的成都網(wǎng)站制作公司!
需要用關(guān)聯(lián)查詢。
如有以下兩張表,其中兩表的deptno是關(guān)聯(lián)字段。
現(xiàn)要求查出每個(gè)人對(duì)應(yīng)的dname,可用如下語句:
select?a.ename,b.dname?from?emp?a,dept?b?where?a.deptno=b.deptno;
查詢結(jié)果:
在PLSQL中使用EXECUTE IMMEDIATE語句處理動(dòng)態(tài)SQL語句。
語法如下:
EXECUTE IMMEDIATE dynamic_string
[INTO {define_variable[, define_variable]... | record}]
[USING [IN | OUT | IN OUT] bind_argument
[, [IN | OUT | IN OUT] bind_argument]...]
[{RETURNING | RETURN} INTO bind_argument[, bind_argument]...];
dynamic_string是代表一條SQL語句或一個(gè)PL/SQL塊的字符串表達(dá)式,
define_variable是用于存放被選出的字段值的變量,
record是用戶定義或%ROWTYPE類型的記錄,用來存放被選出的行記錄。
輸入bind_argument參數(shù)是一個(gè)表達(dá)式,它的值將被傳入(IN模式)或傳出(OUT模式)或先傳入再傳出(IN OUT模式)到動(dòng)態(tài)SQL語句或是PL/SQL塊中。一個(gè)輸出bind_argument參數(shù)就是一個(gè)能保存動(dòng)態(tài)SQL返回值的變量。
除了多行查詢外,動(dòng)態(tài)字符串可以包含任何SQL語句(不含終結(jié)符)或PL/SQL塊(含終結(jié)符)。
字符串中可以包括用于參數(shù)綁定的占位符。
但是,不可以使用綁定參數(shù)為動(dòng)態(tài)SQL傳遞模式對(duì)象。
在用于單行查詢時(shí),INTO子句要指明用于存放檢索值的變量或記錄。
對(duì)于查詢檢索出來的每一個(gè)值,INTO子句中都必須有一個(gè)與之對(duì)應(yīng)的、類型兼容的變量或字段。
在用于DML操作時(shí),RETURNING INTO子句要指明用于存放返回值的變量或記錄。
對(duì)于DML語句返回的每一個(gè)值,INTO子句中都必須有一個(gè)與之對(duì)應(yīng)的、類型兼容的變量或字段。
我們可以把所有的綁定參數(shù)放到USING子句中。默認(rèn)的參數(shù)模式是IN。
對(duì)于含有RETURNING子句的DML語句來說,我們可以把OUT參數(shù)放到RETURNING INTO之后,并且不用指定它們的參數(shù)模式,因?yàn)槟J(rèn)就是OUT。
如果我們既使用了USING又使用RETURNING INTO,那么,USING子句中就只能包含IN模式的參數(shù)了。
運(yùn)行時(shí),動(dòng)態(tài)字符串中的綁定參數(shù)會(huì)替換相對(duì)應(yīng)的占位符。所以,每個(gè)占位符必須與USING子句和/或RETURNING INTO子句中的一個(gè)綁定參數(shù)對(duì)應(yīng)。我們可以使用數(shù)字、字符和字符串作為綁定參數(shù),但不能使用布爾類型(TRUE,F(xiàn)ALSE和NULL)。要把空值傳遞給動(dòng)態(tài)字符串,我們就必須使用工作區(qū)。
動(dòng)態(tài)SQL支持所有的SQL類型。所以,定義變量和綁定變量都可以是集合、LOB,對(duì)象類型實(shí)例和引用。
作為一項(xiàng)規(guī)則,動(dòng)態(tài)SQL是不支持PL/SQL特有的類型的。這樣,它就不能使用布爾型或索引表。
我們可以重復(fù)為綁定變量指定新值執(zhí)行動(dòng)態(tài)SQL語句。但是,每次都會(huì)消耗很多資源,因?yàn)镋XECUTE IMMEDIATE在每次執(zhí)行之前都需要對(duì)動(dòng)態(tài)字符串進(jìn)行預(yù)處理。
1、查出表中重復(fù)列的數(shù)據(jù):
select a,count(*) from table group by a having count(*)1
2、查重復(fù)次數(shù)最多的列:
select a,num from (
select a,count(*) ?num from table group by a having count(*)1
)
order by num desc
此外,還有
1、查詢一個(gè)表中所有字段都相同的記錄
比如現(xiàn)在有一人員表?? (表名:peosons)
若想將姓名、編號(hào)、住址這三個(gè)字段完全相同的記錄查詢出來:
select ?p1.* ?from ?persons ?p1,persons ?p2 ?where ?p1.name=p2.name ?and ?p1.id = ?p2.id ?and ?p1.address=p2.address ? ? ? ? ? ? ? ? ?group by p1.name,p1.id,p1.address ?having count(*) 1;
或者:
select ?p1.* ?from ?persons ?p1,persons ?p2 ?where ?p1.name=p2.name
and ?p1.id=p2.id ?and ?p1.address=p2.address ?and ?p1.rowidp2.rowid;
或者:(下面這條語句執(zhí)行效率更高)
select ?* ?from (select ?p.*,row_number() ?over ?(partition ?by ?name,
id,address ?order ?by ?name) ?rn ?from ?persons ?p) ?where ?rn1;
2、 查詢一個(gè)表中某字段相同的記錄
語法:select ?p1.* ?from ?表名 p1,(select ?字段 ?from ?表名 group ?by ?字段 ?having ?count(*)1) ?p2 ?where ?p1.字段=p2.字段;
select ?p1.* ?from ?persons ?p1,(select ?address ?from ?persons ?group ?by ?address ?having ?count(*)1) ?p2
where ?p1.address=p2.address;
3、查詢一個(gè)表中某字段相同的記錄,其它字段不用查詢出來
select ?name,count(*) ?from ?persons group ?by ?name ?having ?count(*) 1;
無法排除某一列,只能查詢中寫出其他列,而不寫不查詢的這列,如:
1、Oracle數(shù)據(jù)庫:
select? *? from ‘?dāng)?shù)據(jù)庫的名字’? where Table_Name='你要查詢表的名字';
2、mysql查詢表所有列名,并用逗號(hào)分隔:
SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ",")
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '數(shù)據(jù)庫的名字' AND TABLE_NAME = '你要查詢表的名字'
擴(kuò)展資料:
Oracle數(shù)據(jù)庫其他查詢語句:
1、查詢所有表名:
select t.table_name from‘?dāng)?shù)據(jù)庫的名字’;
2、查詢所有字段名:
select t.column_name from ‘?dāng)?shù)據(jù)庫的名字’;
3、查詢指定表的所有字段名:
select t.column_name from ‘?dāng)?shù)據(jù)庫的名字’ where t.table_name = '你要查詢表的名字';
4、查詢指定表的所有字段名和字段說明:
select t.column_name, t.column_name from‘?dāng)?shù)據(jù)庫的名字’where t.table_name = '你要查詢表的名字';