SQL(結構化查詢語言)是用於訪問和操作數據庫中的數據的標準數據庫編程語言。
SQL是關係數據庫系統的標準語言。所有關係數據庫管理系統(RDMS),如MySQL、MS Access、Oracle、Sybase、Informix、Postgres和SQL Server都使用SQL作爲它們的標準數據庫語言。
SQL標準命令
DDL(數據定義語言)
數據定義語言用於改變數據庫結構,包括創建、更改和刪除數據庫對象。用於操縱表結構的數據定義語言命令有:
- CREATE TABLE–創建(在數據庫中創建新表、表視圖或其他對象)
- ALTER TABLE– 更改 (修改現有的數據庫對象,如表)
- DROP TABLE– 刪除 (刪除數據庫中的整個表、表或其他對象的視圖)
DML(數據操縱語言)
數據操縱語言用於檢索、插入和修改數據,數據操縱語言是最常見的SQL命令。
- INSERT– 插入 (創建記錄)
- DELETE– 刪除 (刪除記錄)
- UPDATE– 修改(修改記錄)
- SELECT – 檢索 (從一個或多個表檢索某些記錄)
DCL(數據控制語言)
數據控制語言爲用戶提供權限控制命令。
- GRANT– 授予權限
- REVOKE– 撤銷已授予的權限
SQL語法規則
- SQL語句總是以關鍵字開始,如SELECT、INSERT、UPDATE、DELETE、DROP、CREATE。
- SQL語句以分號結尾。
- SQL不區分大小寫,意味着update與UPDATE相同。
SQL Select(選擇) 語法
SELECT 語法用於從數據庫中選擇數據。
返回的數據存儲在結果表中,稱爲結果集。
基本語法:SELECT和FROM
在任何SQL查詢語句中都:SELECT和FROM他們必須按順序排列。SELECT指示要查看哪些列,FROM標識它們所在的表。
SQL SELECT 語法如下所示:
SELECT column1, column2, ...
FROM table_name;
這裏,column1,column2,…是要從中選擇數據的表的字段名稱。如果要選擇表中可用的所有字段,請使用以下語法:
SELECT * FROM table_name;
SELECT 檢索一列
下面的 SQL 語句從 “Customers” 表中選取 “City” 列:
SELECT City FROM Customers;
SELECT 檢索多列
下面的 SQL 語句從 “Customers” 表中選取 “CustomerName” 和 “City” 列:
SELECT CustomerName, City FROM Customers;
注意:這兩個列名在查詢中用逗號分隔。每當選擇多個列時,它們必須用逗號分隔,但最後一列名稱之後不能添加逗號。
SELECT * 實例 - 檢索所有列
下面的 SQL 語句從 “Customers” 表中選取所有列:
SELECT * FROM Customers;
如果要選擇表中的所有列,則可以使用 * 而不需要把所有列名羅列查詢。
SQL SELECT DISTINCT(選擇不同) 語法
SQL SELECT DISTINCT 語法
SELECT DISTINCT語法用於僅返回不同的(different)值。在一張表內,一列通常包含許多重複的值; 有時你只想列出不同的(different)值。
SELECT DISTINCT語句用於僅返回不同的(different)值。
SQL SELECT DISTINCT語法如下所示:
SELECT DISTINCT column1, column2, ...
FROM table_name;
以下SQL語句僅從"Customers" 表中的 “Country” 列中選擇DISTINCT值:
SELECT DISTINCT Country FROM Customers;
SQL WHERE Clause(查詢子句)
SQL WHERE 子句
WHERE 子句用於過濾記錄。
WHERE 子句用於提取滿足指定標準的記錄。
SQL WHERE 語法
SELECT column1, column2, ...
FROM table_name
WHERE condition;
注意: WHERE子句不僅用於SELECT語法,還用於UPDATE,DELETE語法等!
WHERE子句可以與以下類型的SQL語句一起使用:
- UPDATE
- DELETE
- UPDATE語句
UPDATE "table_name"
SET "column_1" = [new value]
WHERE "condition";
DELETE語句:
DELETE FROM "table_name"
WHERE "condition";
以下SQL語句從"Customers"表中選擇其國家爲"Mexico"的所有客戶:
SELECT * FROM Customers
WHERE Country='Mexico';
也可以使用OR運算符的查詢子句:
SELECT * FROM Customers
WHERE Country='Mexico' OR PostalCode='05021';
WHERE 子句中的運算符
SQL AND, OR and NOT(與,或不是運算符)
SQL AND & OR 運算符
AND&OR運算符用於根據一個以上的條件過濾記錄,即用於組合多個條件以縮小SQL語句中的數據。
WHERE子句可以與AND,OR和NOT運算符結合使用。
AND和OR運算符用於根據多個條件篩選記錄:
- 如果由AND分隔的所有條件爲TRUE,則AND運算符顯示記錄。
- 如果使用AND運算符組合N個條件。對於SQL語句執行的操作(無論是事務還是查詢),所有由AND分隔的條件都必須爲TRUE。
- 如果由OR分隔的任何條件爲真,則OR運算符顯示記錄。
- 如果使用OR運算符組合N個條件。對於SQL語句執行的操作(無論是事務還是查詢),OR分隔的任何一個條件都必須爲TRUE。
- 如果條件不爲TRUE,則NOT運算符顯示記錄。
AND語法
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
OR語法
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
NOT語法
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
AND 運算符實例
以下SQL語句從 “Customers” 表中選擇其國家爲 “Germany” 、其城市爲"Berlin" 的所有客戶:
SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
OR 運算符實例
以下SQL語句選擇城市爲“Berlin”或“München”的“Customers”的所有字段:
SELECT * FROM Customers
WHERE City='Berlin' OR City='München';
NOT 運算符實例
以下SQL語句選擇國家不是 "Germany"的"Customers"的所有字段:
SELECT * FROM Customers
WHERE NOT Country='Germany';
結合 AND & OR
還可以組合AND和OR(使用括號來組成成複雜的表達式)。
以下SQL語句從國家 “Germany” 且城市爲"Berlin" 或"München"的"Customers" 表中選擇所有客戶:
SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='München');
結合AND,OR和NOT
也可以結合AND,OR和NOT運算符。
以下SQL語句選擇國家是“德國”的“客戶”的所有字段,城市必須是“柏林”或“慕尼黑”(用括號形成複雜表達式):
SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');
以下SQL語句選擇來自"Customers" 的國家不是 “Germany” 且不是 "USA"的所有字段:
SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
SQL ORDER BY Keyword(按關鍵字排序)
SQL ORDER BY 關鍵字
ORDER BY 關鍵字用於按升序或降序對結果集進行排序。
ORDER BY 關鍵字默認情況下按升序排序記錄。
如果需要按降序對記錄進行排序,可以使用DESC關鍵字。
SQL ORDER BY 語法
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
可以在ORDER BY子句中使用多個列,但要確保用於對該列進行排序的列應該在列表中。
ORDER BY 實例
下面的 SQL 語句從 “Customers” 表中選取所有客戶,並按照 “Country” 列排序:
SELECT * FROM Customers
ORDER BY Country;
ORDER BY DESC 實例
下面的 SQL 語句從 “Customers” 表中選取所有客戶,並按照 “Country” 列降序排序:
SELECT * FROM Customers
ORDER BY Country DESC;
ORDER BY 多列 實例1
下面的 SQL 語句從 “Customers” 表中選取所有客戶,並按照 “Country” 和 “CustomerName” 列排序:
SELECT * FROM Customers
ORDER BY Country, CustomerName;
ORDER BY 多列 實例2
以下SQL語句從"Customers" 表中選擇所有客戶,按 “Country” 升序排列,並按 “CustomerName” 列降序排列:
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
SQL INSERT INTO 語句(在表中插入)
SQL INSERT INTO 語句
INSERT INTO 語句用於向表中插入新的數據行。
SQL INSERT INTO 語法
INSERT INTO 語句可以用兩種形式編寫。
第一個表單沒有指定要插入數據的列的名稱,只提供要插入的值,即可添加一行新的數據:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
第二種,如果要爲表中的所有列添加值,則不需要在SQL查詢中指定列名稱。但是,請確保值的順序與表中的列順序相同。INSERT INTO語法如下所示:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
假設我們想在"Customers"表中插入一個新行。
我們可以使用以下SQL語句:
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');
注意:CustomerID列是一個自動遞增字段,在將新記錄插入到表中時自動生成。
僅在指定的列中插入數據
我們還可以只在指定的列中插入數據。
以下SQL語句插入一個新行,但只在“CustomerName”、“City”和“Countryn”列中插入數據(CustomerID字段將自動更新):
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
SQL NULL Values(空值)
什麼是SQL NULL值?
SQL 中,NULL 用於表示缺失的值。數據表中的 NULL 值表示該值所處的字段爲空。
具有NULL值的字段是沒有值的字段。
如果表中的字段是可選的,則可以插入新記錄或更新記錄而不向該字段添加值。然後,該字段將被保存爲NULL值。
值爲 NULL 的字段沒有值。尤其要明白的是,NULL 值與 0 或者包含空白(spaces)的字段是不同的。
注意:理解NULL值與零值或包含空格的字段不同是非常重要的。具有NULL值的字段是在記錄創建期間留空的字段!
如何測試NULL值?
使用比較運算符(例如=,<或<>)來測試NULL值是不可行的。
我們將不得不使用IS NULL和IS NOT NULL運算符。
IS NULL語法
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
IS NOT NULL語法
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
以下SQL語句使用IS NULL運算符來列出所有沒有地址的人員:
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NULL;
IS NOT NULL運算符
以下SQL語句使用IS NOT NULL運算符來列出所有具有地址的人員:
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NOT NULL;
創建表的時候,NULL 的基本語法如下:
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
這裏,NOT NULL表示對於給定列,必須按照其數據類型明確賦值。有兩列並沒有使用 NOT NULL 來限定,也就是說這些列可以爲 NULL。
值爲 NULL 的字段是在記錄創建的過程中留空的字段。
NULL 值會給選取數據帶來麻煩。不過,因爲 NULL 和其他任何值作比較,其結果總是未知的,所以含有 NULL 的記錄不會包含在最終結果裏面。
必須使用 IS NULL 或者 IS NOT NULL 來檢測某個字段是否爲 NULL。
SQL UPDATE 語句(更新表中的記錄)
SQL UPDATE 語句
- UPDATE 語句用於更新表中已存在的記錄。
- 還可以使用AND或OR運算符組合多個條件。
SQL UPDATE 語法
具有WHERE子句的UPDATE查詢的基本語法如下所示:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
注意
更新表中的記錄時要小心!
要注意SQL UPDATE 語句中的 WHERE 子句!
WHERE子句指定哪些記錄需要更新。如果省略WHERE子句,所有記錄都將更新!
SQL Delete 語句(刪除表中的記錄)
SQL DELETE 語句
DELETE語句用於刪除表中現有記錄。
SQL DELETE 語法
DELETE FROM table_name
WHERE condition;
注意
刪除表格中的記錄時要小心!
注意SQL DELETE 語句中的 WHERE 子句!
WHERE子句指定需要刪除哪些記錄。如果省略了WHERE子句,表中所有記錄都將被刪除!
刪除所有數據
可以刪除表中的所有行,而不需要刪除該表。這意味着表的結構、屬性和索引將保持不變:
DELETE FROM table_name;
或者
DELETE * FROM table_name;
注意:在沒有備份的情況下,刪除記錄要格外小心!因爲你刪除了不能重複!
SQL 運算符
SQL 運算符
運算符是保留字或主要用於SQL語句的WHERE子句中的字符,用於執行操作,例如:比較和算術運算。 這些運算符用於指定SQL語句中的條件,並用作語句中多個條件的連詞。
常見運算符有以下幾種:
- 算術運算符
- 比較運算符
- 邏輯運算符
- 否定條件運算符
SQL 表達式
SQL 表達式
表達式是計算值的一個或多個值、運算符和SQL函數的組合。這些SQL表達式類似於公式,它們是用查詢語言編寫的。
還可以使用它們查詢數據庫中的特定數據集。
句法
考慮SELECT語句的基本語法,如下所示:
SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION|EXPRESSION];
有不同類型的sql表達式,如下所示:
- 布爾型
- 數值型
- 日期
布爾表達式
SQL布爾表達式基於匹配單個值獲取數據。
數值表達式
數值表達式用於在任何查詢中執行任何數學運算。
句法:
SELECT numerical_expression as OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;
這裏,數值表達式用於數學表達式或任何公式。下面是一個簡單的示例,展示了SQLNDigitic表達式的用法:
有幾個內置函數,如avg()、sum()、count()等,用於對錶或特定表列執行所謂的聚合數據計算。
日期表達式
日期表達式返回當前系統日期和時間值:
另一個日期表達式如下所示:
SQL 選擇數據庫 USE語句
SQL 選擇數據庫 USE語句
當SQL Schema中有多個數據庫時,在開始操作之前,需要選擇一個執行所有操作的數據庫。
SQL USE語句用於選擇SQL架構中的任何現有數據庫。
句法
USE語句的基本語法如下所示 :
USE DatabaseName;
數據庫名稱在RDBMS中必須是唯一的。