SQL中的IN運算符 IN運算符允許您在WHERE子句中指定多個值,它是多個OR條件的簡寫。 示例:獲取您自己的SQL Server 返回所有來自'Germany'、'France'或'UK'的客戶: SELECT * FROM Customers WHERE Country IN ('German ...
SQL中的IN運算符
IN
運算符允許您在WHERE
子句中指定多個值,它是多個OR
條件的簡寫。
示例:獲取您自己的SQL Server
返回所有來自'Germany'、'France'或'UK'的客戶:
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
語法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
演示資料庫:
以下是示例中使用的Customers
表的部分選擇:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
NOT IN
通過在IN
運算符前使用NOT
關鍵字,您可以返回列表中任何值都不是的所有記錄。
示例:返回所有不來自'Germany'、'France'或'UK'的客戶:
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
IN(SELECT)
您還可以在WHERE
子句中使用帶有子查詢的IN
。使用子查詢,您可以返回主查詢結果中存在於子查詢結果中的所有記錄。
示例:返回所有在Orders表中有訂單的客戶:
SELECT * FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders);
NOT IN(SELECT)
上面的示例返回了74條記錄,這意味著有17個客戶沒有下過任何訂單。讓我們使用NOT IN
運算符來驗證是否正確。
示例:返回在Orders表中沒有下過訂單的所有客戶:
SELECT * FROM Customers
WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);
通過練習測試自己:
練習: 使用IN
運算符選擇所有Country
為"Norway"或"France"的記錄。
SELECT * FROM YourTableName
WHERE Country IN ('Norway', 'France');
SQL BETWEEN運算符
BETWEEN
運算符用於選擇給定範圍內的值,可以是數字、文本或日期。這是一個包容性的運算符,包括開始和結束值。
示例:獲取您自己的SQL Server
選擇所有價格在10和20之間的產品:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
語法:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
演示資料庫:
以下是示例中使用的Products
表的部分選擇:
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
NOT BETWEEN
要顯示在前面示例範圍之外的產品,請使用NOT BETWEEN
:
示例:
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
BETWEEN與IN結合使用
以下SQL語句選擇所有價格在10和20之間的產品。此外,CategoryID
必須是1、2或3:
示例:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID IN (1,2,3);
BETWEEN文本值
以下SQL語句選擇所有ProductName
在'Carnarvon Tigers'和'Mozzarella di Giovanni'之間的產品:
示例:
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
以下SQL語句選擇所有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文本值
以下SQL語句選擇所有ProductName
不在'Carnarvon Tigers'和'Mozzarella di Giovanni'之間的產品:
示例:
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
BETWEEN日期
以下SQL語句選擇所有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';
示例表
以下是示例中使用的Orders
表的部分選擇:
OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
---|---|---|---|---|
10248 | 90 | 5 | 7/4/1996 | 3 |
10249 | 81 | 6 | 7/5/1996 | 1 |
10250 | 34 | 4 | 7/8/1996 | 2 |
10251 | 84 | 3 | 7/9/1996 | 1 |
10252 | 76 | 4 | 7/10/1996 | 2 |
SQL別名
SQL別名用於為表或表中的列提供臨時名稱,通常用於使列名更易讀。別名僅在查詢的持續時間記憶體在,使用AS
關鍵字創建別名。
示例:獲取您自己的SQL Server
SELECT CustomerID AS ID
FROM Customers;
AS是可選的
實際上,在大多數資料庫語言中,您可以省略AS
關鍵字並獲得相同的結果:
SELECT CustomerID ID
FROM Customers;
語法
在列上使用別名時:
SELECT column_name AS alias_name
FROM table_name;
在表上使用別名時:
SELECT column_name(s)
FROM table_name AS alias_name;
演示資料庫
以下是示例中使用的Customers
和Orders
表的部分選擇:
Customers表
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
Orders表
OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
---|---|---|---|---|
10248 | 90 | 5 | 7/4/1996 | 3 |
10249 | 81 | 6 | 7/5/1996 | 1 |
10250 | 34 | 4 | 7/8/1996 | 2 |
列的別名
以下SQL語句為CustomerID
列創建兩個別名,一個是ID
,另一個是CustomerName
:
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
在使用空格字元的別名中使用別名
如果要使別名包含一個或多個空格,比如"My Great Products",請用方括弧或雙引號括起別名。
使用方括弧括起帶有空格字元的別名的示例:
SELECT ProductName AS [My Great Products]
FROM Products;
使用雙引號括起帶有空格字元的別名的示例:
SELECT ProductName AS "My Great Products"
FROM Products;
註意:某些資料庫系統允許使用方括弧和雙引號,而有些只允許其中之一。
連接列
以下SQL語句創建一個名為"Address"的別名,該別名組合了四列(Address、PostalCode、City和Country):
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;
註意:要使MySQL中的上述SQL語句工作,請使用以下內容:
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;
註意:要使Oracle中的上述SQL語句工作,請使用以下內容:
SELECT CustomerName, (Address || ', ' || PostalCode || ' ' || City || ', ' || Country) AS Address
FROM Customers;
表的別名
當您想要為表使用別名時,適用相同的規則。
將Customers
表稱為Persons
:
SELECT * FROM Customers AS Persons;
在表的查詢中使用兩個表別名時,可能會顯得沒用,但是當您在查詢中使用多個表時,可以使SQL語句更短。
以下SQL語句選擇所有CustomerID
為4(Around the Horn)的客戶的訂單。我們使用"Customers"和"Orders"表,並分別給它們命名為"c"和"o":
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;
當:
- 查詢涉及多個表
- 查詢中使用函數
- 列名較大或不太易讀
- 兩個或更多列合併在一起時
別名可能很有用。
最後
為了方便其他設備和平臺的小伙伴觀看往期文章:公眾號搜索Let us Coding
,或者掃描下方二維碼,關註公眾號,即可獲取最新文章。
看完如果覺得有幫助,歡迎點贊、收藏和關註