增刪改查

jiuwen567發表於2024-03-23

  1. 增加單條資料

    insert into Department(DepartmentName,DepartmentDesc) values('研發部','這是研發部')--插入單條資料
    
  2. 多條

    /*insert into [Rank](RankName,RankDesc)
    select 'A','A級'union
    select 'B','B級'union
    select 'C','C級' --插入多條資料
    */
    

  • 語法

    delete from 表名 where 條件
    
    • 刪除員工表所有記錄

      delete from Employee
      
    • 刪除研發部中工資大於10000的員工

      update Employee set EmployeeSalary = 10000 where DepartmentId =1 and EmployeeSalary<=10000
      

--關於drop delete truncate
--drop 刪除表
--delete 可選刪,加入刪除自動編號為1,2,3資料,刪除資料後,編號將被永遠刪除,之後再新增資料編號從4,5,6開始
--truncate 必須全部刪除表中資料,清空資料後再新增編號依然從1,2,3開始

  • 語法
update 表名 set 欄位1=值1,欄位2=值2 where 條件
  • 工資調整,每個人工資增加1000

    update Employee set EmployeeSalary +=1000
    
  • 將員工編號為6的工資加100

    update Employee set EmployeeSalary +=100 where EmployeeId = 6
    
  • 將研發部工資低於10000的漲到10000

    update Employee set EmployeeSalary = 10000 where DepartmentId =1 and EmployeeSalary<=10000
    

  • 查詢所有列

    select * from Department
    
  • 查詢指定列

    select EmployeeName,EmployeeSalary from Employee
    
  • 指定查詢後的中文名

    select EmployeeName 員工名,EmployeeSalary*1.2 加薪資後工資 from Employee
    

    image-20240320182227465

條件查詢

select * from Employee where EmployeeSalary>=10000 and EmployeeSalary<=20000
select * from Employee where EmployeeSalary between 10000 and 20000
  1. 排序
select * from Employee order by EmployeeSalary asc --預設為asc可不寫
select * from Employee order by EmployeeSalary desc --逆序
select top 5 * from Employee order by EmployeeSalary desc --工資最高的5個人
select top 10 percent * from Employee order by EmployeeSalary desc --工資最高的10%個人
  1. null 查詢地址沒有填寫或填寫了地址的員工資訊

    select * from Employee where EmployeeAddress is null
    select * from Employee where EmployeeAddress is not null
    select * from Employee where EmployeeAddress=''--空字串
    
  2. 查詢工資比大喬高的人的資訊

    select * from Employee where EmployeeSalary>(select EmployeeSalary from Employee where EmployeeName = '大喬')
    

模糊查詢

like

與萬用字元搭配

萬用字元 含義

  • % 包含零個或更多字元的任意字串。
    _(下劃線) 任何單個字元。
    [ ] 指定範圍(例如 [a-f])或集合(例如 [abcdef])內的任何單個字元。
    [^] 不在指定範圍(例如 [^a - f])或集合(例如 [^abcdef])內的任何單個字元。

eg

  • LIKE '趙%' 將搜尋姓趙的人名或者說以漢字‘趙’ 開頭的字串(如 趙剛、趙小剛等)。
    LIKE '%剛' 將搜尋以漢字‘剛’結尾的所有字串(如 劉剛、李小剛等)。
    LIKE '%小%' 將搜尋在任何位置包含漢字‘小’的所有字串(如趙小剛、李小剛、山本小郎等)。
    LIKE '_小剛' 將搜尋以漢字“小剛”結尾的所有三個漢字的名稱(如 李小剛、趙小剛)。
select * from Employee where EmployeePhone like '183[0-5]%[^2,3]' --前三位為183,第四位為0-5,最後一位不是2,3 

SUBSTRING

select * from Employee where SUBSTRING(EmployeeName,3,1) = '香' --從第三個位置擷取一個

聚合函式

  1. AVG

    在 SQL Server 中, AVG() 函式是用於計算指定列中所有數值的平均值的聚合函式。

  2. COUNT

    在 SQL Server 中, COUNT() 函式是用於計算指定列或表示式中的行數的聚合函式。

  3. MAX

    在 SQL Server 中, MAX() 函式是用於計算指定列或表示式中最大值的聚合函式。

  4. MIN

    在 SQL Server 中,MIN() 函式是用於計算指定列或表示式中最小值的聚合函式。

  5. SUM

    在 SQL Server 中,SUM() 函式是一個聚合函式,用於計算指定列的數值之和。

綜合案例

select count(*) 員工總數,max(EmployeeSalary) 最高工資,min(EmployeeSalary) 最低工資,SUM(EmployeeSalary) 工資總和,ROUND(AVG(EmployeeSalary),3) 平均工資三位小數 from Employee

分組查詢

前言

要查詢武漢和重慶兩個城市的用聚合函式查詢的內容可以用union進行連線

union前後查詢的列要一樣

select count(*) 員工總數,max(EmployeeSalary) 最高工資,min(EmployeeSalary) 最低工資,SUM(EmployeeSalary) 工資總和,ROUND(AVG(EmployeeSalary),3) 平均工資三位小數 from Employee where EmployeeAddress = '武漢'union select count(*) 員工總數,max(EmployeeSalary) 最高工資,min(EmployeeSalary) 最低工資,SUM(EmployeeSalary) 工資總和,ROUND(AVG(EmployeeSalary),3) 平均工資三位小數 from Employee where  EmployeeAddress = '四川'

查詢各個城市的員工資訊

  • 用到分組函式group by
select EmployeeAddress 員工城市,count(*) 員工總數,max(EmployeeSalary) 最高工資,min(EmployeeSalary) 最低工資,SUM(EmployeeSalary) 工資總和,ROUND(AVG(EmployeeSalary),3) 平均工資三位小數 from Employee group by EmployeeAddress
  • 前面的列不能放除了聚合函式和group by 外的列image-20240324204025470

  • 加條件

    有固定位置

    普通條件>group by >聚合函式所使用的having

select EmployeeAddress 員工城市,count(*) 員工總數,max(EmployeeSalary) 最高工資,min(EmployeeSalary) 最低工資,SUM(EmployeeSalary) 工資總和,ROUND(AVG(EmployeeSalary),3) 平均工資三位小數 from Employee where RanId = 1 group by EmployeeAddress having COUNT(*)>1

相關文章