你真的會玩SQL嗎?簡單的數據修改

已邀請:

你真的會玩SQL嗎?系列目錄


你真的會玩SQL嗎?之邏輯查詢處理階段


你真的會玩SQL嗎?和平大使 內連接、外連接


你真的會玩SQL嗎?三范式、數據完整性


你真的會玩SQL嗎?查詢指定節點及其所有父節點的方法


你真的會玩SQL嗎?讓人暈頭轉向的三值邏輯


你真的會玩SQL嗎?EXISTS和IN之間的區別


你真的會玩SQL嗎?無處不在的子查詢


你真的會玩SQL嗎?Case也瘋狂


你真的會玩SQL嗎?表表達式,排名函數


你真的會玩SQL嗎?簡單的 數據修改


你真的會玩SQL嗎?你所不知道的 數據聚合


你真的會玩SQL嗎?透視轉換的藝術


你真的會玩SQL嗎?冷落的Top和Apply


你真的會玩SQL嗎?實用函數方法匯總


你真的會玩SQL嗎?玩爆你的數據報表之存儲過程編寫(上)


你真的會玩SQL嗎?玩爆你的數據報表之存儲過程編寫(下)


項目會有種需要將A表中的部分字段與B表中的部分字段聯合查詢後保存到C表,或更新到C表,那怎麼實現呢?




  1. select into


  2. insert select


  3. delete from


  4. update from


  5. insert exec 語句可以把存儲過程或動態批處理返回的結果保存到現有表中(這裡暫時先不講)


Insert是T-sql中常用語句,Insert INTO table(field1,field2,...) values(value1,value2,...)這種形式的在應用程序開發中必不可少。但我們在開發、測試過程中,經常會遇到需要表復制的情況,如將一個table1的數據的部分字段復制到table2中,或者將整個table1復制到table2中,這時候我們就要使用SELECT INTO 和 INSERT INTO SELECT 表復制語句瞭。


1.INSERT INTO SELECT語句


語句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1


要求目標表Table2必須存在,由於目標表Table2已經存在,所以我們除瞭插入源表Table1的字段外,還可以插入常量。示例如下:



--1.創建測試表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10),
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]

create TABLE Table2
(
a varchar(10),
c varchar(10),
d int,
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]
GO
--2.創建測試數據
Insert into Table1 values('趙','asds','90')
Insert into Table1 values('錢','asds','100')
Insert into Table1 values('孫','asds','80')
Insert into Table1 values('李','asds',null)
GO
select * from Table2

--3.INSERT INTO SELECT語句復制表數據
Insert into Table2(a, c, d) select a,c,5 from Table1
GO

--4.顯示更新後的結果
select * from Table2
GO
--5.刪除測試表
drop TABLE Table1
drop TABLE Table2

2.SELECT INTO FROM語句


語句形式為:SELECT vale1, value2 into #Table2 from Table1


要求目標表Table2不存在,因為在插入時會自動創建表Table2,並將Table1中指定字段數據復制到臨時表Table2中。示例如下:



--1.創建測試表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10),
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]
GO

--2.創建測試數據
Insert into Table1 values('趙','asds','90')
Insert into Table1 values('錢','asds','100')
Insert into Table1 values('孫','asds','80')
Insert into Table1 values('李','asds',null)
GO

--3.SELECT INTO FROM語句創建表Table2並復制數據
select a,c INTO #Table2 from Table1
GO

--4.顯示更新後的結果
select * from #Table2
GO
--5.刪除測試表
drop TABLE Table1
drop TABLE #Table2

3.delete from


基於聯接的delete,如想刪除2008年5月6日以後下的訂單明細



DELETE FROM od
FROM sales.orderdetails AS od
JOIN sales.orders AS o ON od.orderid = o.orderid
WHERE o.orderdate >= '20080506'

4.update from


基於聯接的update,如想更新由usa客戶所下單的發貨信息,用customers表中客戶的country,region,city改寫shipcountry,shipregion,shipcity



UPDATE o
SET shipcountry = c.country ,
shipregion = c.region ,
shipcity = c.city
FROM sales.orders AS o
JOIN sales.customers AS c ON o.custid = c.custid
WHERE c.country = 'usa'

今天內容很簡單,就不做練習瞭,多看看文章……

要回復問題請先登錄註冊