長春疫情最新情況最新消息今天網(wǎng)站seo完整seo優(yōu)化方案
文章目錄
- 1.簡介
- 2.組成
- 3.工作原理
- 4.五種子語言
- 5.注釋方式
- 6.字符串表示方式
- 參考文獻(xiàn)
1.簡介
SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)是一種用于管理和操作關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)化查詢語言。它是一種領(lǐng)域特定語言(DSL,Domain Specific Language),用于定義數(shù)據(jù)庫結(jié)構(gòu)、插入、更新、刪除數(shù)據(jù)以及查詢數(shù)據(jù)等操作,并不局限于數(shù)據(jù)查詢。
SQL 最初由 IBM 的 Donald D. Chamberlin 和 Raymond F. Boyce 在 1970 年代初開發(fā),作為關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)的查詢語言。隨后,SQL 在 1986 年成為了 ANSI(美國國家標(biāo)準(zhǔn)學(xué)會(huì))和 ISO(國際標(biāo)準(zhǔn)化組織)的標(biāo)準(zhǔn),并在數(shù)據(jù)庫管理領(lǐng)域得到廣泛應(yīng)用。
SQL 被標(biāo)準(zhǔn)化后,仍在不斷的發(fā)展和完善,至今經(jīng)歷了一系列修訂,加入了大量新特性。雖然有這一標(biāo)準(zhǔn)的存在,但很多數(shù)據(jù)庫的實(shí)現(xiàn)并沒有完全遵循它,大多數(shù) SQL 代碼在移植到不同的數(shù)據(jù)庫系統(tǒng)之前需要進(jìn)行一些更改。
2.組成
關(guān)系數(shù)據(jù)庫管理系統(tǒng)使用 SQL 來存儲(chǔ)和管理數(shù)據(jù),系統(tǒng)存儲(chǔ)多個(gè)相互關(guān)聯(lián)的數(shù)據(jù)庫表,如常用的 Oracle、MySQL、MS SQL Server 等。 以下是此類系統(tǒng)的組成成分。
- SQL 表
SQL 表是關(guān)系數(shù)據(jù)庫的基本元素。 SQL 數(shù)據(jù)庫表由行和列組成。 數(shù)據(jù)庫工程師在多個(gè)數(shù)據(jù)庫表之間創(chuàng)建關(guān)系以優(yōu)化數(shù)據(jù)存儲(chǔ)空間。
例如,數(shù)據(jù)庫工程師為商店中的產(chǎn)品創(chuàng)建一個(gè) SQL 表:
Product ID Product Name Color ID
0001 Mattress Color 1
0002 Pillow Color 2
然后數(shù)據(jù)庫工程師將產(chǎn)品表鏈接到帶有顏色 ID 的顏色表:
Color ID Color Name
Color 1 Blue
Color 2 Red
- SQL 語句
SQL 語句或 SQL 查詢是關(guān)系數(shù)據(jù)庫管理系統(tǒng)可以理解的有效指令。 軟件開發(fā)人員使用不同的 SQL 語言元素構(gòu)建 SQL 語句。 SQL語言元素是構(gòu)成正確SQL語句的標(biāo)識(shí)符、變量和搜索條件等組件。
例如,以下 SQL 語句使用 SQL INSERT 命令將價(jià)格為 499 美元的床墊品牌 A 存儲(chǔ)到名為 mattress_table 的表中,其中列名稱為brand_name 和 cost:
INSERT INTO mattress_table (brand_name, cost)
VALUES(‘A’,’499’);
- 存儲(chǔ)過程
存儲(chǔ)過程是存儲(chǔ)在關(guān)系數(shù)據(jù)庫中的一個(gè)或多個(gè) SQL 語句的集合。 軟件開發(fā)人員使用存儲(chǔ)過程來提高效率和性能。 例如,他們可以創(chuàng)建一個(gè)存儲(chǔ)過程來更新銷售表,而不是在不同的應(yīng)用程序中編寫相同的 SQL 語句。
3.工作原理
結(jié)構(gòu)化查詢語言 (SQL) 的志聰過程需要經(jīng)過幾個(gè)軟件組件,包括以下組件。
- 解析器
解析器首先將 SQL 語句中的一些單詞單詞化,或用特殊符號(hào)替換。然后,解析器會(huì)檢查語句是否存在以下情況:
- 正確性
解析器會(huì)驗(yàn)證 SQL 語句是否符合 SQL 語義或規(guī)則,以確保查詢語句正確性。例如,解析器會(huì)檢查 SQL 命令是否以分號(hào)結(jié)尾。如果缺少分號(hào),解析器將返回錯(cuò)誤。
- 授權(quán)
解析器還會(huì)驗(yàn)證運(yùn)行查詢的用戶是否具有操作相應(yīng)數(shù)據(jù)的必要授權(quán)。例如,只有管理員用戶才有權(quán)刪除數(shù)據(jù)。
- 關(guān)系引擎
關(guān)系引擎或查詢處理器會(huì)創(chuàng)建一個(gè)計(jì)劃,以最有效的方式檢索、寫入或更新相應(yīng)數(shù)據(jù)。例如,關(guān)系引擎會(huì)檢查類似的查詢,重用以前的數(shù)據(jù)操作方法,或創(chuàng)建新的方法。關(guān)系引擎以 SQL 語句的中間級(jí)表示形式(稱為字節(jié)碼)編寫計(jì)劃。關(guān)系數(shù)據(jù)庫使用字節(jié)碼高效地執(zhí)行數(shù)據(jù)庫搜索和修改。
- 存儲(chǔ)引擎
存儲(chǔ)引擎或數(shù)據(jù)庫引擎是指處理字節(jié)碼并運(yùn)行預(yù)期 SQL 語句的軟件組件。存儲(chǔ)引擎會(huì)讀取并存儲(chǔ)物理磁盤存儲(chǔ)上的數(shù)據(jù)庫文件中的數(shù)據(jù)。完成后,存儲(chǔ)引擎會(huì)將結(jié)果返回給請(qǐng)求應(yīng)用程序。
4.五種子語言
SQL 由多種類型的語句組成,這些語句可以被非正式地歸類為子語言,主要分為 5 類。
- DCL(Data Control Language)
DCL 數(shù)據(jù)控制語言,用于控制數(shù)據(jù)庫表的訪問權(quán)限,包括授予和撤銷權(quán)限。
GRANT - 授權(quán)
REVOKE - 撤銷授權(quán)
- DDL(Data Definition Language)
DDL 數(shù)據(jù)定義語言用于定義數(shù)據(jù)庫結(jié)構(gòu)和模式,包括創(chuàng)建、修改和刪除數(shù)據(jù)庫對(duì)象,如表、索引、視圖等。
CREATE - 創(chuàng)建
ALTER - 修改
DROP - 刪除
TRUNCATE - 截?cái)?RENAME - 重命名
COMMENT - 注釋
- DML(Data Manipulation Language)
DML 數(shù)據(jù)操作語言供用戶操作數(shù)據(jù)庫,包括數(shù)據(jù)的增加、刪除、更新、載入等操作。
UPDATE - 更新數(shù)據(jù)庫表中的數(shù)據(jù)
DELETE - 從數(shù)據(jù)庫表中刪除數(shù)據(jù)
INSERT INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù)
REPLACE INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù),如果存在先刪除
LOAD - 從文件中導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫表
- DQL(Data Query Language)
DQL 數(shù)據(jù)查詢語言用來從表中獲取數(shù)據(jù)。
SELECT-從數(shù)據(jù)庫表中獲取數(shù)據(jù)
SELECT 語句常用關(guān)鍵字有:
FROM - 指定從哪個(gè)數(shù)據(jù)表或子查詢中查詢
WHERE - 指定查詢條件
GROUP BY - 結(jié)合合計(jì)函數(shù),根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組
HAVING - 對(duì)分組后的結(jié)果集進(jìn)行篩選
ORDER BY - 對(duì)結(jié)果集進(jìn)行排序
LIMIT - 對(duì)結(jié)果集進(jìn)行top限制輸出
UNION - 結(jié)果集縱向聯(lián)合
JOIN - 結(jié)果集橫向拼接
- TCL(Transaction Control Language)
TCL 事務(wù)控制語言用于控制事務(wù)的執(zhí)行。
SQL 事務(wù)是數(shù)據(jù)庫管理系統(tǒng)中的一個(gè)重要概念,它是一系列數(shù)據(jù)庫操作(如插入、更新、刪除等)的邏輯單元,要么全部執(zhí)行成功并永久保存,要么全部失敗并回滾到操作前的狀態(tài),保證數(shù)據(jù)庫的數(shù)據(jù)一致性和可靠性。
TCL 只能與 DML 一起使用,例如 INSERT、DELETE 和 UPDATE 等。
BEGIN TRANSACTION 或 START- 開始事務(wù)
SAVEPOINT - 在事務(wù)中設(shè)置保存點(diǎn),可以回滾到此處
ROLLBACK - 回滾
COMMIT - 提交
SET TRANSACTION – 改變事務(wù)選項(xiàng)
SET CONSTRAINT - 啟用或禁用外鍵約束
5.注釋方式
SQL 注釋是用來在 SQL 語句中添加對(duì)代碼的解釋說明。SQL 支持兩種類型的注釋符號(hào)。
單行注釋:使用兩個(gè)連續(xù)的減號(hào)(–)表示。減號(hào)后面的內(nèi)容將被視為注釋,直到該行結(jié)束。
SELECT column1, column2
FROM table
-- This is a single-line comment
WHERE condition;
注意,MySQL 也支持使用 # 符號(hào)進(jìn)行單行注釋。不過 # 并不是 SQL 標(biāo)準(zhǔn)規(guī)定的注釋方式,并不是所有數(shù)據(jù)庫都支持。
多行注釋:使用/* 注釋內(nèi)容*/
的格式表示。注釋內(nèi)容位于 /* 和 */ 之間,可以跨越多行。
SELECT column1, column2
FROM table
/* This is amulti-line comment */
WHERE condition;
6.字符串表示方式
在 SQL 標(biāo)準(zhǔn)中,字符串使用單引號(hào)(')來表示,而不是雙引號(hào)(")。
但對(duì)于主流的數(shù)據(jù)庫,都支持雙引號(hào)表示字符串。比如 Oracle、MySQL 和 SQL Server 等。
如果字符串中包含單引號(hào)該如何表示呢?
在 SQL 中,如果要表示一個(gè)帶有單引號(hào)的字符串有多種方式。
可以使用反斜杠(\)進(jìn)行轉(zhuǎn)移,也可以使用單引號(hào)進(jìn)行轉(zhuǎn)義,即使用兩個(gè)單引號(hào)來表示一個(gè)單引號(hào)。
SELECT 'It\'s a beautiful day';
SELECT 'It''s a beautiful day';
因?yàn)?MySQL 支持使用雙引號(hào)表示字符串,所以還可以使用雙引號(hào)表示一個(gè)包含單引號(hào)的字符串。
SELECT "It's a beautiful day"
反之亦然,如果字符串中包含雙引號(hào),也可以使用上面三種方式來表示帶有雙引號(hào)的字符串。
至于使用單引號(hào)還是雙引號(hào)表示字符串,我們應(yīng)該首選單引號(hào),因?yàn)檫@符合 SQL 標(biāo)準(zhǔn),且是主流的做法。
參考文獻(xiàn)
SQL - Wikipedia
What Is SQL (Structured Query Language)? - Amazon AWS