跳至內容

資訊科技導論/SQL

來自華夏公益教科書

結構化查詢語言 (SQL) 是一種程式語言,設計用於管理關係資料庫管理系統中儲存的資料。SQL 分為六種語言元素

  • 子句 - 它們是語句和查詢的組成部分。
  • 表示式 - 它們生成標量值或包含資料列和行的表的表。
  • 謂詞 - 它們指定條件,用於限制語句和查詢的影響,或更改程式流程。
  • 查詢 - 根據給定條件檢索資料。
  • 語句 - 它們控制事務、程式流程、連線、會話或診斷。
  • 無關緊要的空白 - 這通常在 SQL 語句和查詢中被忽略。

SQL 最初基於關係代數和元組關係演算,由資料定義語言、資料操縱語言和資料控制語言組成。

SQL 在 1986 年成為美國國家標準協會 (ANSI) 的公認標準,並在 1987 年成為國際標準化組織 (ISO) 的公認標準。雖然它已被接受為標準,但它已被修訂以包含更多功能。即使存在標準,大多數程式碼在沒有調整的情況下也不能完全在不同的資料庫系統之間移植。

主要 SQL 語句

[編輯 | 編輯原始碼]

運算子

[編輯 | 編輯原始碼]
運算子 描述 示例
= 等於 Author = 'Alcott'
<> 不等於(許多 DBMS 除了 <> 外還接受 != Dept <> 'Sales'
> 大於 Hire Date > '2012-01-31'
< 小於 Bonus < 50000.00
>= 大於或等於 Dependents >= 2
<= 小於或等於 Rate <= 0.05
BETWEEN 介於一個包含的範圍之間 Cost BETWEEN 100.00 AND 500.00
LIKE 匹配字元模式 First_Name LIKE 'Will%'
IN 等於多個可能值中的一個 DeptCode IN (101, 103, 209)
ISIS NOT 與空值(缺失資料)比較 Address IS NOT NULL
IS NOT DISTINCT FROM 等於值或兩者都為空值(缺失資料) Debt IS NOT DISTINCT FROM - Receivables
AS 用於在檢視結果時更改欄位名稱 SELECT employee AS 'department1'

有時建議和/或實施了其他運算子,例如天際線運算子(用於查詢那些不“比其他任何運算子差”的記錄)。

SQL 有 case/when/then/else/end 表示式,在 SQL-92 中引入。它最通用的形式,在 SQL 標準中稱為“搜尋情況”,就像其他程式語言中的條件(程式設計)else if 一樣

CASE WHEN n > 0
          THEN 'positive'
     WHEN n < 0
          THEN 'negative'
     ELSE 'zero'
END

SQL 按它們在原始碼中出現的順序測試 WHEN 條件。如果原始碼沒有指定 ELSE 表示式,SQL 預設為 ELSE NULL。一種簡化的語法 - 在 SQL 標準中稱為“簡單情況” - 類似於 switch 語句

CASE n WHEN 1
            THEN 'one'
       WHEN 2
            THEN 'two'
       ELSE 'I cannot count that high'
END

此語法使用隱式相等比較,SQL CASE|通常對與 NULL 進行比較有注意事項。

對於 Oracle-SQL 方言,後者可以縮短為等效的 DECODE 結構

SELECT DECODE(n, 1, 'one',
                 2, 'two',
                    'i cannot count that high')
FROM   some_table;

最後一個值是預設值;如果沒有指定,它也預設為 NULL。但是,與標準的“簡單情況”不同,Oracle 的 DECODE 將兩個 NULL 視為相等。[1]

資料定義語言 (DDL)

[編輯 | 編輯原始碼]

定義資料庫中不同物件結構的語句。它的作用可以在資料庫中建立、更改或刪除資料庫物件。DDL 的命令有

•CREATE - 為資料庫建立物件,例如索引或表

•ALTER - 重塑資料庫中已存在物件的結構,例如向表新增行

•DROP - 刪除資料庫中的物件

•RENAME - 用於重新命名資料庫中的物件

•TRUNCATE - 刪除表中的所有資料,而不刪除表本身

資料操縱語言 (DML)

[編輯 | 編輯原始碼]

允許資料庫使用者操縱資料和資料庫的語句。資料庫使用者可以以多種方式操縱資料。DML 的命令有

•SELECT - 從表中檢索資料

•INSERT - 向現有表新增行

•UPDATE - 更新一組現有的錶行

•DELETE - 從表中刪除現有的行


資料操縱語言 (DML) 是 SQL 的子集,用於新增、更新和刪除資料

  • Insert (SQL)|INSERT 向現有表新增行(正式稱為元組),例如
INSERT INTO example
 (field1, field2, field3)
 VALUES
 ('test', 'N', NULL);
  • Update (SQL)|UPDATE 修改一組現有的錶行,例如
UPDATE example
 SET field1 = 'updated value'
 WHERE field2 = 'N';
  • Delete (SQL)|DELETE 從表中刪除現有的行,例如
DELETE FROM example
 WHERE field2 = 'N';
  • Merge (SQL)|MERGE 用於合併多個表的 data。它結合了 INSERTUPDATE 元素。它在 SQL:2003 標準中定義;在此之前,一些資料庫透過不同的語法提供類似的功能,有時稱為“upsert”。
 MERGE INTO table_name USING table_reference ON (condition)
 WHEN MATCHED THEN
 UPDATE SET column1 = value1 [, column2 = value2 ...]
 WHEN NOT MATCHED THEN
 INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])

事務控制語言 (TCL)

[編輯 | 編輯原始碼]

管理對資料庫所做更改的語句。資料庫使用者可以接受、撤消或標記他們在資料庫中的更改。TCL 的命令有

•COMMIT - 使資料更改永久有效

•ROLLBACK - 丟棄在上次 COMMIT 或 ROLLBACK 語句之前進行的任何資料更改

•SAVEPOINT - 在當前位置儲存資料庫

資料控制語句 (DCS)

[編輯 | 編輯原始碼]

用於建立特權的語句,該特權允許使用者訪問和操縱資料庫中的資料。資料庫管理員可以配置安全措施來控制對資料庫中資料庫物件的訪問。DCS 的命令有

•GRANT - 授權使用者對物件執行操作

•REVOKE - 撤銷授權

定義資料庫

[編輯 | 編輯原始碼]

要使用 Access SQL 在 Access 中構建一個新表,您必須命名錶,命名欄位並定義欄位將包含的資料型別。必須使用 CREATE TABLE 語句在 SQL 中定義表。

新增資料

[編輯 | 編輯原始碼]

向關係中新增資料有兩種不同的方法。一種方法是逐條新增資料,另一種方法是一次新增大量資料,兩種情況都在開頭使用 INSERT INTO 語句。要新增一條記錄,必須使用欄位列表來定義要放置資料的欄位,然後必須在值列表中提供資料本身。要一次將多條記錄新增到表中,必須使用 INSERT INTO 語句以及 SELECT 語句。

檢視資料

[編輯 | 編輯原始碼]

要使用 SQL 查看錶中的資料,可以使用 SELECT 語句從資料庫表中檢索資料,結果通常以由任意數量的列組成的行集形式返回,然後必須使用 FROM 語句指定要從中選擇的表。要查看錶中的所有列標題而沒有任何實際資料行,請使用 SHOW 語句。其他語句,如 SUM、COUNT、AVG、MAX、MIN 和 ORDER BY,可用於按不同順序對資料進行排序,獲取資料的平均值和/或統計表中特定專案的數量。

修改資料

[編輯 | 編輯原始碼]

使用 SQL 修改表中的資料有多種方法。一種方法是 ALTER TABLE 語句,它允許您新增、刪除或修改表中的列。另一個語句是 UPDATE 語句,它允許您更新表中的記錄。這些語句允許使用者將資料輸入表中,以及更改表中的當前資料。您也可以使用 INSERT 語句將新資料放入表中。

刪除資料

[編輯 | 編輯原始碼]

要刪除資料表中已存在的資料,必須使用 DELETE 語句。DELETE 語句不會刪除表本身,它只會刪除表結構當前儲存的資料。

SQL 注入攻擊

[編輯 | 編輯原始碼]

SQL 注入是一種將惡意攻擊插入 SQL 語句的行為,攻擊者可以透過這種方式獲得對 Web 伺服器的控制權。它可以為攻擊者提供個人資訊,並使其能夠未經授權地訪問其他敏感資料。它還可以被用來獲取身份驗證和授權機制的訪問許可權,並收集給定資料庫中的所有資訊。它還可以用來降低資料庫的完整性。

  1. 無效的 <ref> 標籤;未為名為 DECODE 的引用提供文字
華夏公益教科書