sql server 操作(不定期更新)
要求:基本的語法要清楚。
sql server疑難點:
1、Partition by可以理解為 對多行資料分組後排序取每個產品的第一行資料
先處理內查詢,由內向外處理,外層查詢利用內層查詢的結果巢狀查詢不僅僅可以用於父查詢select語句使用。還可以用於insert、update、delete語句或其他子查詢中。
2、去重:去除地址重複的
語法:select * from 表名 where id in (select min(id) from 表名 group by Address)
舉例:select * from [parse2] where id in (select min(id) from [parse2] group by Address);
3、刪除某一列
語法:alter table table_name
4、求和:表中對兩個欄位進行求和,並對求和結果進行加減時
舉例:若要計算出場地費(slf)和人工費(clf)的和,並進行相加:
1)若兩個欄位都為數值型別,則不需要型別轉換,直接求和即可,方式如下:
語法:select sum(slf)+sum(clf) from 表名稱 where 條件語句
2)若兩個欄位為字元型的,比如型別為varchar的話,則需要進行型別轉換後,再進行計算,方法如下:
語法:select sum(cast(slf AS decimal(35, 0) )) + sum(cast(clf AS decimal(35,0) )) from 表名稱 where clf!='' and slf!=''
5、修改某個欄位的部分內容
語法:update 表名 set 欄位=REPLACE (如果是不同的型別需要進行轉換, 修改前的欄位, 修改後的欄位)
舉例:update [pharse3] set width=REPLACE (cast(width as nvarchar(20)),'50米,'一百米')
6、更改欄位的型別
語法:update 表名 set 欄位=cast(欄位 as nvarchar(20))
舉例:update [dbo] set year=cast(year as nvarchar(20))
7、刪除欄位:直接刪除date會出現約束錯誤,要刪除約束
語法:
alter table 表名 drop constraint 表名下面的約束的很長的那個東西
go
alter table 表名 drop column 欄位
舉例:
alter table [pharse3] drop constraint DF__pharse3__date__4FA7B896
go
alter table [pharse3] drop column date
8、更改欄位名字
語法:
exec sp_rename '[BB].[OldCol]','NewCol' -- 注意逗號後面,沒有表名,沒有點號,沒有方括號,執行這句,才能得到你想要的結果“NewCol”,
exec sp_rename '[BB].[舊的欄位名]', '新的欄位名'
或者,另一條等價:
exec sp_rename '[BB].[OldCol]', [NewCol] -- 逗號後面,如果要用方括號,就不要同時再用引號 。
舉例:
exec sp_rename '[Cdboare_coff].[Coefficient]', [areacoef]
如果說master分支提示錯誤,則有可能更改master 分支,切換到對應的資料庫名字下面
9、uinon 幾張表,然後再儲存
Select * into 總表 from a
Union all
Select * from b
Union All
Select * from c
10、except 兩張表取差集,然後再儲存
select *
into #temp
from (
select * from a
except
select * from b
) T --要取別名,不取別名則錯誤
11、格式轉換,這個比較複雜
select 欄位名 --上面和下面一致,用於顯示列表欄位內容
from 表一 a
LEFT JOIN 表二 b
on cast(a.欄位名 as nvarchar(20)) = b.欄位名 -- 轉換型別,注意點就在這裡
group by 欄位名 -- 同上面一樣的欄位名,聚合函式不需要寫(如avg(), )
備註:以上均是在工作過程中產生的疑惑,整理之。
參考資料:
引數資料型別 sql_variant 對於 like 函式的引數 1 無效。 - CSDN部落格
SQL實現表名更改,列名更改,約束更改 - jes.shaw - 部落格園
SQLSERVER,如何把一個表中某個欄位的'NULL'值改為0?-CSDN論壇