1. 程式人生 > 其它 >WebUI自動化測試中關於圖片驗證碼的解決方法

WebUI自動化測試中關於圖片驗證碼的解決方法

 轉載自:SQL資料庫的所有命令,函式,運算子

文章目錄

 

前言

大家可能不習慣SQL大寫的習慣,但是真正的規範就是要大寫,所以大家要慢慢習慣我用大寫的方式講解。在下面所有的講解中,我將會以基本語法,案例,聯絡形式講解,從而加強對每一個語句的使用和認識。本篇文章是筆者整理了整整一個通宵才寫出,希望大家三連好評,謝謝。當然,擁有本篇文章,你將會完全掌握mysql的所有命令使用,不再用去購買或者雜亂學習。本篇內容暫時講解資料庫的篩選部分,因為資料庫的最初入門如建立,備份等都有講過,魔法傳送:

傳送門
該傳送門內容有:

MYSQL 最重要的命令

SELECT 從資料庫中提取資料
UPDATE  更新資料庫中的資料
DELETE 從資料庫中刪除資料 
INSERT INTO 將新資料插入資料庫
CREATE DATABASE 建立一個新的資料庫
ALTER DATABASE 	修改資料庫
CREATE TABLE 	建立一個新表
ALTER TABLE 	修改表
DROP TABLE		刪除表
CREATE INDEX	建立索引(搜尋鍵)
DROP INDEX	刪除索引

SELECT選擇語句

該SELECT語句用於從資料庫中選擇資料。返回的資料儲存在一個結果表中,稱為結果集。
SELECT 語法:

SELECT column1, column2, ...

此處,column1、column2、… 是要從中選擇資料的表的欄位名稱。如果要選擇表中的所有可用欄位,請使用以下語法:

SELECT * FROM table_name;

假設我們已經有一個數據庫Customers如下:

SELECT 列示例
以下 SQL 語句從“Customers”表中選擇“CustomerName”和“City”列:

SELECT CustomerName, City FROM Customers;

SELECT * 示例
以下 SQL 語句從“Customers”表中選擇所有列:

SELECT * FROM Customers;

練習題:
1-獲取Customers表中的所有列。

SELECT * FROM Customers;

2-編寫一條語句,City從Customers表中選擇列。

SELECT City FROM Customers;

3-從Customers表中的Country列中選擇所有不同的值。(下面會講,不懂沒關係)

SELECT DISTINCT	Country FROM Customers;

SELECT DISTINCT 選擇不同語句

該SELECT DISTINCT語句僅用於返回不同(不同)的值。在表中,一列通常包含許多重複值;有時您只想列出不同的(不同的)值。
SELECT DISTINCT 語法

SELECT DISTINCT column1, column2, ...
FROM table_name;

我們還是假設有這樣一個Customers資料庫:

沒有 DISTINCT 的 SELECT 示例
以下 SQL 語句從“Customers”表的“Country”列中選擇所有(包括重複的)值:

SELECT Country FROM Customers;

SELECT DISTINCT 示例

SELECT DISTINCT Country FROM Customers;

以下 SQL 語句列出了不同(不同)客戶國家/地區的數量:

SELECT COUNT(DISTINCT Country) FROM Customers;

練習:
1-從表中的Country列中選擇所有不同的值Customers。

SELECT  DISTINC Country FROM Customers;

WHERE 查詢定位 子句

該WHERE子句用於過濾記錄。它用於僅提取滿足指定條件的記錄。
WHERE 語法

SELECT column1, column2, ...
FROM table_name
WHERE condition;

注: 該WHERE條款不僅在使用 SELECT的語句,它也被用在UPDATE, DELETE等!
我們假設還是有Customers這樣一個數據庫如下:

WHERE 子句示例
以下 SQL 語句在“Customers”表中選擇來自國家“Mexico”的所有客戶:

SELECT * FROM Customers
WHERE Country='Mexico';

文字欄位與數字欄位
SQL 需要在文字值周圍使用單引號(大多數資料庫系統也允許雙引號)。但是,數字欄位不應包含在引號中:

SELECT * FROM Customers
WHERE CustomerID=1;

WHERE 子句中的運算子
可以在WHERE子句中使用以下運算子

我們可以一一演示這些符號的使用,耐心學
假設我們有一下資料庫叫做Product:

選取價格為18的所有產品(=)

SELECT * FROM Products
WHERE Price = 18;

選取所有價格大於30的產品(>)

SELECT * FROM Products
WHERE Price > 30;

選取所有價格小於30的產品(<)

SELECT * FROM Products
WHERE Price < 30;

選取所有價格大於等於30的產品(>= )

SELECT * FROM Products
WHERE Price >= 30;

選取所有價格小於等於30的產品( <= )

SELECT * FROM Products
WHERE Price <= 30;

選取所有價格不等於18的產品(相當於!=)

SELECT * FROM Products
WHERE Price <> 18;

選取所有價格處於50和60之間的產品

SELECT * FROM Products
WHERE Price BETWEEN 50 AND 60;

從上面的Customers資料庫搜尋所有字母s開頭的城市

SELECT * FROM Customers
WHERE City LIKE 's%';

從Customers資料庫中查詢所有在Paris和London的使用者

SELECT * FROM Customers
WHERE City IN ('Paris','London');

以上便是對所有符號的演示。
我們再來一些練習加以鞏固(我們用到的是上面的customers)
1-選擇City列值為“Berlin”的所有記錄。

SELECT * FROM Customers
WHERE City='Berlin';

2-使用NOT關鍵字選擇City不是"Berlin"的所有記錄。

SELECT * FROM Customers
WHERE NOT City ='Berlin';

3-選擇CustomerID列值為 32 的所有記錄。

SELECT * FROM Customers
WHERE CustomerID =12;

AND、OR 和 NOT 運算子

該WHERE子句可以結合 AND,OR和 NOT操作。在AND與OR操作用於基於多個條件篩選記錄:
該AND操作顯示一個記錄,如果所有條件滿足 AND 為真。
所述OR操作顯示一個記錄,如果任何一個條件滿足OR為真。
該NOT操作顯示,如果條件(S)是不正確的記錄。
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;

我們還是假設有如下“Customers”表:

AND 示例
以下 SQL 語句從Customers中選擇國家為"Germany"且city為"Berlin"的所有欄位:

SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';

OR 示例
選取所有"Customers" 中city為"Berlin" OR “München”:

SELECT * FROM Customers
WHERE City='Berlin' OR City='München';

NOT 示例
從 “Customers” 選取country不是 "Germany"的欄位:

SELECT * FROM Customers
WHERE NOT Country='Germany';

結合AND, OR and NOT
從"Customers" 中選擇國家為"Germany"”且城市必須為"Berlin" OR "München"的所有欄位(使用括號形成複雜的表示式):

SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');

從 “Customers"中選擇國家不是“Germany” 也不是"USA":的所有欄位:

SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';

練習
選擇 City 列值為 ‘Berlin’ 且 PostalCode 列值為 12209 的所有記錄。

SELECT * FROM Customers
WHERE City = 'Berlin'
AND PostalCode= 12209;

ORDER BY 關鍵字

該ORDER BY關鍵字用於按升序或降序對結果集進行排序。ORDER BY預設情況下,關鍵字按升序對記錄進行排序。要按降序對記錄進行排序,請使用 DESC關鍵字。
ORDER BY 語法

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

我們還是假設有這個“Customers”表如下:

ORDER BY 示例
從“Customers”表中選擇所有客戶,按“Country”列排序:

SELECT * FROM Customers
ORDER BY Country;

ORDER BY DESC 示例
從“Customers”表中選擇所有客戶,按“Country”列按 DESCENDING 排序:

SELECT * FROM Customers
ORDER BY Country DESC;

ORDER BY 多列示例
從“Customers”表中選擇所有客戶,按“Country”和“CustomerName”列排序。這意味著它按國家/地區排序,但如果某些行具有相同的國家/地區,則按 CustomerName 排序:

SELECT * FROM Customers
ORDER BY Country, CustomerName;

從“Customers”表中選擇所有客戶,按“Country”升序和“CustomerName”列降序排序:

SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;

練習
從Customers表中選擇所有記錄,按城市列的字母順序對結果進行排序。

SELECT * FROM Customers
ORDER BY City;

INSERT INTO 插入語句

該INSERT INTO語句用於在表中插入新記錄。
INSERT語法
可以INSERT INTO 用兩種方式編寫語句:
1- 指定要插入的列名和值:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

2-如果要為表的所有列新增值,則無需在 SQL 查詢中指定列名。但是,請確保值的順序與表中的列順序相同。在這裡, INSERT INTO語法如下:

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

我們假設還是有著樣一個Customers表:

INSERT示例
以下 SQL 語句在“Customers”表中插入一條新記錄:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

執行顯示如下:

您是否注意到我們沒有在 CustomerID 欄位中插入任​​何數字?CustomerID 列是一個自動遞增欄位,將在新記錄插入表中時自動生成。
僅在指定列中插入資料
下面的 SQL 語句將插入一條新記錄,但只在“CustomerName”、“City”和“Country”列中插入資料(CustomerID 會自動更新):

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

執行後將會顯示如下:

練習:
表中插入一條新記錄。

INSERT INTO Customers 
(

CustomerName, 
Address, 
City, 
PostalCode,
Country
)

VALUES
 
(

'Hekkan Burger',
'Gateveien 15',
'Sandnes',
'4306',
'Norway'
)
;

NULL 空值

具有 NULL 值的欄位是沒有值的欄位。如果表中的欄位是可選的,則可以在不向該欄位新增值的情況下插入新記錄或更新記錄。然後,該欄位將儲存為 NULL 值。
注意: 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;

我們還是以”Customers”表為例子:

IS NULL 運算子
列出了 "Address"欄位中具有 NULL 值的所有客戶:

SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;

提示:始終使用 IS NULL 來查詢 NULL 值。
IS NOT NULL 運算子
該IS NOT NULL運算子用於測試非空值(NOT NULL 值)。
列出了在 "Address”欄位中具有值的所有客戶:

SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;

練習:
從列為空的Customers位置選擇所有記錄PostalCode。

SELECT * FROM Customers
WHERE PostalCode IS NULL;

UPDATE更新語句

UPDATE語句用於修改表中的現有記錄。
UPDATE 語法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

注意: 更新表中的記錄時要小心!注意 WHERE語句中的子句UPDATE。該WHERE子句指定應該更新哪些記錄。如果省略該WHERE子句,表中的所有記錄都將被更新!
我們還是以“Customers”表為例:

更新表
更新CustomerID = 1的使用者名稱字和城市資料

UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;

更新過後將會如下:

更新多條記錄
該WHERE子句確定將更新多少條記錄。
將國家為"Mexico"的所有記錄的 ContactName 更新為“Juan”:

UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';

更新後將會變成:

更新警告!
更新記錄時要小心。如果省略該 WHERE子句,則所有記錄都將被更新!
例如:

UPDATE Customers
SET ContactName='Juan';

則會導致如下結果:

練習:
更新表City中所有記錄的Customers列。

UPDATE Customers
SET City = 'Oslo';

DELETE刪除語句

該DELETE語句用於刪除表中的現有記錄。
刪除語法

DELETE FROM table_name WHERE condition;

注意: 刪除表中的記錄時要小心!注意 WHERE語句中的子句 DELETE。該WHERE條款指定應刪除哪些記錄。如果省略該WHERE子句,表中的所有記錄都將被刪除!
哈哈哈哈,我們還是以“Customers”表為例子如下:

刪除示例
從“Customers”表中刪除客戶“Alfreds Futterkiste”:

DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';

於是就變成這樣:

刪除所有記錄
可以在不刪除表的情況下刪除表中的所有行。這意味著表結構、屬性和索引將保持不變

DELETE FROM table_name;

例如:刪除“Customers”表中的所有行,但不刪除該表:

DELETE FROM Customers;

練習:從Customers表中刪除Country值為“挪威”的所有記錄。

DELETE FROM Customers
WHERE Country = 'Norway';

TOP、LIMIT、FETCH FIRST 或 ROWNUM限制子句

SELECT TOP 子句
SELECT TOP子句用於指定要返回的記錄數。SELECT TOP子句在具有數千條記錄的大表上很有用。返回大量記錄會影響效能。
注意: 並非所有資料庫系統都支援該 SELECT TOP子句。MySQL 支援LIMIT子句選擇有限數量的記錄,而 Oracle 使用FETCH FIRST n ROWSONLYROWNUM
Server / MS 訪問語法:

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;

MySQL 語法:

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;

Oracle 12 語法:

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY;

比如還是“Customers”表如下

TOP、LIMIT 和 FETCH FIRST示例
從 "Customers表中選擇前三個記錄(用於 SQL Server/MS Access):

SELECT TOP 3 * FROM Customers;

MySQL 的等效示例:

SELECT * FROM Customers
LIMIT 3;

Oracle 的等效示例:

SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;

TOP PERCENT 示例
從"Customers“表中選擇前 50% 的記錄(用於 SQL Server/MS Access):

SELECT TOP 50 PERCENT * FROM Customers;

Oracle 的等效示例:

SELECT * FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;

新增 WHERE 條款
從“Customers”表中選擇前三個記錄,其中國家是“Germany”(對於 SQL Server/MS Access):

SELECT TOP 3 * FROM Customers
WHERE Country='Germany';

MySQL 的等效示例

SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;

Oracle 的等效示例:

SELECT * FROM Customers
WHERE Country='Germany'
FETCH FIRST 3 ROWS ONLY;

MIN() 和 MAX()函式求最大最小值

MIN()函式返回所選列的最小值。MAX()函式返回所選列的最大值。
MIN() 語法

SELECT MIN(column_name)
FROM table_name
WHERE condition;

MAX() 語法

SELECT MAX(column_name)
FROM table_name
WHERE condition;

現在我們換一個新的表Product如下:

MIN() 示例
查詢最便宜產品的價格:

SELECT MIN(Price) AS SmallestPrice
FROM Products;

顯示如下:

MAX() 示例
查詢最貴產品的價格:

SELECT MAX(Price) AS LargestPrice
FROM Products;

返回如下:

練習:
使用該MIN函式選擇Price列的最小值的記錄。

SELECT  MIN(Price) FROM  Products;

COUNT()、AVG() 和 SUM()函式

該COUNT()函式返回與指定條件匹配的行數。
COUNT() 語法

SELECT COUNT(column_name)
FROM table_name
WHERE condition;

該AVG()函式返回數字列的平均值。
AVG() 語法

SELECT AVG(column_name)
FROM table_name
WHERE condition;

該SUM()函式返回數字列的總和。
SUM() 語法

SELECT SUM(column_name)
FROM table_name
WHERE condition;

我們還是用表product

COUNT() 示例
查詢產品數量:

SELECT COUNT(ProductID)
FROM Products;

注意: NULL 值不計算在內。
AVG() 示例
查詢所有產品的平均價格:

SELECT AVG(Price)
FROM Products;

注意: NULL 值被忽略。
假設我現在有“OrderDetails”表如下:

SUM() 示例
查詢“OrderDetails”表中“Quantity”欄位的總和:

SELECT SUM(Quantity)
FROM OrderDetails;

返回如下:

注意: NULL 值被忽略。
練習
返回Price值設定為18的記錄數

SELECT COUNT(*) FROM Products
WHERE Price = 18;

LIKE運算子

該LIKE運算子在 WHERE子句中用於搜尋列中的指定模式。有兩個萬用字元經常與 LIKE運算子結合使用:
百分號 (%) 代表零、一個或多個字元
下劃線 () 代表一個,單個字元
但是呢注意: MS Access 使用星號 (*) 代替百分號 (%),使用問號 (?) 代替下劃線 (
)
當然百分號和下劃線也可以組合使用!
LIKE 語法

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

提示:您還可以使用 AND或OR運算子組合任意數量的條件。
以下是一些示例,顯示了LIKE帶有“%”和“_”萬用字元的不同運算子:

所對應意思為:
第一行:匹配任何以a開頭的欄位
第二行:匹配任何以a結尾的欄位
第三行:匹配任何具有“or”的欄位
第四行:查詢第二個位置有“r”的任何值
第五行:查詢任何以“a”開頭且長度至少為 2 個字元的值
第六行:查詢任何以“a”開頭且長度至少為 3 個字元的值
第七行:檢視以“a”開頭並以“o”結尾的任何值
比如我們還是有如下Customers”表:

LIKE 示例
選擇 CustomerName 以“a”開頭的所有客戶:

SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';

選擇 CustomerName 以“a”結尾的所有客戶:

SELECT * FROM Customers
WHERE CustomerName LIKE '%a';

選擇 CustomerName 中任何位置都有“或”的所有客戶:

SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';

選擇 CustomerName 中第二個位置為“r”的所有客戶:

SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';

選擇 CustomerName 以“a”開頭且長度至少為 3 個字元的所有客戶:

SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';

選擇 ContactName 以“a”開頭並以“o”結尾的所有客戶:

SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';

選擇 CustomerName 不以“a”開頭的所有客戶:

SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';

萬用字元*?!等

這是英文文件所有萬用字元描述(實在不想翻譯,大家自己看看)


假設我們還是有如下“Customers”表:

使用 % 萬用字元
選擇 City 以“ber”開頭的所有客戶:

SELECT * FROM Customers
WHERE City LIKE 'ber%';

選擇 City 包含“es”的所有客戶:

SELECT * FROM Customers
WHERE City LIKE '%es%';

返回如下:

使用 _ 萬用字元
選擇 City 以任何字元開頭,後跟“ondon”的所有客戶:

SELECT * FROM Customers
WHERE City LIKE '_ondon';

選擇 City 以“L”開頭、後跟任意字元、“n”、任意字元、“on”的所有客戶:

SELECT * FROM Customers
WHERE City LIKE 'L_n_on';

使用 [charlist] 萬用字元
選擇 City 以“b”、“s”或“p”開頭的所有客戶:

SELECT * FROM Customers
WHERE City LIKE '[bsp]%';

選擇 City 以“a”、“b”或“c”開頭的所有客戶:

SELECT * FROM Customers
WHERE City LIKE '[a-c]%';

使用 [!charlist] 萬用字元
選擇 City 不是以“b”、“s”或“p”開頭的所有客戶:

SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';

或者

SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';

IN運算子

IN運算子允許您在 WHERE子句中指定多個值。
IN操作是針對多個速記 OR條件。
IN 語法

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

我們還是以“Customers”表為例子:

IN 運算子示例
選擇位於’Germany’, ‘France’, 'UK’的所有客戶:

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

選擇不在選擇位於’Germany’, ‘France’, 'UK’的所有客戶:

SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');

選擇與 Suppliers來自相同國家的所有客戶:

SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);

返回如下

BETWEEN 之間運算子

在BETWEEN操作者選擇一個給定的範圍內的值。值可以是數字、文字或日期。
BETWEEN 語法

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

我們有用到如下的product表:

between示例
選擇價格在 10 到 20 之間的所有產品:

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

要顯示上一個示例範圍之外的產品,請使用 NOT BETWEEN:

SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;

數字之間
選擇價格在 10 到 20 之間的所有產品。此外;不要顯示 CategoryID 為 1,2 或 3 的產品:

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID NOT IN (1,2,3);

文字值之間
語句選擇 Carnarvon Tigers 和 Mozzarella di Giovanni 之間具有 ProductName 的所有產品

SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

選擇產品名稱介於 Carnarvon Tigers 和 Chef Anton’s Cajun Seasoning 之間的所有產品:

SELECT * FROM Products
WHERE ProductName BETWEEN "Carnarvon Tigers" AND "Chef Anton's Cajun Seasoning"
ORDER BY ProductName;

NOT BETWEEN 文字值
選擇 ProductName 不在 Carnarvon Tigers 和 Mozzarella di Giovanni 之間的所有產品:

SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

我們現在假設有如下"Orders" 表:

日期之間示例
選擇 OrderDate 介於 ‘01-July-1996’ 和 ‘31-July-1996’ 之間的所有訂單

SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/01/1996# AND #07/31/1996#;

或者使用:

SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

AS 別名使用

別名列語法

SELECT column_name AS alias_name
FROM table_name;

別名表語法

SELECT column_name(s)
FROM table_name AS alias_name;

現在我們還是假設有custorm表如下:

還有一個oeder表

列的別名示例
建立兩個別名,一個用於 CustomerID 列,另一個用於 CustomerName 列:

SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;

建立兩個別名,一個用於 CustomerName 列,另一個用於 ContactName 列。注意:如果別名包含空格,則需要雙引號或方括號:

SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;

建立一個名為“Address”的別名,該別名組合了四列(Address、PostalCode、 City 和Country):

SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;

注意:要使上面的 SQL 語句在 MySQL 中工作,請使用以下命令:

SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;

表別名示例
選擇來自 CustomerID=4(Around the Horn)的客戶的所有訂單。我們使用“Customers”和“Orders”表,分別給它們表別名“c”和“o”(這裡我們使用別名來縮短SQL)

SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;

以下 SQL 語句與上面相同,但沒有別名:

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;

別名在以下情況下很有用:
1.一個查詢涉及多個表
2.一個查詢涉及多個表
3.查詢中使用的函式
4.列名很大或不太可讀
5.兩列或更多列組合在一起

JOIN連線

JOIN子句用於行從兩個或更多表根據它們之間的相關列結合。
假設我們現在有"Orders" 表如下

同時還有表 “Customers” 如下:

請注意,“Orders”表中的“CustomerID”列指的是“Customers”表中的“CustomerID”。上面兩個表之間的關係是“CustomerID”列。
示例
使用INNER JOIN選擇在兩個表中具有匹配值的記錄:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

返回如下

不同型別的 SQL JOIN

INNER JOIN內連線關鍵字

INNER JOIN關鍵字選擇在兩個表中具有匹配值的記錄。
語法:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

畫個圖理解:

假設我們還是有order表

customer表

INNER JOIN 示例
選擇所有包含客戶資訊的訂單:

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

返回

JOIN 三張表
選擇包含客戶和發貨人資訊的所有訂單

SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

返回如下

LEFT JOIN 左連線 關鍵字

LEFT JOIN關鍵字返回左表 (table1) 中的所有記錄,以及右表 (table2) 中的匹配記錄。如果沒有匹配項,則結果是右側的 0 條記錄。
左連線語法

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

來個圖就懂了

我們還是用customer表:

order表

LEFT JOIN 示例
選擇所有客戶,以及他們可能擁有的任何訂單:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

返回如下

RIGHT JOIN右連線 關鍵字

語法

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

上圖就懂了

現在我們用到order表如下

還有個employee表

返回所有員工,以及他們可能下過的任何訂單:

SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;

FULL OUTER JOIN 關鍵字

FULL OUTER JOIN和 FULL JOIN是一樣的。
語法為:

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;

來個圖就懂了

我們假設還是以customer表

還有個order表

選擇所有客戶和所有訂單:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

返回如下

Self Join自連線 關鍵字

語法

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

我們假設有custormer表

匹配來自同一城市的客戶:

SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;

返回如下

GROUP BY語句

該GROUP BY語句將具有相同值的行分組為彙總行,例如“查詢每個國家/地區的客戶數量”。
該GROUP BY語句通常與聚合函式 ( COUNT(), MAX(), MIN(), SUM(), AVG()) 一起使用, 以按一列或多列對結果集進行分組。
語法:

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);

假設我們還是有customer這個表

列出了每個國家/地區的客戶數量:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;

列出了每個國家的客戶數量,從高到低排序:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;

HAVING 子句

語法:

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

假設還是有custorm表如下

列出了每個國家/地區的客戶數量。僅包括擁有超過 5 個客戶的國家/地區:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;

列出了每個國家的客戶數量,從高到低排序(僅包括客戶超過 5 個的國家):

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;

EXISTS 運算子

EXISTS運算子用於測試子查詢中是否存在任何記錄。
EXISTS運算子返回true,如果子查詢返回一個或多個記錄。
語法

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

假設我們還是用到product表

suppiler表

例如:
返回 TRUE 並列出產品價格小於 20 的供應商:

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);

返回如下

返回 TRUE 並列出產品價格等於 22 的供應商:

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price = 22);

返回為:

註釋

單行註釋以–.
– 和行尾之間的任何文字都將被忽略(不會被執行)
例如:

--Select all:
SELECT * FROM Customers;

又例如

SELECT * FROM Customers -- WHERE City='Berlin';

多行註釋/*以 /.
/
和 */ 之間的任何文字都將被忽略。
例如:

/*Select all the columns
of all the records
in the Customers table:*/
SELECT * FROM Customers;

又例如

/*SELECT * FROM Customers;
SELECT * FROM Products;
SELECT * FROM Orders;
SELECT * FROM Categories;*/
SELECT * FROM Suppliers;

忽略語句的一部分:
例如

SELECT CustomerName, /*City,*/ Country FROM Customers;

又例如

SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
AND Country='USA'
ORDER BY CustomerName;

運算子

其實這一節內容,我已經在前面的運算子都演示過了。再說一下唄。
算術運算子

演示一部分
比如求20+30:

SELECT 30 + 20;

除法(返回3)

SELECT 30 / 10;

取餘數(返回2)

SELECT 17 % 5;

比較運算子

演示一部分
大於

SELECT * FROM Products
WHERE Price = 18;

不等於

SELECT * FROM Products
WHERE Price <> 18;

大於等於

SELECT * FROM Products
WHERE Price >= 30;