ASP數(shù)據(jù)庫編程SQL常用技巧
發(fā)布日期:2022-02-04 19:16 | 文章來源:站長(zhǎng)之家
表[table1]
idname
1aa
2bb
3cc
1aa
2bb
3cc
我想最后的表是這樣的
idname
1aa
2bb
3cc
回答:
將記錄存到臨時(shí)表#t中,重復(fù)的記錄只存一條,然后將臨時(shí)表#t中的記錄再存回原表中,注意“selectdistinctid,class,name”要包含你需要的所有字段,否則有些字段就被刪掉了。
在查詢管理器里執(zhí)行下面代碼:
SELECTDISTINCTid,,name
INTO#t
FROMtable1DELETEtable1
INSERT
INTOtable1
SELECT*
FROM#t
二.找出既會(huì)VB又會(huì)PHP的人
表是這樣的:
ID員工技能
11VB
21PHP
31ASP
42PHP
53ASP
64VB
74ASP
要從這張表中找出既會(huì)VB又會(huì)PHP的人,SQL該怎么寫???
回答:
SELECT員工FROM[Table]WHERE員工IN(SELECT員工FROM[Table]WHERE技能='VB')AND技能='PHP'
三.數(shù)據(jù)庫合并問題
access里的兩個(gè)表,想讓兩個(gè)表的內(nèi)容合并
表[a]結(jié)構(gòu)如下:
[id]編號(hào)自動(dòng)編號(hào)
[name]名稱文本
[price]價(jià)格數(shù)字
[guige]規(guī)格文本
[changjia]生產(chǎn)廠家文本
[baozhuang]包裝文本
[danwei]單位文本
共有900條記錄,除了id和name字段,其他均可以為空
表[b]結(jié)構(gòu)如下:
[id]編號(hào)自動(dòng)編號(hào)
[name]名稱文本
[price]價(jià)格數(shù)字
[changjia]生產(chǎn)廠家文本
[danwei]單位文本
[xingzhi]性質(zhì)文本
共有800條記錄,除了id和name字段,比表[a]少幾個(gè)字段,但還多一個(gè)[xingzhi]的字符安其它均可以為空
現(xiàn)在想生成一個(gè)新表[c],結(jié)構(gòu)如下,而且內(nèi)容是兩個(gè)表的內(nèi)容之和。
[id]編號(hào)自動(dòng)編號(hào)
[name]名稱文本
[price]價(jià)格數(shù)字
[guige]規(guī)格文本
[changjia]生產(chǎn)廠家文本
[baozhuang]包裝文本
[danwei]單位文本
[xingzhi]性質(zhì)文本
用sql語句也可以,手工操作也好,xml也好,別管怎么著吧,怎么實(shí)現(xiàn)呀,哥們要郁悶壞了,真要讓我們?cè)佥斎?00條記錄,我就掛了。
回答:
1.這樣
insertintoc(id,name,.....)
selectid,name,.....
froma
insertintoc(id,name,.....)
selectmax(id)+1,name,.....
fromb
2.更正:
如果直接在查詢分析器里執(zhí)行:
insertintoc(name,.....)
selectname,.....
froma
insertintoc(name,.....)
selectname,.....
fromb
3.用union方法
insertinto[c]([id],編號(hào),自動(dòng)編號(hào))
select[id],編號(hào),自動(dòng)編號(hào)from[a]
union
select[id],編號(hào),自動(dòng)編號(hào)from[b]
4.asp的解決辦法
<%'循環(huán)檢測(cè)a表
Setrs=Server.CreateObect("ADODB.RECORDSET")
rs.open"select*fromaorderbyid",conn,1,1
Dowhilenotrs.eof
CallactAdd(rs("name"))'調(diào)用像b表添加內(nèi)容的函數(shù)!
rs.MoveNext
Loop
rs.Close
Setrs=Nothing
SubactAdd(txt)
Dimts,sql
sql="insertintob(name)values('"&txt&"')"
Setts=Conn.Execute(sql)
ts.Close
Setts=Nothing
endSub
%>
5.asp的解決辦法
<%
dimarr_temp1,arr_temp2,arr_data
setrs=conn.execute("selectid,name,price,guige,changjia,baozhuang,danweifroma")
arr_temp1=rs.getrows
rs.close
setrs=nothing
setrs=conn.execute("selectid,name,price,guige,changjia,danwei,xingzhifromb")
arr_temp2=rs.getrows
rs.close
setrs=nothing
rem開始處理
redimarr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7)
rem把兩個(gè)數(shù)組的內(nèi)容復(fù)制進(jìn)來
這一部分自己寫了做兩個(gè)循環(huán)
然后再存進(jìn)數(shù)據(jù)庫
%>
最后轉(zhuǎn)一些經(jīng)典的SQL語句:
1.蛙蛙推薦:一些精妙的SQL語句
說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a新表名:b)
SQL:select*intobfromawhere1<>1
說明:拷貝表(拷貝數(shù)據(jù),源表名:a目標(biāo)表名:b)
SQL:insertintob(a,b,c)selectd,e,ffromb;
說明:顯示文章、提交人和最后回復(fù)時(shí)間
SQL:selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b
說明:外連接查詢(表名1:a表名2:b)
SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
說明:日程安排提前五分鐘提醒
SQL:select*from日程安排wheredatediff('minute',f開始時(shí)間,getdate())>5
說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息
SQL:
deletefrominfowherenotexists(select*frominfobzwhereinfo.infid=infobz.infid)
說明:--
SQL:
SELECTA.NUM,A.NAME,B.UPD_DATE,B.PREV_UPD_DATE
FROMTABLE1,
(SELECTX.NUM,X.UPD_DATE,Y.UPD_DATEPREV_UPD_DATE
FROM(SELECTNUM,UPD_DATE,INBOUND_QTY,STOCK_ONHAND
FROMTABLE2
WHERETO_CHAR(UPD_DATE,'YYYY/MM')=TO_CHAR(SYSDATE,'YYYY/MM'))X,
(SELECTNUM,UPD_DATE,STOCK_ONHAND
FROMTABLE2
WHERETO_CHAR(UPD_DATE,'YYYY/MM')=
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE,'YYYY/MM')||'/01','YYYY/MM/DD')-1,'YYYY/MM'))Y,
WHEREX.NUM=Y.NUM(+)
ANDX.INBOUND_QTY+NVL(Y.STOCK_ONHAND,0)<>X.STOCK_ONHAND)B
WHEREA.NUM=B.NUM
說明:--
SQL:
select*fromstudentinfowherenotexists(select*fromstudentwherestudentinfo.id=student.id)and系名稱='"&strdepartmentname&"'and專業(yè)名稱='"&strprofessionname&"'orderby性別,生源地,高考總成績(jī)
說明:
從數(shù)據(jù)庫中去一年的各單位電話費(fèi)統(tǒng)計(jì)(電話費(fèi)定額賀電化肥清單兩個(gè)表來源)
SQL:
SELECTa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy')AStelyear,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'01',a.factration))ASJAN,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'02',a.factration))ASFRI,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'03',a.factration))ASMAR,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'04',a.factration))ASAPR,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'05',a.factration))ASMAY,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'06',a.factration))ASJUE,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'07',a.factration))ASJUL,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'08',a.factration))ASAGU,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'09',a.factration))ASSEP,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'10',a.factration))ASOCT,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'11',a.factration))ASNOV,
SUM(decode(TO_CHAR(a.telfeedate,'mm'),'12',a.factration))ASDEC
FROM(SELECTa.userper,a.tel,a.standfee,b.telfeedate,b.factration
FROMTELFEESTANDa,TELFEEb
WHEREa.tel=b.telfax)a
GROUPBYa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy')
說明:四表聯(lián)查問題:
SQL:select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....
說明:得到表中最小的未使用的ID號(hào)
SQL:
SELECT(CASEWHENEXISTS(SELECT*FROMHandlebWHEREb.HandleID=1)THENMIN(HandleID)+1ELSE1END)asHandleID
FROMHandle
WHERENOTHandleIDIN(SELECTa.HandleID-1FROMHandlea)
2.刪除重復(fù)數(shù)據(jù)
一、具有主鍵的情況
a.具有唯一性的字段id(為唯一主鍵)
deletetable
whereidnotin
(
selectmax(id)fromtablegroupbycol1,col2,col3...
)
groupby子句后跟的字段就是你用來判斷重復(fù)的條件,如只有col1,那么只要col1字段內(nèi)容相同即表示記錄相同。
b.具有聯(lián)合主鍵
假設(shè)col1+','+col2+','...col5為聯(lián)合主鍵
select*fromtablewherecol1+','+col2+','...col5in(
selectmax(col1+','+col2+','...col5)fromtable
wherehavingcount(*)>1
groupbycol1,col2,col3,col4
)
groupby子句后跟的字段就是你用來判斷重復(fù)的條件,如只有col1,那么只要col1字段內(nèi)容相同即表示記錄相同。
c:判斷所有的字段
select*into#aafromtablegroupbyid1,id2,....
deletetable
insertintotable
select*from#aa
二、沒有主鍵的情況
a:用臨時(shí)表實(shí)現(xiàn)
selectidentity(int,1,1)asid,*into#tempfromta
delete#temp
whereidnotin
(
selectmax(id)from#groupbycol1,col2,col3...
)
deletetableta
insetintota(...)
select.....from#temp
b:用改變表結(jié)構(gòu)(加一個(gè)唯一字段)來實(shí)現(xiàn)
altertable表addnewfieldintidentity(1,1)
delete表
wherenewfieldnotin
(
selectmin(newfield)from表groupby除newfield外的所有字段
)
altertable表dropcolumnnewfield
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
相關(guān)文章
關(guān)注官方微信