SQL SERVER 常用SQL語句

1.取出分組最大值的那行記錄

主要是ROW_NUMBER() 的使用,利用生成序號取第一條記錄出來

select  *
from (
select *,ROW_NUMBER() over(partition by 分組字段 order by 排序字段 desc) as rn
from students
) a
where a.rn <=1;

 

2.將查詢結果插入表格或插入到一張新表格

1.INSERT INTO SELECT語句

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

或者:Insert into Table2 select  *  from Table1

(1)要求目標表Table2必須存在,並且字段field,field2...也必須存在

(2)注意Table2的主鍵約束,如果Table2有主鍵而且不爲空,則 field1, field2...中必須包括主鍵

2.SELECT INTO FROM語句

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

要求目標表Table2不存在,因爲在插入時會自動創建表Table2,並將Table1中指定字段數據複製到Table2中。

 

3.按條件批量更新字段

update 主表別名 set 主表別名.name=(select 子表別名.name from 子表  子表別名 where 主表別名.id=子表別名.id) from 主表 主表別名

update student set age=tm.age from temporary tm where student.name=tm.name

 

4.使用表變量代替遊標

-- 聲明表變量
DECLARE @temp TABLE
(
    empid INT,
    firstname NVARCHAR(10),
    lastname NVARCHAR(20)
);

-- 將源表中的數據插入到表變量中
INSERT INTO @temp(empid, firstname, lastname )
SELECT empid,firstname,lastname FROM HR.Employees
ORDER BY empid;

-- 聲明變量
DECLARE
    @empid AS INT,
    @firstname AS NVARCHAR(10),
    @lastname AS NVARCHAR(20);
    
WHILE EXISTS(SELECT empid FROM @temp)
BEGIN
    -- 也可以使用top 1
    SET ROWCOUNT 1
    SELECT @empid= empid, @firstname= firstname,@lastname= lastname FROM @temp;
    UPDATE HR.Employees SET fullname= @firstname+' '+@lastname WHERE empid=@empid;
    SET ROWCOUNT 0
    
    DELETE FROM @temp WHERE empid=@empid;
END

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章