Ms SQL === ###### tags: `Ms SQL` `SQL Sever` ###### 學習附件 http://csyue.nccu.edu.tw/ch/bigdata1081(SQL&R).pdf --- ## 壹、認識資料庫 資料庫的階層是有循序的關係,也就是由小到大的排列,其最小的單位是 Bit(位元),而最大的單位則是 Data Base(資料庫)。資料依其單位的大小與 相互關係的層次如下: Bit(位元) → Byte(字元) → Field(資料欄) → Record(資料錄) → Table(資料表) → Data Base(資料庫)  --- ## 貳、主鍵( Primary Key )、外鍵( Foreign Key ) * **主鍵 ( Primary Key )** ``` (1) 用來辨識記錄的欄位, 具有「唯一性」不允許重複,因此不是每個欄位都適合作主鍵。 (2) 資料表不一定要有主鍵,但一般來說資料建立時一定都會設計成有主鍵。 (3) 每個資料表通常只有一個欄位會設定為主鍵, 但有時可能沒有一個欄位特別具唯一性, 此時可考慮使用兩個或多個欄位組合起來做為主鍵。 ```  * **外鍵( Foreign Key )** ``` FK Key 又稱外來鍵、連外鍵與外部鍵的名稱。 (1) 連結其他資料表,資料表間的關係都是藉由外來鍵所建立的。 ```  * ### **動腦時間 Q1** 如果我想知道這個BusinessEntityID,這個員工曾經待過的部門(DepartmentID),以及他的名字(FirstName),那麼需要用到哪兩個表,這兩個表之間又是用什麼欄位產生關連的呢? * ### **Ans 1** 在 HumanResources.EmployeeDepartmentHistory 可以知道該員工曾經待過的部門 DepartmentID,而 Person.Person可以知道員工的名字。兩個資料表可以透過就 BusinessEntityID 欄位做合併。 (註解:如果需要知道部門 DepartmentID 的名字,可以用HumanResources. Department 資料表做關聯。)  ## 參、SQL 資料庫結構  * SQL 資料庫 Union https://www.fooish.com/sql/union.html  * **Non-clustered index & heap _ 堆積 (無叢集索引的資料表)** https://docs.microsoft.com/zh-tw/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes?view=sql-server-ver16  * **Clustered index & clustered _ 說明叢集和非叢集索引** https://docs.microsoft.com/zh-tw/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described?view=sql-server-ver16  ## 肆、SQL資料檔案類型-正規化(Normalization) 正規化的精神就是讓資料庫中**重複的欄位資料減到最少**,並且能快速的找到資料,以**提高關聯性資料庫的效能**。 * **正規化**的目的 : 1. 降低資料的==重複性==( Data Redundancy) (Data Redundancy)。 2. 避免資料更新異常 參考資料:https://hackmd.io/@TSMI_E7ORNeP8YBbWm-lFA/rykcj8kmM?type=view ## 伍、SQL 資料型別 ### 1. 浮點數  ### 2. Unicode 字串  ### 3. 其他 * #### 二進位字串  * #### 貨幣精確數值  ## 陸、SQL 語法 **SELECT** 查詢 - 欄位名稱 **INTO** 表名 **FROM** 從...來 - 表名 **WHERE** 在哪裡 - 條件敘述 **GROUP BY** 查詢 - 欄位名稱 (此查詢方法會指定兩個以上的欄位,且所有欄位值皆要符合相同資料才會被分為同一組) **ORDER BY** 查詢 - 欄位名稱 ( 將 SELECT 取得的資料集依某欄位來作**排序** )  1. **查詢**資料庫 * ### **< Ex1 >** 使用 HumanResources.Department 表,挑出 DepartmentID, Name 這兩個欄位的資料,並依照 DepartmentID 排序。 * ### **< Ans1 >** ```sql= SELECT DepartmentID, Name /* 挑出兩個欄位的資料 */ FROM HumanResources.Department /* 從資料表抓資料 */ ORDER BY DepartmentID /* 預設是由小到大,可以加上 DESC 改為 由大到小*/ ```  2. **建立**資料庫 ```sql= CREATE DATABASE 教學資料庫 ON (NAME = 教學資料庫, FILENAME = 'D:\Sql_system_database\教學資料庫.MDF') ```  ## 柒、MVC 架構 * **MVC模式(Model–View–Controller)** 是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分: * **模型(Model)** - 程式設計師編寫程式應有的功能(實現演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實現具體的功能)。 * **視圖(View)** - 介面設計人員進行圖形==介面設計==。 * **控制器(Controller)** - 負責轉發==請求==,對請求進行處理。  ## 捌、SQL 指令 * **DDL** (Data ==Definition== Language) 資料**定義**語言用作開新資料表、設定欄位、刪除資料表、刪除欄位,管理所有有關資料庫結構的東西,常見的指令有 1. **Create**:建立資料庫的物件。 2. **Alter**:變更資料庫的物件。 3. **Drop**:刪除資料庫的物件。 * **DML** (Data ==Manipulation== Language) 資料**操作**語言用作新增一筆資料,刪除、更新等工作,常見的指令有 1. **Insert**:新增資料到 Table 中。 2. **Update**:更改 Table 中的資料。 3. **Delete**:刪除 Table 中的資料。 * **DQL** (Data ==Query== Language) 資料**查詢**語言只能取回查詢結果,指令只有1個 1. Select:選取資料庫中的資料。 * **DCL** (Data ==Control== Language) 資料**控制**語言用作處理資料庫權限及安全設定,常見的指令有 1. **Grant**:賦予使用者使用物件的權限。 2. **Revoke**:取消使用者使用物件的權限。 3. **Commit**:Transaction 正常作業完成。 4. **Rollback**:Transaction 作業異常,異動的資料回復到 Transaction 開始的狀態  ## 玖、關聯式資料庫模型  
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up