ASP.NET Webform 簡易活動報名系統(3) 基本的SQL查詢指令 SELECT 跟 INSERT

by | 3 月 5, 2025 | 程式 | 0 comments

Views: 5

寫C#跟SQL SERVER的大概離不開Visual Studio跟SSMS,然後這篇除了會講一點SSMS操作以外,以講解SELECTINSERT指令為主,但SELECT指令能用的語法非常非常多,這邊只講很基礎的。

SSMS如何手動新增資料到資料表(不使用SQL)

SSMS本身可以像EXCEL那樣編輯資料,這對新手其實蠻友善的,上一堂課我們已經建立好報名的資料表了,接下來我們要對裡面塞資料。同樣你要開啟SSMS並連線到資料庫。

編輯前200個資料列

編輯資料

對著資料表按下右鍵,有編輯前200個資料列的項目,勇敢的按下去。

編輯畫面

很好,我們已經看到輸入資料的地方了,你很勇敢。

再來我們就可以來輸入資料了,每一行都要輸入喔

Enter

輸入好第一筆後按下Enter

執行好第一筆後按下Enter

如果有在前面出現驚嘆號的話,可以在資料最前方按下右鍵>執行SQL

驚嘆號時候 執行SQL

如果要改資料這邊也可以直接改

直接改資料

然後可以練習一下多輸入幾筆資料

快速輸入的一個技巧

資料其實可以直接整列複製,然後到下一列貼上

整列複製

到下一列貼上

一次貼上多列

也可以同時複製跟貼上多筆資料,技巧就是第一筆選取,然後按住shift選最後一筆,就會把資料選起來,然後就能複製貼上

複製貼上

複製貼上

編輯資料我們先介紹到這邊,還有很多小技巧。

CRUD 增刪修

寫網頁有個專有名詞叫做CRUD,四個字母分開念C+R+U+D 吸R優低

  1. Create 新增資料,對應資料庫的INSERT指令
  2. Read 讀取資料,對應資料庫的SELECT指令
  3. Update更新資料,對應資料庫的UPDATE指令
  4. Delete刪除資料,對應資料庫的DELETE指令

其中比較容易出問題是UPDATE DELETE指令,通常是少了WHERE,然後把全部資料刪除或更新成一樣的,這兩個指令會在下一篇說明。

Create 新增資料的SQL指令 Insert Into

官方文件

insert範例

INSERT INTO 資料表名稱 (欄位1,欄位2,欄位3,...) VALUES (值1,值2,值3,....)

說明:

  1. 這個指令在各種資料庫系統都通用
  2. INSERT INTOVALUES 、資料表名稱、 欄位名稱大小寫不拘
  3. 值:文字類要用單引號包起來,例如 '值1'

插入一筆資料

新增查詢

對著資料庫按右鍵>新增查詢

輸入SQL 指令

說明:

  1. 每條資料庫指令都翻譯成查詢,原文是Query,所有的資料庫語法都稱為Query
  2. SQL 是查詢的語言,我自己習慣把SQL Query稱為SQL指令或SQL Query
  3. 輸入後執行,執行的快速鍵是F5
INSERT INTO [Regist]
 ([Name],[Gender],[Birthday],[ROCID],[Email] ,[Phone],[Food],[EventID])
VALUES
 ('金貝貝',1,'1999/01/02','A123456789','[email protected]','0900-001-001',1,1)

Execute SQL Query 執行SQL 指令:

執行指令

執行指令後會顯示(1個資料列受影響),在這邊就等於指令成功輸入,如果執行錯誤會出現紅字(如圖)

SQL少一個值的錯誤畫面

INSERT 陳述式中的資料行數量大於 VALUES 子句中所指定的值。在 VALUES 子句中值的數目必須和 INSERT 陳述式中所指定的資料行數量相符。

這是VALUE前後少一個值或多一個值

輸入字串太長

資料行 ‘某一行’ 中的字串或二進位資料將會截斷。截斷的值:……

這是指超過欄位限制,這個案例是身分證字號輸入超過十碼。

錯誤資訊

接近 ……….. 之處的語法不正確。

語法格式有錯,通常是少逗點或單引號,這個案例是少單引號'

SELECT 指令 讀取資料

官方文件

基本語法

SELECT 欄位1,欄位2,欄位3,... 
FROM 資料表名稱 
WHERE 查詢條件 
ORDER BY 欄位1,欄位2 

說明:

  1. SELECT FROM WHERE ORDER BY、 欄位名稱、資料表名稱這些大小寫不拘
  2. SELECT 欄位1,欄位2,欄位3 是告訴資料庫查詢後要列出來的欄位
  3. FROM 資料表明稱 要查詢那個資料表
  4. WHERE 查詢條件,條件範例:
    • WHERE 欄位1 = 10 ,查詢等於10的
    • WHERE 欄位1 >= 10 ,查詢大於等於10的
    • 模糊查詢: WHERE 欄位2 like '%AB%' ,查詢欄位2字串有AB的
    • 組合查詢:WHERE 欄位1 = 10 AND 欄位2 = '黃圈圈' 可以使用ANDOR()組合多個條件
  5. SELECT * 用於列出全部欄位,通常開發期可以這樣用,但建議系統上線時候還是要列有使用到的欄位就好,查詢後用不到的欄位不要列出來可以增加系統效率。

查詢前1000筆資料 SELECT TOP 1000

SSMS本身有提供可以直接查詢前1000筆資料,非常的方便。

查詢前1000筆資料

選擇資料表 滑鼠右鍵>選取前1000個資料列

這功能相當方便

不過我們要測試一下下面幾個語法

列出前三筆資料-所有欄位

列出前三筆資料

SELECT TOP (3) *
FROM [PartyRegister].[dbo].[Regist]

這邊使用 SELECT TOP 3 來限制回傳資料筆數,這個功能非常常用。

列出前三筆ID跟NAME

SELECT TOP (3) ID,Name
  FROM [PartyRegister].[dbo].[Regist]

列出指定欄位

欄位換位置

這邊欄位也可以換位

SELECT TOP (3) Name,ID
FROM [PartyRegister].[dbo].[Regist]

欄位換位置

SELECT後欄位重新命名

這個功能在製作報表的時候很常用到,把輸出的資料除了換成想要的順序外,還要換個顯示名字,換欄位名稱寫法是在欄位名後加上 AS '新名稱'

SELECT TOP (3) 
  Name as '姓名',
  ID as '流水號'
FROM [PartyRegister].[dbo].[Regist]

欄位重新命名

SELECT WHERE

這邊要來展示WHERE一些常用的語法

列出所有的女生的名字 Gender = 2

執行是否成功

這邊順便說一下底畫的畫面,比較重要的是時間、結果筆數、執行成功或失敗等資訊。

SELECT
  Name
FROM [PartyRegister].[dbo].[Regist]
WHERE Gender = 2

然後注意SQL判斷式的等於只有一個,跟其它程式語言在這點很不同。

組合查詢式 SELECT WHERE AND

WHERE的查詢條件中,可以透過ANDOR NOT 還有括弧()來組合查詢式,

--查詢Gender = 2 以及姓名是 錢夫人
SELECT Name
FROM [PartyRegister].[dbo].[Regist]
WHERE Gender = 2 and Name = '錢夫人'

查詢女性與AND錢夫人

查詢筆數 SELECT COUNT(1) WHERE

雖然上一個可以直接用有幾列知道筆數,但我們可以透過COUNT(1) 或 COUNT(*)來得知筆數

這邊用上了COUNT(1)AS 重新命名

得到總人數

ID不連續的問題(其實不是問題,是資料庫特性)

這個問題常被新手問,為什麼我的ID不連續?大概有幾個原因

  1. 插入資料失敗,但Seed會自動+1,因此造成跳號
  2. 資料被刪除,然後空出來的ID就會缺號。

這是所有資料庫的特性,ID就像一本書的頁碼,中間撕掉一頁不會自動補,然後如果貼上新的一頁就只能從最後面貼。

ID的值可以改嗎?

其實可以,不過大家不會這樣做….。會造成資料的外鍵索引大亂。

0 Comments

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *