SQL簡介
- SQL(結構化查詢語言)是用於存取和操作數據庫中的數據的標準數據庫程式語言。
- SQL是關係數據庫系統的標準語言。所有關係數據庫管理系統(RDMS),如MySQL、MS Access、Oracle、Sybase、Informix、Postgres和SQL Server都使用SQL作爲它們的標準數據庫語言。
- 爲了處理數據庫和數據庫相關的程式設計,程式設計師需要有一些媒介,或者可以說介面來詳細說明一組命令或程式碼來處理數據庫或存取數據庫的數據。在本章中,將簡要介紹在學習SQL的過程中您將學習的術語。
你會從SQL中學到什麼?
- SQL爲結構化查詢語言提供了獨特的學習和數據庫處理技術,並將幫助您更好地控制SQL查詢並有效處理這些程式碼。由於SQL幫助您包括數據庫建立,數據庫或表刪除,獲取行數據和修改這些數據等,並行SQL使得事情自動和平滑,終端使用者可以輕鬆存取和處理該應用程式的數據。
SQL 是什麼?
- SQL 發音爲「sequel」。
- SQL 指結構化查詢語言,全稱是 Structured Query Language(是最初由IBM開發)。
- SQL 是關係數據庫系統的標準語言。
- SQL 是一種 ANSI(American National Standards Institute 美國國家標準化組織)標準的計算機語言。
SQL 能做什麼?
- SQL可以建立新的數據庫及其物件(表,索引,檢視,儲存過程,函數和觸發器)。
- SQL可以修改現有數據庫的結構。
- SQL可以從數據庫中刪除(刪除)物件。
- SQL可以TRUNCATE(刪除)表中的所有記錄。
- SQL可以對數據字典進行COMMENT。
- SQL可以RENAME一個物件。
- SQL可以從數據庫中選擇(檢索)數據。
- SQL可以將數據插入到表中。
- SQL可以更新表中的現有數據。
- SQL可以從數據庫表中刪除記錄。
- SQL可以在數據庫中設定使用者的GRANT和REVOKE許可權。
SQL 的歷史
- 1970年,SQL由IBM的Donald D. Chamberlin和Raymond F. Boyce開發。
- 1974年,開發版本最初被稱爲SEQUEL(結構化英語查詢語言)。
- 1979年,關係軟體發佈了第一個叫做System / R的商業產品。
- 由於商標衝突問題,SEQUEL首字母縮略詞後來更改爲SQL。
- 後來IBM基於System / R的原型開始在SQL上開發商業產品。
- 第一個關係數據庫由RelationalSoftware發佈,後來被稱爲Oracle。
SQL 是一種標準 - 但是…
- 雖然 SQL 是一門 ANSI(American National Standards Institute 美國國家標準化組織)標準的計算機語言,但是仍然存在着多種不同版本的 SQL 語言。
- 然而,爲了與 ANSI 標準相相容,它們必須以相似的方式共同地來支援一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。
除SQL標準之外,大多數SQL數據庫程式還具有自己的專有擴充套件名!
在您的網站中使用 SQL
要建立一個顯示數據庫中數據的網站,您需要:
- 一個RDBMS數據庫程式(即MS Access,SQL Server,MySQL)。
- 使用伺服器端指令碼語言,如PHP或ASP。
- 使用SQL來獲取所需的數據。
- 使用HTML / CSS來設定頁面的樣式
RDBMS
- RDBMS 指關係型數據庫管理系統,全稱 Relational Database Management System。
- RDBMS 是 SQL 的基礎,同樣也是所有現代數據庫系統的基礎,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
- RDBMS 中的數據儲存在被稱爲表的數據庫物件中。
- 表是相關的數據項的集合,它由列和行組成。
程式碼範例:
SELECT * FROM Customers;
- 每個表都被分解成稱爲欄位的更小的實體。Customers表中的欄位由CustomerID,CustomerName,ContactName,Address,City,PostalCode和Country組成。欄位是表中的一列,用於維護表中每條記錄的特定資訊。
- 記錄(也稱爲行)是表中存在的每個單獨條目。例如,在上面的Customers表中有91條記錄。記錄是表中的橫向實體。
- 列是表中的垂直實體,其包含與表中的特定欄位相關聯的所有資訊。
SQL進程
當您對任何RDBMS執行SQL命令時,系統將確定執行請求的最佳方式,並由SQL引擎確定如何解釋該任務。
在此過程中包含了各種元件。
查詢排程器優化引擎經典查詢引擎SQL查詢引擎
典型的查詢引擎處理所有非SQL查詢,但SQL查詢引擎不會處理邏輯檔案。
SQL標準命令
與關係數據庫互動的標準SQL命令是建立、選擇、插入、更新、刪除和刪除,簡單分爲以下幾組:
DDL(數據定義語言)
數據定義語言用於改變數據庫結構,包括建立、更改和刪除數據庫物件。用於操縱表結構的數據定義語言命令有:
CREATE TABLE
– 建立(在數據庫中建立新表、表檢視或其他物件)
ALTER TABLE
– 更改 (修改現有的數據庫物件,如表)
DROP TABLE
– 刪除 (刪除數據庫中的整個表、表或其他物件的檢視)
DML(數據操縱語言)
數據操縱語言用於檢索、插入和修改數據,數據操縱語言是最常見的SQL命令。
數據操縱語言命令包括:
INSERT
– 插入 (建立記錄)
DELETE
– 刪除 (刪除記錄)
UPDATE
– 修改(修改記錄)
SELECT
– 檢索 (從一個或多個表檢索某些記錄)
DCL(數據控制語言)
數據控制語言爲使用者提供許可權控制命令。
用於許可權控制的命令有:
GRANT
– 授予許可權
REVOKE
– 復原已授予的許可權
SQL格式化
使用SQL格式化工具可以比較直觀的看到您想要的操作
SQL格式化工具
SQL RDBMS 概念
- RDBMS是關係數據庫管理系統(Relational Database Management System)的縮寫。
- RDBMS是SQL的基礎,也是所有現代數據庫系統(如MS SQL Server、IBMDB2、Oracle、MySQL和MicrosoftAccess)的基礎。
- 關係數據庫管理系統(Relational Database Management System,RDBMS)是一種基於E.F.Codd提出的關係模型的數據庫管理系統。
什麼是表?
RDBMS中的數據儲存在稱爲表的數據庫物件中。這個表基本上是一個相關數據條目的集合,它由許多列和行組成。請記住,表是關係數據庫中最常見和最簡單的數據儲存形式。
下面 下麪的程式是Customers表的一個範例
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
什麼是欄位?
每個表都被分解成更小的實體,稱爲欄位。Customers表中的欄位由ID、姓名、年齡、地址和薪資組成。
欄位是表中的列,用於維護有關表中每條記錄的特定資訊。
什麼是記錄或者行數據?
記錄也稱爲數據行,即表中存在的每個單獨的條目。例如,上面的Customers表中有7條記錄。下面 下麪是Customers表中的單行數據或記錄。
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
+----+----------+-----+-----------+----------+
記錄是表中的水平實體。
什麼是列?
列是表中的垂直實體,其中包含與表中特定欄位關聯的所有資訊。
例如,Customers表中的一列是Address,它表示位置描述,如下所示:
+-----------+
| ADDRESS |
+-----------+
| Ahmedabad |
| Delhi |
| Kota |
| Mumbai |
| Bhopal |
| MP |
| Indore |
+----+------+
什麼是空值?
表中的空值是顯示爲空的欄位中的值,這意味着具有空值的欄位是沒有值的欄位。
非常重要的一點是空值不同於零值或包含空格的欄位。具有空值的欄位是在建立記錄時留空的欄位。
SQL約束
約束是在表上的數據列上強制執行的規則。它們用於限制可以進入表中的數據型別。
這確保了數據庫中數據的準確性和可靠性。
約束可以是列級別,也可以是表級別。列級約束僅應用於一列,而表級約束則應用於整個表。
以下是sql−中可用的一些最常用的約束
- NOT NULL 約束:保證列中數據不能有 NULL 值
- DEFAULT 約束:提供該列數據未指定時所採用的預設值
- UNIQUE 約束:保證列中的所有數據各不相同
- 主鍵約束:唯一標識數據表中的行/記錄
- 外來鍵約束:唯一標識其他表中的一條行/記錄
- CHECK 約束:此約束保證列中的所有值滿足某一條件
- 索引:用於在數據庫中快速建立或檢索數據
約束可以在建立表時規定(通過 CREATE TABLE 語句),或者在表建立之後規定(通過 ALTER TABLE 語句)。
數據完整性
每個關係數據庫管理系統都存在以下型別的數據完整性:
- 實體完整性−表中沒有重複行。
- 域完整性−通過限制值的型別、格式或範圍來強制執行給定列的有效條目。
- 參照完整性−不能刪除其他記錄使用的行。
- 使用者定義的完整性−強制執行一些不屬於實體、域或參照完整性的特定業務規則。
數據庫規範化
數據庫規範化是在數據庫中有效地組織數據的過程。這個規範化過程有兩個原因:
- 消除冗餘數據,例如,將相同的數據儲存在多個表中。
- 確保數據依賴關係是有意義的。
這兩個原因都是值得追求的目標,因爲它們減少了數據庫消耗的空間量,並確保了數據的邏輯儲存。
規範化由一系列指導原則組成,有助於指導您建立良好的數據庫結構。
規範化指導原則稱爲範式,範式的目的是組織數據庫結構,使其符合第一範式、第二範式和第三範式的規則。
你可以更長遠的去選擇第四範式,第五範式,等等,但一般來說,第三範式已經足夠了。
第一範式(1NF)
第二範式(2NF)
第三範式(3NF)