資料庫學習之五:SELECT高級應用

来源:https://www.cnblogs.com/cuiyongchao007/archive/2020/05/05/12832647.html
-Advertisement-
Play Games

五、SELECT高級應用 1、課程大綱 2、開發環境 3、select語法環境 4、WHERE子句 • 基本語法 • WHERE條件又叫做過濾條件,它從FROM子句的中間結果中去掉所有 條件conditions不為TRUE(而為FALSE或者NULL)的行 • WHERE子句跟在FROM子句後面 • ...


五、SELECT高級應用

1、課程大綱

• 開發環境準備
• select語句的基本語法格式
• WHERE子句
• ORDER BY子句
• LIMIT子句
• 多表連接查詢(join、using) • 集合操作(union) • group by與having字句
• 子查詢

2、開發環境

• 導入world.sql
• 創建用戶,使用sqlyog登錄資料庫

3、select語法環境

help select;
SELECT
[ALL | DISTINCT | DISTINCTROW ]
select_expr [, select_expr ...]
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[Asc | DEsc], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[Asc | DEsc], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[FOR UPDATE | LOCK IN SHARE MODE]]

4、WHERE子句

• 基本語法

SELECT *|{[DISTINCT] column|select_expr [alias], ...]}  

[FROM [database.]table] 

[WHERE conditions];  

• WHERE條件又叫做過濾條件,它從FROM子句的中間結果中去掉所有 條件conditions不為TRUE(而為FALSE或者NULL)的行

• WHERE子句跟在FROM子句後面

• 不能在WHERE子句中使用列別名

例1:where字句的基本使用

SELECT * FROM world.`city` WHERE CountryCode='CHN'; 

or 

SELECT * FROM world.`city` WHERE CountryCode='chn'; 

註意:

WHERE中出現的字元串和日期字面量必須使用引號括起來

這裡,字元串字面量寫成大寫或小寫結果都一樣,即不區分大小寫進行查詢。

這和ORACLE不同,ORACLE中WHERE條件中的字面量是區分大小寫的

例2:where字句中的邏輯操作符:

SELECT * FROM world.`city`  

WHERE CountryCode='chn' AND district = 'anhui'; 

• 邏輯操作符介紹:

– and

邏輯與。只有當所有的子條件都為true時,and才返回true。否則返回false或null

– or

邏輯或。只要有一個子條件為true,or就返回true。否則返回false或null

– not

邏輯非。如果子條件為true,則返回false;如果子條件為false,則返回true

– xor

邏輯異或。當一個子條件為true而另一個子條件為false時,其結果為true;

當兩個條件都為true或都為false時,結果為false。否則,結果為null

例3 :where字句中的範圍比較:

SELECT * FROM world.`city`  

WHERE  

population BETWEEN 100000 AND 200000 ; 

• 例4:where字句中的IN

SELECT * FROM city 

WHERE countrycode IN ('CHN','JPN');

例5:where字句中的like

– 語法:

like ‘匹配模式字元串’

– 實現模式匹配查詢或者模糊查詢:

測試一個列值是否匹配給出的模式

– 在‘匹配模式字元串’中,可以有兩個具有特殊含義的通配字元:

%:表示0個或者任意多個字元

_:只表示一個任意字元

SELECT * FROM city 

WHERE countrycode LIKE 'ch%'; 

5、ORDER BY子句

• ORDER BY子句用來排序行

• 如果SELECT語句中沒有ORDER BY子句,那麼結果集中行的順序是

不可預料的

• 語法:

SELECT expr 

FROM table 

[WHERE condition(s)] 

[ORDER BY {column, expr, numeric_position} [Asc|DEsc]]; 

• 其中:

– Asc:執行升序排序。預設值

– DEsc:執行降序排序

– ORDER BY子句一般在SELECT語句的最後面

例1: 基本使用

SELECT * FROM city 

ORDER BY population; 

• 例2:多個排序條件

SELECT * FROM city 

ORDER BY population,countrycode; 

• 例3:以select字句列編號排序

SELECT * FROM city 

ORDER BY 5; 按照第5列進行排序。

• 例4:desc asc

SELECT * FROM city 

ORDER BY 5 desc; 

• 例5:NULL值的排序

在MySQL中,把NULL值當做一列值中的最小值對待。因此,升序排序時,它出現在最前面

6、LIMIT子句

MySQL特有的子句。

• 它是SELECT語句中的最後一個子句(在order by後面)。

• 它用來表示從結果集中選取最前面或最後面的幾行。

• 偏移量offset的最小值為0。

• 語法:

limit <獲取的行數> [OFFSET <跳過的行數>]

或者 limit [<跳過的行數>,] <獲取的行數>

SELECT * FROM city 

ORDER BY 5 DEsc 

LIMIT 4; 

註:先按照人口數量進行降序排序,然後使用limit從中挑出最前面的4行。

如果沒有order by子句,返回的4行就是不可預料的。

7、多表連接查詢

傳統的連接寫法(使用where)

SELECT NAME,ci.countrycode ,cl.language ,ci.population 

FROM city ci , countrylanguage cl 

WHERE ci.`CountryCode`=cl.countrycode; 

註意:一旦給表定義了別名,那麼原始的表名就不能在出現在該語句 的其它子句中了

• NATURAL JOIN子句

• 自動到兩張表中查找所有同名同類型的列拿來做連接列,進行相等 連接

SELECT NAME,countrycode ,LANGUAGE ,population 

FROM city NATURAL JOIN countrylanguage 

WHERE population > 1000000 

ORDER BY population; 

註意:在select子句只能出現一個連接列

使用using子句

SELECT NAME,countrycode ,LANGUAGE ,population 

FROM city JOIN countrylanguage 

USING(countrycode);

8、集合操作

UNION [DISTINCT]
• UNION ALL
• 語法:
SELECT ... 
UNION [ALL | DISTINCT] 
SELECT ... 
[UNION [ALL | DISTINCT] 
SELECT ...]

• UNION用於把兩個或者多個select查詢的結果集合併成一個
• 進行合併的兩個查詢,其SELECT列表必須在數量和對應列的數據類型上保持一致
• 預設會去掉兩個查詢結果集中的重覆行
• 預設結果集不排序
• 最終結果集的列名來自於第一個查詢的SELECT列表

9、分組操作及分組處理

“Group By”從字面意義上理解就是根據“By”指定的規則對數據進行分組, 所謂的分組就是將一個“數據集”劃分成若幹個“小區域”,然後針對若幹個 “小區域”進行數據處理。

• Having與Where的區別

  • where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分

組之前過濾數據,where條件中不能包含聚組函數,使用where條件過濾出特定的行。

  • having 子句的作用是篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚

組函數,使用having 條件過濾出特定的組,也可以使用多個分組標準進行分組。

11、子查詢

子查詢定義

  • 在一個表表達中可以調用另一個表表達式,這個被調用的表表達式叫做子查詢( subquery),我麽也稱作子選擇(subselect)或內嵌選擇(inner select)。子查詢 的結果傳遞給調用它的表表達式繼續處理。
  • 子查詢(inner query)先執行,然後執行主查詢(outer query)
  • 子查詢按對返回結果集的調用方法,可分為:where型子查詢,from型子查詢及exists 型子查詢。

• 使用子查詢原則

  • 一個子查詢必須放在圓括弧中。
  • 將子查詢放在比較條件的右邊以增加可讀性。

子查詢不包含 ORDER BY 子句。對一個 SELECT 語句只能用一個 ORDER BY 子句,並且 如果指定了它就必須放在主 SELECT 語句的最後。

  • 在子查詢中可以使用兩種比較條件:單行運算符(>, =, >=, <, <>, <=) 和多行運算符 (IN, ANY, ALL)。

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

-Advertisement-
Play Games
更多相關文章
  • Linux常用命令 一、控制台相關命令 控制台命令就是指通過字元界面輸入的可以操作系統的命令。我們現在要瞭解的是基於Linux操作系統的基本控制台命令。不同於圖形模式的一種類似文本編輯器的運行命令的環境。在遠程登陸控制或是操作沒有圖形環境的Linux系統時,控制台命令就有很大的用途了,建議大家一定要 ...
  • 本文主要講解如何安裝VM插件實現高級功能(下篇) 上篇主要講WndowsOS下利用VM虛擬機部署MACOS ...
  • 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 ...
  • “一段數據流從應用程式發送端,一直到應用程式接收端,總共經過了多少次拷貝?” 先看發送端,當應用程式將數據送到發送緩衝區時,調用的是 send 或 write 方法,如果緩存中沒有空間,系統調用就會失敗或者阻塞。我們說,這個動作事實上是一次”顯式拷貝“。而在這之後,數據將會按照 TCP/IP 的分層... ...
  • 初步進入Linux世界 一、Linux目錄介紹 1.樹型目錄結構 Linux文件系統採用了多級目錄的樹型層次結構管理文件。樹型結構的最上層是根目錄,用/表示。在根目錄之下是各層目錄和文件。 2.工作目錄與用戶主目錄 當登錄Linux時,首先進入到一個特殊的目錄,稱為主/登錄目錄。可以通過~來指定(或 ...
  • 學習視頻:https://www.bilibili.com/video/BV1tJ411r7EC?p=74 設計資料庫步驟: 良好的資料庫設計:節省空間,數據完整,方便開發。 步驟:1、收集信息 2、標識實體 3、標識實體屬性 4、標識實體之間的關係 5、畫E-R圖,編寫Sql 概念瞭解: 映射基數 ...
  • 2020/5/5 一、 DQL條件查詢 語法:(執行順序已標出) SELECT 查詢列表 3 FORM 表名 1 WHERE 篩選條件; 2 分類: 1. 按條件表達式篩選 條件運算符:> < = != <> >= <= #查找員工月薪>12000的員工信息 SELECT * FROM employ ...
  • 六、mysql數據類型 1、課程大綱 2、數據類型介紹 • 四種主要類別: 數值類型 字元類型 時間類型 二進位類型 • 數據類型的 ABC 要素: Appropriate(適當) Brief(簡潔) Complete(完整) • 例 1:列聲明 • 例 2:不允許負值和未知值 3、數值數據類型 • ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...