日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL表之间复制数据、选出随机几条数据、删除重复数据、取得自增长列等操作...

發布時間:2024/1/17 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL表之间复制数据、选出随机几条数据、删除重复数据、取得自增长列等操作... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

--表之間數據復制
SELECT* INTO yozhu FROM yo --復制一份表
SELECT* INTO yozhu1 FROM yo where 1<>1 --只復制表結構,無數據
SELECT TOP 0 * into yozhu2 FROM yo? --只復制表結構,無數據

insert into yo(yoName) select yoName from yo--把本表復制一遍
insert into pubs.dbo.yo select yoName from dbo.yo --數據庫之間的表復制

SELECT * FROM pubs.dbo.yo
SELECT * FROM yo

--嵌套查詢; 括號里面可以是其他任意子查詢
SELECT * FROM yo WHERE yoID IN (SELECT yoID FROM yo WHERE yoID in(1,2,3))

--時間差值(查詢工作了50年的)
--年 yy, yyyy?
--季度 qq, q?
--月 mm, m?
--年中的日 dy, y?
--日 dd, d?
--周 wk, ww?
--星期 dw, w?
--小時 hh?
--分鐘 mi, n?
--秒 ss, s?
--毫秒 ms?
--微妙 mcs?
--納秒 ns

SELECT * FROM dbo.Employees WHERE DATEDIFF(yy,dbo.Employees.BirthDate,dbo.Employees.HireDate)>50

--此代碼未實現功能;sp_executesql值得研究;代碼寫成這樣是因為TOP后面不能接變量
DECLARE @startPage INT,@endPage INT,@sql VARCHAR(300)
SET @endPage=2
SET @startPage=1
SET @sql=' select top '+STR(@endPage-@startPage+1)+'from dbo.Employees where Rid not in (select top'
+STR(@startPage-1)+'Rid from dbo.Employees where Rid>1)'
EXEC sp_executesql @sql
?
?--范圍查詢
?SELECT * FROM dbo.Employees WHERE BirthDate BETWEEN '1963-01-01' AND GETDATE()
?SELECT * FROM dbo.Employees WHERE BirthDate NOT BETWEEN '1963-01-01' AND GETDATE()
?
?--刪除主表中附表沒有的信息;注意:這個時候外層表不能使用別名
?DELETE FROM dbo.Employees WHERE NOT EXISTS
?(SELECT * FROM dbo.EmployeeTerritories b WHERE dbo.Employees.EmployeeID=b.EmployeeID)
?
?--隨機選出5條數據
?SELECT TOP 5 * FROM dbo.Employees ORDER BY NEWID()
?--由此看出隨機性還是很科學的
?select newid()
?
?--刪除重復數據;這是yo表本身是自增主鍵的情況下
?DELETE FROM yo WHERE yoID NOT IN?
?(SELECT MAX(yoID) FROM yo GROUP BY yoName)

--這種方式對大數據不適用
SELECT DISTINCT * INTO tmp FROM dbo.yo
DELETE FROM dbo.yo
INSERT INTO yozhu1 SELECT * FROM tmp

--在非自增列下刪除重復數據;添加一列,初始值為1,步長值為1
ALTER TABLE dbo.yozhu1 ADD shao INT IDENTITY(1,1)
DELETE FROM dbo.yozhu1 WHERE dbo.yozhu1.yoID NOT IN?
(SELECT MAX(yoID) FROM dbo.yozhu1 GROUP BY yoName)
ALTER TABLE dbo.yozhu1 DROP COLUMN shao

SELECT * FROM yozhu1

--找出本數據庫下用戶建的表
SELECT NAME FROM sys.objects WHERE type='U'
SELECT NAME FROM sys.objects WHERE type='s' --找系統表

--找出該表下有些什么列
SELECT NAME FROM syscolumns WHERE id=OBJECT_ID('yo')
?
?--case就和C/C++/C#這些語言中的swith case道理是一樣的
?--首先給yoID分組,然后組內分組
?SELECT yoID,(CASE yoName?
????WHEN 'a' THEN 'shao'
????WHEN 'b' THEN 'yozhu'
????????? ELSE 'li' END)
?FROM dbo.yozhu1 GROUP BY yoID,yoName
?
?--case還能用在group by語句后
?SELECT yoName,(CASE WHEN yoID<72 AND yoID>65 THEN N'合格' ELSE N'不合格' END)?
?FROM yozhu1 GROUP BY CASE WHEN yoID<72 AND yoID>65 THEN N'合格' ELSE N'不合格' END,yoName
?
?--刪除表數據,效果和delete一樣
?/*TRUNCATE刪除數據性能更好;不能使用帶where的字句;不能進行事務回滾*/
?TRUNCATE TABLE dbo.yozhu1
?
--找出表的自增長列
SELECT Name FROM syscolumns WHERE id=OBJECT_ID('dbo.table_A')
AND (autoval IS NOT NULL OR status=128)

轉載于:https://www.cnblogs.com/kevinGao/p/3702268.html

總結

以上是生活随笔為你收集整理的SQL表之间复制数据、选出随机几条数据、删除重复数据、取得自增长列等操作...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。