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

當前位置:首頁>>開發編程>>數據庫>>新聞內容
SQL數據庫技巧集
作者:佚名 發布時間:2004-7-9 13:28:44 文章來源:西部E網
整理了一些SQL數據庫技巧,貼一下

一.怎樣刪除一個表中某個字段重復的列呀,舉個例子
表[table1]
id    name
1 aa
2 bb
3 cc
1 aa
2 bb
3 cc
我想最后的表是這樣的
id    name
1 aa
2 bb
3 cc
回答:
將記錄存到臨時表#t中,重復的記錄只存一條,然后將臨時表#t中的記錄再存回原表中,注意“select distinct id,class,name”要包含你需要的所有字段,否則有些字段就被刪掉了。
在查詢管理器里執行下面代碼:
-----------------------------
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'
----------------------------------------------------------------------------------------------
三.數據庫合并問題
access里的兩個表,想讓兩個表的內容合并

表[a]結構如下:
[id]        編號        自動編號
[name]      名稱        文本
[price]     價格        數字
[guige]     規格        文本
[changjia]  生產廠家    文本
[baozhuang] 包裝        文本
[danwei]    單位        文本
共有900條記錄,除了id和name字段,其他均可以為空

表[b]結構如下:
[id]        編號        自動編號
[name]      名稱        文本
[price]     價格        數字
[changjia]  生產廠家    文本
[danwei]    單位        文本
[xingzhi]   性質        文本
共有800條記錄,除了id和name字段,比表[a]少幾個字段,但還多一個[xingzhi]的字符安其它均可以為空

現在想生成一個新表[c],結構如下,而且內容是兩個表的內容之和,
[id]        編號        自動編號
[name]      名稱        文本
[price]     價格        數字
[guige]     規格        文本
[changjia]  生產廠家    文本
[baozhuang] 包裝        文本
[danwei]    單位        文本
[xingzhi]   性質        文本

用sql語句也可以,手工操作也好,xml也好,別管怎么著吧,怎么實現呀,哥們要郁悶壞了,真要讓我們再輸入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.更正:
如果直接在查詢分析器里執行:
-------------------------------
insert into c(name,.....)
select name,.....
from a
insert into c(name,.....)
select name,.....
from b
--------------------------------
3.用union方法
---------------------------------
insert into [c] ([id] ,編號,自動編號)
select [id],編號,自動編號 from [a]
union
select [id],編號,自動編號 from [b]
-----------------------------------
4.asp的解決辦法
------------------------------------------------------------
<% '循環檢測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"))    '調用像b表添加內容的函數!
      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 把兩個數組的內容復制進來
這一部分自己寫了做兩個循環
然后再存進數據庫
%>
---------------------------------------------------------------------------------------
最后轉一些經典的SQL語句:
1.蛙蛙推薦:一些精妙的SQL語句
-----------------------------------------------------------------------------------------------------------------------
說明:復制表(只復制結構,源表名:a 新表名:b)

SQL: select * into b from a where 1<>1



說明:拷貝表(拷貝數據,源表名:a 目標表名:b)

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



說明:顯示文章、提交人和最后回復時間

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開始時間,getdate())>5





說明:兩張關聯表,刪除主表中已經在副表中沒有的信息

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 專業名稱='"&strprofessionname&"' order by 性別,生源地,高考總成績



說明:

從數據庫中去一年的各單位電話費統計(電話費定額賀電化肥清單兩個表來源)

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')



說明:四表聯查問題:

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.刪除重復數據
-----------------------------------------------------------------------------------------------------------------------
一、具有主鍵的情況
a.具有唯一性的字段id(為唯一主鍵)
delete table 
where id not in 
(
select max(id) from table group by col1,col2,col3...
)
group by 子句后跟的字段就是你用來判斷重復的條件,如只有col1,
那么只要col1字段內容相同即表示記錄相同。

b.具有聯合主鍵
假設col1+','+col2+','...col5 為聯合主鍵
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 子句后跟的字段就是你用來判斷重復的條件,
如只有col1,那么只要col1字段內容相同即表示記錄相同。

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

二、沒有主鍵的情況

a:用臨時表實現
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:用改變表結構(加一個唯一字段)來實現
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中刪除重復數據的
·經典SQL語句大全
·SQL Server 2005與ASP.NET/A
·三種查看MySQL數據庫版本的方
·SQL Server 2005 Express 遠
·啟用SQL Server 2005 Expres
·Windows下如何安裝或卸載MyS
·解決MySQL5數據庫連接超時問
·清除SQL Server日志的兩種方
相關信息
·SQL Server 2005刪除用戶失敗解決方法(15138錯誤)
·SQL Server中刪除重復數據的幾個方法
·經典SQL語句大全
·SQL Server 2005與ASP.NET/ASP連接設置
·三種查看MySQL數據庫版本的方法
·SQL Server 2005 Express 遠程訪問設置方法
·啟用SQL Server 2005 Express的sa用戶名
·Windows下如何安裝或卸載MySQL服務
·解決MySQL5數據庫連接超時問題
·清除SQL Server日志的兩種方法
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個傳說
丟了幸福的豬
找個人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因為寂寞才想你
愛上你等于愛上了錯
在心里從此永遠有個你
一個人的寂寞兩個人的錯
主站蜘蛛池模板: 石泉县| 南开区| 灌南县| 和政县| 商丘市| 昌黎县| 永兴县| 永寿县| 体育| 黔西| 柳河县| 中宁县| 饶河县| 留坝县| 新龙县| 康马县| 彭阳县| 荔浦县| 衡南县| 婺源县| 清远市| 镇平县| 绵阳市| 通州区| 营山县| 三原县| 石屏县| 南岸区| 高州市| 类乌齐县| 洛扎县| 麻阳| 南靖县| 麦盖提县| 巴林左旗| 云梦县| 江阴市| 乌拉特前旗| 靖州| 维西| 始兴县|