SQL-基礎學習2--ORDER BY ,DESC,WHERE, BETWEEN,AND ,OR ,IN ,NOT

来源:http://www.cnblogs.com/Aiapple/archive/2016/03/15/5279870.html
-Advertisement-
Play Games

所使用的資料庫資料在:資料庫資料   第三課:排序檢索數據 3.1 排序數據 按單列排序 如果不排序,數據一般將以它在底層表中出現的順序顯示,這有可能是數據最初添加到表中的順序。但是,如果數據隨後進行過更新或刪除,那麼順尋將不再是當初的順序; ORDER BY 取一個或多個列的名字,併進行順序輸出


所使用的資料庫資料在:資料庫資料
  第三課:排序檢索數據 3.1 排序數據 按單列排序 如果不排序,數據一般將以它在底層表中出現的順序顯示,這有可能是數據最初添加到表中的順序。但是,如果數據隨後進行過更新或刪除,那麼順尋將不再是當初的順序; ORDER BY 取一個或多個列的名字,併進行順序輸出
輸入:
SELECT prod_name
FROM Products
ORDER BY prod_name;
輸出:
12 inch teddy bear
18 inch teddy bear
8 inch teddy bear
Bird bean bag toy
Fish bean bag toy
King doll
Queen doll
Rabbit bean bag toy
Raggedy Ann
以字母順序排序;且需註意保證ORDER BY字句,在SELECT語句中在最後一句,否則會出錯;   3.2  按多個列排序 要按多個列排序,簡單指定列名,列名之間用逗號分開即可
輸入:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
輸出:
prod_id     prod_price     prod_name
-------     ----------     --------------------
BNBG02      3.4900         Bird bean bag toy
BNBG01      3.4900         Fish bean bag toy
BNBG03      3.4900         Rabbit bean bag toy
RGAN01      4.9900         Raggedy Ann
BR01        5.9900         8 inch teddy bear
BR02        8.9900         12 inch teddy bear
RYL01       9.4900         King doll
RYL02       9.4900         Queen doll
BR03        11.9900        18 inch teddy bear
重要的是理解在按多個列排序時,排序的順序完全按規定進行。換句話說,對於上述例子中的輸出,僅在多個行具有相同的prod_price值時才對產品按prod_name進行排序。如果prod_price列中所有的值都是唯一的,則不會按prod_name排序。   3.3     按列位置排序 上面兩種情況都是按照列名進行排序,ORDER BY 還支持按相對列位置進行排序; 例子:
輸入:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2, 3;
輸出:
prod_id     prod_price     prod_name
-------     ----------     --------------------
BNBG02      3.4900         Bird bean bag toy
BNBG01      3.4900         Fish bean bag toy
BNBG03      3.4900         Rabbit bean bag toy
RGAN01      4.9900         Raggedy Ann
BR01        5.9900         8 inch teddy bear
BR02        8.9900         12 inch teddy bear
RYL01       9.4900         King doll
RYL02       9.4900         Queen doll
BR03        11.9900        18 inch teddy bear
分析: ORDER BY 2表示按SELECT清單中的第二個列prod_name進行排序。ORDER BY 2,3表示先按prod_price,再按prod_name進行排序。   3.4   指定排序方向 數據排序不限於升序排序(從A到Z),這隻是預設的排序順序。還可以使用ORDER BY子句進行降序(從Z到A)排序。為了進行降序排序,必須指定DESC關鍵字。 下麵的例子以價格降序來排序產品(最貴的排在最前面):
輸入
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC;
輸出:
prod_id     prod_price     prod_name
-------     ----------     --------------------
BR03        11.9900        18 inch teddy bear
RYL01       9.4900         King doll
RYL02       9.4900         Queen doll
BR02        8.9900         12 inch teddy bear
BR01        5.9900         8 inch teddy bear
RGAN01      4.9900         Raggedy Ann
BNBG01      3.4900         Fish bean bag toy
BNBG02      3.4900         Bird bean bag toy
BNBG03      3.4900         Rabbit bean bag to
  如果打算用多個列排序,該怎麼辦?下麵的例子以降序排序產品(最貴的在最前面),再加上產品名:
輸入:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;
輸出:
prod_id     prod_price     prod_name
-------     ----------     --------------------
BR03        11.9900        18 inch teddy bear
RYL01       9.4900         King doll
RYL02       9.4900         Queen doll
BR02        8.9900         12 inch teddy bear
BR01        5.9900         8 inch teddy bear
RGAN01      4.9900         Raggedy Ann
BNBG02      3.4900         Bird bean bag toy
BNBG01      3.4900         Fish bean bag toy
BNBG03      3.4900         Rabbit bean bag to
分析▼ DESC關鍵字只應用到直接位於其前面的列名。在上例中,只對prod_price列指定DESC,對prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每個價格內)仍然按標準的升序排序。 註意:在多個列上降序排序,如果想在多個列上進行降序排序,必須對每一列指定DESC關鍵字。   第四課:過濾數據 4.1 where 字句 只檢索所需數據需要指定搜索條件(search criteria),搜索條件也稱為過濾條件 在SELECT語句中,數據根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出,如下所示:
輸入:
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;
輸出:
prod_name               prod_price
-------------------     ----------
Fish bean bag toy       3.49
Bird bean bag toy       3.49
Rabbit bean bag toy     3.49
分析: 這條語句從products表中檢索兩個列,但不返回所有行,只返回prod_price值為3.49的行; 註意:WHERE子句的位置 在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之後,否則將會產生錯誤 4.1 where 字句操作符 表4-1 WHERE子句操作符 單引號的使用 例子列出所有不是供應商DLL01製造的產品:
輸入:
SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01'
輸出:
vend_id        prod_name
----------     ------------------
BRS01          8 inch teddy bear
BRS01          12 inch teddy bear
BRS01          18 inch teddy bear
FNG01          King doll
FNG01          Queen doll
註意: 何時使用引號;單引號用來限定字元串。如果將值與字元串類型的列進行比較,就需要限定引號。用來與數值列進行比較的值不用引號。 4.2 範圍檢查 可以使用BETWEEN操作符,BETWEEN操作符可用來檢索價格在5美元和10美元之間的所有產品,或在指定的開始日期和結束日期之間的所有日期。 下麵的例子說明如何使用BETWEEN操作符,它檢索價格在5美元和10美元之間的所有產品:
輸入:
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
輸出:
prod_name               prod_price
-------------------     ----------
8 inch teddy bear       5.99
12 inch teddy bear      8.99
King doll               9.49
Queen doll              9.49
分析: 從這個例子可以看到,在使用BETWEEN時,必須指定兩個值——所需範圍的低端值和高端值。這兩個值必須用AND關鍵字分隔。BETWEEN匹配範圍中所有的值,包括指定的開始值和結束值。     第5課:高級過濾數據(AND,OR) 這一課講授如何組合WHERE子句以建立功能更強、更高級的搜索條件。我們還將學習如何使用NOT和IN操作符。 使用邏輯操作符來聯結或改變where字句中的句子,使得條件更加高級; 5.1.1     AND操作符
輸入:
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
輸出:
prod_id     prod_price     prod_name
-------     ----------     --------------------
BNBG02      3.4900         Bird bean bag toy
BNBG01      3.4900         Fish bean bag toy
BNBG03      3.4900         Rabbit bean bag toy
分析: 此SQL語句檢索由供應商DLL01製造且價格小於等於4美元的所有產品的名稱和價格。這條SELECT語句中的WHERE子句包含兩個條件,用AND關鍵字聯結在一起。 這個例子只包含一個AND子句,因此最多有兩個過濾條件。可以增加多個過濾條件,每個條件間都要使用AND關鍵字。   5.1.2    OR操作符 OR操作符與AND操作符正好相反,它指示DBMS檢索匹配任一條件的行。事實上,許多DBMS在OR WHERE子句的第一個條件得到滿足的情況下,就不再計算第二個條件了(在第一個條件滿足時,不管第二個條件是否滿足,相應的行都將被檢索出來)。
輸入:
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’;
輸出:
prod_name               prod_price
-------------------     ----------
Fish bean bag toy       3.4900
Bird bean bag toy       3.4900
Rabbit bean bag toy     3.4900
8 inch teddy bear       5.9900
12 inch teddy bear      8.9900
18 inch teddy bear      11.990
5.1.3   求值順序 AND  OR 優先順序問題 假如需要列出價格為10美元及以上,且由DLL01或BRS01製造的所有產品。下麵的SELECT語句使用組合的AND和OR操作符建立了一個WHERE子句:
輸入:
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’
AND prod_price >= 10;
輸出:
prod_name               prod_price
-------------------     ----------
Fish bean bag toy       3.4900
Bird bean bag toy       3.4900
Rabbit bean bag toy     3.4900
18 inch teddy bear      11.9900
Raggedy Ann             4.9900
分析: 請看上面的結果。返回的行中有4行價格小於10美元,顯然,返回的行未按預期的進行過濾。為什麼會這樣呢?原因在於求值的順序。SQL(像多數語言一樣)在處理OR操作符前,優先處理AND操作符。當SQL看到上述WHERE子句時,它理解為:由供應商BRS01製造的價格為10美元以上的所有產品,以及由供應商DLL01製造的所有產品,而不管其價格如何。換句話說,由於AND在求值過程中優先順序更高,操作符被錯誤地組合了。 解決方法只需在改成 WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')   AND   prod_price >=10 加上了一個優先順序更高的 小括弧就可以了;   5.2     IN操作符 IN操作符用來指定條件範圍,範圍中的每個條件都可以進行匹配。IN取一組由逗號分隔、括在圓括弧中的合法值。下麵的例子說明瞭這個操作符:
輸入:
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' )
ORDER BY prod_name;
輸出:
prod_name               prod_price
-------------------     ----------
12 inch teddy bear      8.9900
18 inch teddy bear      11.9900
8 inch teddy bear       5.9900
Bird bean bag toy       3.4900
Fish bean bag toy       3.4900
Rabbit bean bag toy     3.4900
Raggedy Ann             4.9900
分析: 此SELECT語句檢索由供應商DLL01和BRS01製造的所有產品。IN操作符後跟由逗號分隔的合法值,這些值必須括在圓括弧中。實際上IN操作符完成了與OR相同的功能。 為什麼要使用IN操作符?其優點為:
  • 在有很多合法選項時,IN操作符的語法更清楚,更直觀。
  • 在與其他AND和OR操作符組合使用IN時,求值順序更容易管理。
  • IN操作符一般比一組OR操作符執行得更快
  • IN的最大優點是可以包含其他SELECT語句,能夠更動態地建立WHERE子句
  5.2     NOT操作符 WHERE子句中的NOT操作符有且只有一個功能,那就是否定其後所跟的任何條件。因為NOT從不單獨使用(它總是與其他操作符一起使用),所以它的語法與其他操作符有所不同。NOT關鍵字可以用在要過濾的列前,而不僅是在其後。 為了列出除DLL01之外的所有供應商製造的產品,可編寫如下的代碼:
輸入:
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;
輸出:
prod_name
------------------
12 inch teddy bear
18 inch teddy bear
8 inch teddy bear
King doll
Queen dol
分析: NOT 似乎也可以用<>替代,的確在上面的例子中是可以。但在更複雜的子句中,NOT是非常有用的。例如,在與IN操作符聯合使用時,NOT可以非常簡單地找出與條件列表不匹配的行。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.iTween 介紹 、二.iTween 原理、三.iTween 下載、四.iTween 類介紹、五.主要功能介紹   原文地址:http://blog.csdn.net/dingkun520wy/article/details/50550529   一.iTween 介紹 三.iTween 下載
  • 一、基礎介紹;二、基礎屬性 原文地址: http://blog.csdn.net/dingkun520wy/article/details/50896420   一、基礎介紹   CameraTexture:根據提供顏色創建一個full-screen Texture2D,可為CameraFade所用
  • SQL Server 2016真的讓人眼前一亮。幾天前微軟就提供了RCO(候選發佈版)版本的下載。我已經圍觀了一圈RCO版本,其中一個最拽的功能是資料庫範圍內的配置(Database Scoped Configuration),在今天的文章里我想談談它。補充幾句:裝好之後,居然發現沒有SSMS,崩潰
  • oracle基本表查詢
  • Create Type 的話呢,是創建一個自定義的數據類型,等於說為常用的數據類型建造一個別名的樣紙。然後就可以通用當前資料庫的當前架構。(當然了,一般來說我們都是使用dbo架構,所以都會無事前面那個說明)╮(╯_╰)╭。 下麵我來演示一下相關內容 最簡單的先創建一個類型TS,然後把它查出來。雖然看
  •        大數據時代的到來意味著數據量的爆炸,也意味著收集數據的難度將大幅增加。為了將海量的數據收集起來,埋點技術應運而生。然而隨著大數據的發展和深入,用戶的要求越來越高,埋點技術開始變得力不從心。        近期,一些公司開始以“無埋點技術”為賣點,開始到處宣傳無埋點比埋點好,那麼到底事實
  •  
  •   -- Create Customers table-- CREATE TABLE Customers( cust_id char(10) NOT NULL , cust_name char(50) NOT NULL , cust_address char(50) NULL , cust_c
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...