SQL 中的運算符與別名:使用示例和語法詳解

来源:https://www.cnblogs.com/xiaowange/archive/2023/11/25/17856173.html
-Advertisement-
Play Games

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;

演示資料庫

以下是示例中使用的CustomersOrders表的部分選擇:

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,或者掃描下方二維碼,關註公眾號,即可獲取最新文章。

看完如果覺得有幫助,歡迎點贊、收藏關註

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在深度學習中,PyTorch和NumPy是兩個常用的工具,用於處理和轉換數據。PyTorch是一個基於Python的科學計算庫,用於構建神經網路和深度學習模型。NumPy是一個用於科學計算的Python庫,提供了一個強大的多維數組對象和用於處理這些數組的函數。 在深度學習中,通常需要將數據從NumP ...
  • 作為一名有著Java背景的開發者,你無疑已經習慣了Java那嚴格的類型系統和細緻的訪問控制機制。轉向Python,你會發現一個截然不同的編程世界。Python的面向對象編程(OOP)方式為代碼組織提供了更高的自由度和靈活性,這種變化可能會給你帶來新鮮感,同時也是一個挑戰。需要註意的是,Python的... ...
  • C++ 動態實例化(new 和 malloc) malloc / free 工作原理 malloc 是 stdlib.h 庫中的函數,聲明為 void *__cdecl malloc(size_t _Size); 原理: malloc 函數沿空閑鏈表(位於記憶體 堆空間 中)申請一塊滿足需求的記憶體塊, ...
  • 一:背景 1. 講故事 最近接連遇到了幾起 2G 虛擬地址緊張 導致的程式崩潰,基本上 90% 都集中在醫療行業,真的很無語,他們用的都是一些上古的 XP,Windows7 x86,我也知道技術人很難也基本無法推動硬體系統和設備的升級,這裡蘊含了巨大的人情世故。 寫這一篇的目的是想系統化的整理一下如 ...
  • 介紹 C#跨平臺UI框架 提供NETStandard2.0和net4的庫,通過Netcore可以跨平臺,支持Windows、Mac、Linux,Net4的可以支持XP。 各個平臺運行效果一致,不依賴系統控制項。 支持窗體,控制項任意透明,支持異形窗體,支持SVG圖標顯示。 支持動畫,數據綁定,Mvvm模 ...
  • ConfigureAwait in .NET8 ConfigureAwait(true) 和 ConfigureAwait(false) 首先,讓我們回顧一下原版 ConfigureAwait 的語義和歷史,它採用了一個名為 continueOnCapturedContext 的布爾參數。 當對任務 ...
  • 一、緩存 緩存指在中間層中存儲數據的行為,該行為可使後續數據檢索更快。 從概念上講,緩存是一種性能優化策略和設計考慮因素。 緩存可以顯著提高應用性能,方法是提高不常更改(或檢索成本高)的數據的就緒性。 二、RFC9111 在最新的緩存控制規範文件RFC9111中,詳細描述了瀏覽器緩存和伺服器緩存控制 ...
  • 前言 自從使用docker以來,就經常聽說MySQL資料庫最好別運行在容器中,性能會損失很多。一些之前沒使用過容器的同事,對資料庫運行在容器中也是忌諱莫深,甚至只要資料庫跑在容器中出現性能問題時,首先就把問題推到容器上。 那麼到底會損失多少,性能損失會很多嗎? 為此我裝了兩個MySQL,版本都是8. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...