SQL學習筆記
阿新 • • 發佈:2020-08-18
一、查詢
1、連線查詢
2、分頁查詢
利用row_number() over(order by id)
函式計算出行數,選定相應行數返回即可,不過該關鍵字只有在SQL server 2005版本以上才有。
SELECT TOP #{pageSize} * FROM (SELECT ROW_NUMBER() OVER(ORDER BY bus.id) AS RowNumber, bus.XX,pro.XX FROM tableNameA bus join tableNameB pro on pro.id = bus.id)AS A WHERE RowNumber> (${pageSize}*(${startPage}-1))
利用offset /fetch next(2012版本及以上才有)offset A rows ,將前A條記錄捨去,fetch next B rows only ,向後在讀取B條資料
-- 分頁查詢(通用型)
select * from student order by sno
offset ((@pageIndex-1)*@pageSize) rows
fetch next @pageSize rows only;
-- 分頁查詢第2頁,每頁有10條記錄
select * from student order by sno offset 10 rows fetch next 10 rows only ;
二、增加
三、修改
(1)update select語法 ,當修改的值往資料庫存的時候需要查別的表才能確定修改的值,例如,往回傳的性別是女,但是存的時候存的是1,這個1是需要查別的表才能確定的
UPDATE a SET a.XXX='cc',a.XX='cc', a.XXX = b.XXX FROM tableNAme a ,tableNAme b where b.XXX = 'bbb' and a.XXX=1
四、刪除
(1)刪除約束條件(預設值約束,主鍵約束,等等)
ALTER TABLE dbo.表名 DROP CONSTRAINT 約束名
alter table #MEMBER_TEMP ALTER column DOB datetime null 刪除非空約束
(2)刪除表資料
五、建表/修改表結構
六、其他積累
(1)遊標
declare @polno char(15),@CODE char(10) -----宣告變數 declare pol_cur cursor -----宣告遊標 併為遊標賦值 for select polno,CODE from XXXX where INIEFFDT > '2019-10-01 00:00:00.000' open pol_cur -----開啟遊標 fetch next from pol_cur into @polno,@CODE --提取第一行資料 print N'XXX號 XXXX編號' -----打印表頭 while @@FETCH_STATUS = 0 --------迴圈操作遊標裡的資料,這裡是全域性變數不用宣告 begin print cast(@polno as char(12)) + @CODE fetch next from pol_cur into @polno,@CODE --------拿取下一條資料,就相當於for迴圈的i++ end close pol_cur ---------關閉遊標 deallocate pol_cur ---------釋放遊標
(2)修改列名 XXX表的 列名 改成 列名1
exec sp_rename 'XXX.列名','列名1'
(3)主鍵自增開關
set IDENTITY_INSERT 表名 on set IDENTITY_INSERT 表名 off
(4)SP
sp_tables 'XXX%' --模糊查詢表名 sp_helptext SP名 --顯示儲存過程的原始碼 sp_help SP名 --顯示儲存過程的引數及資料型別 sp_depends SP名 --顯示和儲存過程相關的資料庫物件資訊 sp_stored_procedures --返回資料庫中的儲存過程列表
(5)格式化時間
select stuff(stuff(convert(varchar(10),getdate(),112),5,0,N'年'),8,0,N'月')+N'日' select stuff(stuff(convert(varchar(10),dateadd(day,14,getdate()),112),5,0,N'年'),8,0,N'月')+N'日' --當前時間加上14天
select a.name, m.definition from sysobjects a, sys.sql_modules m where a.id = m.object_id and a.xtype = 'P' and lower(m.definition) like '表名'
SELECT * FROM SYS.objects JOIN SYS.columns ON SYS.objects.object_id=SYS.columns.object_id WHERE SYS.columns.name='列名'
(6)生成sql
如果是直接取值就是這樣寫'"&A2&"',如果是字串拼接就這樣寫'/file/"&C2&"'
="select * from 表名 where CODE = '"&A2&"' and NO ='"&B2&"'"
(7)需求:兩個表,一個多資料(包括少資料)#temp1,一個少資料#temp2,現在需要在多的裡面去掉少的那部分(去重,是一條資料全部重複,全欄位的重複才不要)
select * from #temp1 t1 where not exists ( select 1 from #temp2 t2 where t1.欄位1 = t2.欄位1 t1.欄位2 = t2.欄位2 t1.欄位3 = t2.欄位3 )