成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當(dāng)前位置:首頁>>開發(fā)編程>>數(shù)據(jù)庫>>新聞內(nèi)容
SQL數(shù)據(jù)庫技巧集
作者:佚名 發(fā)布時(shí)間:2004-7-9 13:28:44 文章來源:西部E網(wǎng)
整理了一些SQL數(shù)據(jù)庫技巧,貼一下

一.怎樣刪除一個(gè)表中某個(gè)字段重復(fù)的列呀,舉個(gè)例子
表[table1]
id    name
1 aa
2 bb
3 cc
1 aa
2 bb
3 cc
我想最后的表是這樣的
id    name
1 aa
2 bb
3 cc
回答:
將記錄存到臨時(shí)表#t中,重復(fù)的記錄只存一條,然后將臨時(shí)表#t中的記錄再存回原表中,注意“select distinct id,class,name”要包含你需要的所有字段,否則有些字段就被刪掉了。
在查詢管理器里執(zhí)行下面代碼:
-----------------------------
SELECT DISTINCT id,, name
INTO #t
FROM table1 DELETE table1
          INSERT 
        INTO table1
                  SELECT *
                FROM #t
------------------------------
二.找出既會VB又會PHP的人
表是這樣的:
ID 員工 技能
1 1 VB
2 1 PHP
3 1 ASP
4 2 PHP
5 3 ASP
6 4 VB
7 4 ASP
要從這張表中找出既會VB又會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]        編號        自動(dòng)編號
[name]      名稱        文本
[price]     價(jià)格        數(shù)字
[guige]     規(guī)格        文本
[changjia]  生產(chǎn)廠家    文本
[baozhuang] 包裝        文本
[danwei]    單位        文本
共有900條記錄,除了id和name字段,其他均可以為空

表[b]結(jié)構(gòu)如下:
[id]        編號        自動(dòng)編號
[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]        編號        自動(dòng)編號
[name]      名稱        文本
[price]     價(jià)格        數(shù)字
[guige]     規(guī)格        文本
[changjia]  生產(chǎn)廠家    文本
[baozhuang] 包裝        文本
[danwei]    單位        文本
[xingzhi]   性質(zhì)        文本

用sql語句也可以,手工操作也好,xml也好,別管怎么著吧,怎么實(shí)現(xiàn)呀,哥們要郁悶壞了,真要讓我們再輸入800條記錄,我就掛了,
回答:
1.這樣
-----------------------------
insert into c(id,name,.....)
select id,name,.....
from a
insert into c(id,name,.....)
select max(id)+1,name,.....
from b
------------------------------
2.更正:
如果直接在查詢分析器里執(zhí)行:
-------------------------------
insert into c(name,.....)
select name,.....
from a
insert into c(name,.....)
select name,.....
from b
--------------------------------
3.用union方法
---------------------------------
insert into [c] ([id] ,編號,自動(dòng)編號)
select [id],編號,自動(dòng)編號 from [a]
union
select [id],編號,自動(dòng)編號 from [b]
-----------------------------------
4.asp的解決辦法
------------------------------------------------------------
<% '循環(huán)檢測a表
Set rs = Server.CreateObect("ADODB.RECORDSET")
      rs.open "select * from a order by id",conn,1,1
      Do while not rs.eof
          Call actAdd(rs("name"))    '調(diào)用像b表添加內(nèi)容的函數(shù)!
      rs.MoveNext
      Loop
rs.Close
Set rs = Nothing

Sub actAdd(txt)
Dim ts, sql
sql = "insert into b(name) values('"& txt &"')"
Set ts = Conn.Execute(sql)
      ts.Close
Set ts = Nothing
end Sub
%>
------------------------------------------------------------------
5.asp的解決辦法
-----------------------------------------------------------------------------------
<%
dim arr_temp1,arr_temp2,arr_data
set rs=conn.execute("select id,name,price,guige,changjia,baozhuang,danwei from a")
arr_temp1=rs.getrows
rs.close
set rs=nothing

set rs=conn.execute("select id,name,price,guige,changjia,danwei,xingzhi from b")
arr_temp2=rs.getrows
rs.close
set rs=nothing

rem 開始處理
redim arr_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 * into b from a where 1<>1



說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b)

SQL: insert into b(a, b, c) select d,e,f from b;



說明:顯示文章、提交人和最后回復(fù)時(shí)間

SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b



說明:外連接查詢(表名1:a 表名2:b)

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c



說明:日程安排提前五分鐘提醒

SQL:  select * from 日程安排 where datediff('minute',f開始時(shí)間,getdate())>5





說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息

SQL:  

delete from info where not exists ( select * from infobz where info.infid=infobz.infid ) 



說明:--

SQL:  

SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE

  FROM TABLE1, 

    (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE

        FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND

                FROM TABLE2

              WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, 

            (SELECT NUM, UPD_DATE, STOCK_ONHAND

                FROM TABLE2

              WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = 

                    TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y, 

        WHERE X.NUM = Y.NUM (+)

          AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B

WHERE A.NUM = B.NUM



說明:--

SQL:  

select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名稱='"&strdepartmentname&"' and 專業(yè)名稱='"&strprofessionname&"' order by 性別,生源地,高考總成績



說明:

從數(shù)據(jù)庫中去一年的各單位電話費(fèi)統(tǒng)計(jì)(電話費(fèi)定額賀電化肥清單兩個(gè)表來源)

SQL: 

SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,

      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC

FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration

        FROM TELFEESTAND a, TELFEE b

        WHERE a.tel = b.telfax) a

GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')



說明:四表聯(lián)查問題:

SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c  inner join d on a.a=d.d where .....



說明:得到表中最小的未使用的ID號

SQL:

SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID

 FROM  Handle

WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
-----------------------------------------------------------------------------------------------------------------------
2.刪除重復(fù)數(shù)據(jù)
-----------------------------------------------------------------------------------------------------------------------
一、具有主鍵的情況
a.具有唯一性的字段id(為唯一主鍵)
delete table 
where id not in 
(
select max(id) from table group by col1,col2,col3...
)
group by 子句后跟的字段就是你用來判斷重復(fù)的條件,如只有col1,
那么只要col1字段內(nèi)容相同即表示記錄相同。

b.具有聯(lián)合主鍵
假設(shè)col1+','+col2+','...col5 為聯(lián)合主鍵
select * from  table where col1+','+col2+','...col5 in (
  select max(col1+','+col2+','...col5) from table 
where having count(*)>1
group by col1,col2,col3,col4 
)
group by 子句后跟的字段就是你用來判斷重復(fù)的條件,
如只有col1,那么只要col1字段內(nèi)容相同即表示記錄相同。

c:判斷所有的字段
  select * into #aa from table group by id1,id2,....
  delete table 
  insert into table 
  select * from #aa

二、沒有主鍵的情況

a:用臨時(shí)表實(shí)現(xiàn)
select identity(int,1,1) as id,* into #temp from ta
delete #temp 
where id not in 
(
  select max(id) from # group by col1,col2,col3...
)
delete table ta
inset into ta(...)
   select ..... from #temp

b:用改變表結(jié)構(gòu)(加一個(gè)唯一字段)來實(shí)現(xiàn)
alter table 表 add  newfield int identity(1,1)
delete 表
where newfield not in
(
select min(newfield) from 表 group by 除newfield外的所有字段
)

alter table 表 drop column newfield


最新更新
·SQL Server 2005刪除用戶失敗
·SQL Server中刪除重復(fù)數(shù)據(jù)的
·經(jīng)典SQL語句大全
·SQL Server 2005與ASP.NET/A
·三種查看MySQL數(shù)據(jù)庫版本的方
·SQL Server 2005 Express 遠(yuǎn)
·啟用SQL Server 2005 Expres
·Windows下如何安裝或卸載MyS
·解決MySQL5數(shù)據(jù)庫連接超時(shí)問
·清除SQL Server日志的兩種方
相關(guān)信息
·SQL Server 2005刪除用戶失敗解決方法(15138錯(cuò)誤)
·SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
·經(jīng)典SQL語句大全
·SQL Server 2005與ASP.NET/ASP連接設(shè)置
·三種查看MySQL數(shù)據(jù)庫版本的方法
·SQL Server 2005 Express 遠(yuǎn)程訪問設(shè)置方法
·啟用SQL Server 2005 Express的sa用戶名
·Windows下如何安裝或卸載MySQL服務(wù)
·解決MySQL5數(shù)據(jù)庫連接超時(shí)問題
·清除SQL Server日志的兩種方法
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯(cuò)
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時(shí)代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實(shí)很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個(gè)傳說
丟了幸福的豬
找個(gè)人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因?yàn)榧拍畔肽?/a>
愛上你等于愛上了錯(cuò)
在心里從此永遠(yuǎn)有個(gè)你
一個(gè)人的寂寞兩個(gè)人的錯(cuò)
主站蜘蛛池模板: 婺源县| 班玛县| 鄂尔多斯市| 新乡市| 虞城县| 东安县| 通州区| 武清区| 广河县| 内乡县| 昭平县| 湖州市| 巴林右旗| 南丰县| 彭州市| 峨山| 中牟县| 汉源县| 乌苏市| 克山县| 乐山市| 镇巴县| 海南省| 太谷县| 瑞丽市| 昌邑市| 平阳县| 罗定市| 惠东县| 洛扎县| 诸暨市| 得荣县| 改则县| 谢通门县| 朔州市| 云梦县| 鲁山县| 洛阳市| 通城县| 黑山县| 屏东市|