【MySQL】DQL

DQL(數據查詢語言)用于在MySQL數據庫中執行數據查詢操作。它主要包括SELECT語句,用于從表中檢索數據。

0. 基本語法

SELECT 字段列表 
FROM 表名列表
WHERE 條件列表 
GROUP BY 分組字段列表
HAVING 分組后條件列表
ORDER BY 排序字段列表 
LIMIT 分頁參數

image.png

1). 查詢多個字段

SELECT 字段1,字段2... FROM 表名:

2). 字段設置別名

SELECT 字段1 [ AS 別名1 ] , 字段2 [ AS 別名2 ] ... FROM 表名;
SELECT 字段1 [ 別名1 ] , 字段2 [ 別名2 ] ... FROM 表名;

3). 去除重復記錄

SELECT DISTINCT 字段列表 FROM 表名;

1. 條件查詢

DQL的主要語句是SELECT語句,它允許我們在數據庫表中進行復雜的查詢操作。SELECT語句的基本語法如下:

SELECT column1, column2, ...
FROM table_name
WHERE conditions
  • SELECT關鍵字用于指定要返回的列。
  • FROM關鍵字用于指定要查詢的表。
  • WHERE關鍵字用于指定查詢條件,可選。

示例:從名為users的表中選擇所有年齡大于等于18歲的用戶的名字和年齡:

SELECT name, age
FROM users
WHERE age >= 18;

image.png

image.png

2. 聚合查詢

在MySQL數據庫中,DQL(數據查詢語言)提供了聚合函數,可以在查詢中對數據進行聚合操作。聚合查詢用于執行諸如計算總和、平均值、最大值、最小值等統計數據的操作。以下是DQL中常用的聚合函數以及示例:

  1. COUNT:用于計算匹配條件的行數。
    示例:統計名為users的表中的記錄數。

    SELECT COUNT(*) FROM users;
    
  2. SUM:用于計算數值列的總和。
    示例:計算名為products的表中價格列的總和。

    SELECT SUM(price) FROM products;
    
  3. AVG:用于計算數值列的平均值。
    示例:計算名為sales的表中銷售額的平均值。

    SELECT AVG(sales) FROM sales;
    
  4. MAX:用于找出數值列的最大值。
    示例:找出名為scores的表中分數列的最高分。

    SELECT MAX(score) FROM scores;
    
  5. MIN:用于找出數值列的最小值。
    示例:找出名為temperatures的表中溫度列的最低溫度。

    SELECT MIN(temperature) FROM temperatures;
    

需要注意的是,聚合函數通常與GROUP BY子句一起使用,以便對分組后的數據進行聚合計算。GROUP BY子句根據指定的列對結果進行分組。

示例:計算名為products的表中每個分類的總銷售額。

SELECT category, SUM(sales) FROM products GROUP BY category;

上述是一些常見的聚合函數,MySQL還提供了其他函數和擴展功能,例如DISTINCT(用于查找唯一的值),HAVING(用于過濾分組后的數據)等等。根據實際需求,可以在查詢中使用適當的聚合函數來滿足特定的統計需求。

3. 分組查詢

在MySQL數據庫中,DQL(數據查詢語言)提供了分組查詢的功能,用于根據指定的列對查詢結果進行分組。分組查詢常與聚合函數一起使用,以便對每個分組進行聚合計算。以下是DQL中分組查詢的詳細講解和示例:

分組查詢使用 GROUP BY 子句來指定要根據哪些列進行分組。在分組查詢中,可以選擇一個或多個列作為分組依據。請注意,除了被分組的列,查詢的 SELECT 語句中通常還包括聚合函數的使用。

分組查詢的基本語法如下:

SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
WHERE conditions
GROUP BY column1, column2, ...

其中 column1, column2, ... 是用于分組的列名, aggregate_function(column) 是應用于每個分組的聚合函數,例如 COUNT(column)、SUM(column)、AVG(column) 等。

示例1:從名為 orders 的表中按客戶分組計算每個客戶的訂單總數。

SELECT customer, COUNT(*) as total_orders
FROM orders
GROUP BY customer;

示例2:從名為 products 的表中按分類分組計算每個分類的產品數量。

SELECT category, COUNT(*) as total_products
FROM products
GROUP BY category;

示例3:從名為 sales 的表中按年份和月份分組計算每個月的總銷售額。

SELECT YEAR(sales_date) as year, MONTH(sales_date) as month, SUM(amount) as total_sales
FROM sales
GROUP BY YEAR(sales_date), MONTH(sales_date);

需要注意的是,分組查詢中除了 GROUP BY 子句外,還可以使用 HAVING 子句來對分組后的數據進行篩選。 HAVING 子句與 WHERE 子句的功能類似,但是 HAVING 用于過濾分組后的數據,可以使用聚合函數和分組列進行條件篩選。

執行順序: where > 聚合函數 > having 。

示例4:從名為 products 的表中按分類分組計算每個分類的平均價格,并僅顯示平均價格大于等于 100 的分類。

SELECT category, AVG(price) as avg_price
FROM products
GROUP BY category
HAVING avg_price >= 100;

4. 排序查詢

在MySQL數據庫中,DQL(數據查詢語言)提供了排序查詢的功能,可以對查詢結果按照指定的列進行排序。排序查詢可以按照升序(默認)或降序的方式排列結果。以下是DQL中排序查詢的詳細講解和示例:

排序查詢使用 ORDER BY 子句來指定要按照哪個列進行排序。可以選擇一個或多個列進行排序,對于多個列,按照列的順序進行排序。默認情況下,排序是按照升序進行的(從小到大)。如果需要按照降序進行排序(從大到小),可以通過在排序列名后面加上 DESC 關鍵字來實現。

排序查詢的基本語法如下:

SELECT column1, column2, ...
FROM table_name
WHERE conditions
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...

其中 column1, column2, ... 是要排序的列名,可以選擇一個或多個列進行排序。 ASC 是升序排序(默認), DESC 是降序排序。

示例1:從名為 employees 的表中按照薪水進行升序排序。

SELECT name, salary
FROM employees
ORDER BY salary ASC;

示例2:從名為 products 的表中按照價格進行降序排序,如果價格相同,則按照產品名稱進行升序排序。

SELECT product_name, price
FROM products
ORDER BY price DESC, product_name ASC;

需要注意的是,可以使用 ORDER BY 子句對多個列進行排序。在多列排序中,按照列在 ORDER BY 子句中的順序進行排序。如果第一個列的值相同,則按照第二個列進行排序,依此類推。

示例3:從名為 sales 的表中按照銷售日期和銷售金額進行排序。

SELECT sale_date, amount
FROM sales
ORDER BY sale_date DESC, amount DESC;

在排序查詢中,還可以使用表達式進行排序,也可以使用函數對排序列進行處理。此外,還可以使用位置索引來指定排序的列。

示例4:從名為 customers 的表中按照合并姓和名進行排序。

SELECT CONCAT(last_name, ' ', first_name) as full_name, age
FROM customers
ORDER BY 1; -- 使用位置索引 1 表示第一個列

5. 分頁查詢

在MySQL數據庫中,DQL(數據查詢語言)提供了分頁查詢的功能,可以限制查詢結果的數量,以便顯示在頁面上,并允許用戶瀏覽多個結果頁。分頁查詢通常與排序查詢一起使用,以確保分頁結果的一致性。以下是DQL中分頁查詢的詳細講解和示例:

分頁查詢使用 LIMIT 子句來限制查詢結果的數量,并使用 OFFSET 子句來指定要跳過的行數。假設每頁顯示的記錄數量為 n,要顯示第 k 頁的結果,偏移量應為 (k-1) * n。

分頁查詢的基本語法如下:

SELECT column1, column2, ...
FROM table_name
WHERE conditions
ORDER BY column1, column2, ...
LIMIT n
OFFSET offset;

其中 column1, column2, ... 是要查詢的列名,可以選擇一個或多個列進行查詢。 n 是每頁顯示的記錄數量, offset 是要跳過的行數。

示例1:從名為 employees 的表中查詢前10條記錄。

SELECT name, salary
FROM employees
LIMIT 10;

示例2:從名為 products 的表中查詢第3頁的記錄,每頁顯示5條記錄。

SELECT product_name, price
FROM products
ORDER BY product_name
LIMIT 5
OFFSET 10;

需要注意的是,LIMIT 子句接受兩個參數,可以只提供一個參數。如果只提供一個參數,則表示要返回的記錄數量。

示例3:從名為 sales 的表中查詢最近的5條記錄。

SELECT sale_date, amount
FROM sales
ORDER BY sale_date DESC
LIMIT 5;

可以使用變量或表達式來指定 LIMITOFFSET 的值,以便根據不同的情況進行分頁查詢。

示例4:從名為 customers 的表中查詢根據用戶輸入動態指定的頁碼和記錄數量。

SET @page = 2; -- 用戶輸入的頁碼
SET @per_page = 10; -- 用戶輸入的每頁記錄數量SELECT customer_name, age
FROM customers
ORDER BY customer_name
LIMIT @per_page
OFFSET (@page - 1) * @per_page;

通過合理設置 LIMITOFFSET 的值,可以實現靈活的分頁查詢,以滿足用戶對查詢結果的需求,并提供友好的界面交互體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714276.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

未來醫療技術的發展方向在Python中的重要性

未來醫療技術的發展方向在Python中的重要性體現在以下幾個方面: 數據分析和人工智能:Python作為一種強大的數據分析語言,可以進行大規模的數據處理、分析和挖掘。在醫療領域,大量的醫療數據可以通過Python進行分析,幫助…

【市工信】2024年青島市綠色工廠、綠色工業園區等綠色制造示范申報

科大睿智小編從青島市工信局了解到&#xff0c;為深入貫徹綠色發展理念&#xff0c;牢固樹立綠色低碳發展導向&#xff0c;進一步完善綠色制造體系&#xff0c;培育綠色制造先進典型&#xff0c;根據《工業和信息化部關于印發<綠色工廠梯度培育及管理暫行辦法>的通知》&a…

springcloud:3.1介紹雪崩和Resilience4j

災難性雪崩效應 簡介 服務與服務之間的依賴性,故障會傳播,造成連鎖反應,會對整個微服務系統造成災難性的嚴重后果,這就是服務故障的“雪崩”效應。 原因 1.服務提供者不可用(硬件故障、程序bug、緩存擊穿、用戶大量請求) 2.重試加大流量(用戶重試,代碼邏輯重試) 3.服…

在golang中使用protoc

【Golang】proto生成go的相關文件 推薦個人主頁&#xff1a;席萬里的個人空間 文章目錄 【Golang】proto生成go的相關文件1、查看proto的版本號2、安裝protoc-gen-go和protoc-gen-go-grpc3、生成protobuff以及grpc的文件 1、查看proto的版本號 protoc --version2、安裝protoc-…

Acwing 周賽132 解題報告 | 珂學家 | 并查集 + floyd尋路

前言 整體評價 A. 大小寫轉換 Q: 把字符串s統一成小寫字母形態 題型&#xff1a;簽到 知識點: 考察字符串的API題 c可以借助transform函數&#xff0c;進行轉化 #include <bits/stdc.h>using namespace std;int main() {string s;cin >> s;// 把自己轉化為小寫…

10-Java裝飾器模式 ( Decorator Pattern )

Java裝飾器模式 摘要實現范例 裝飾器模式&#xff08;Decorator Pattern&#xff09;允許向一個現有的對象添加新的功能&#xff0c;同時又不改變其結構 裝飾器模式創建了一個裝飾類&#xff0c;用來包裝原有的類&#xff0c;并在保持類方法簽名完整性的前提下&#xff0c;提供…

代購程序api接口采集商品信息接入演示示例

以下是一個使用Java編寫的簡單示例&#xff0c;演示如何通過API接口采集商品信息并接入到代購程序中&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; impor…

vue使用swiper(輪播圖)-真實項目使用

一、安裝 我直接安裝的vue-awesome-swiper": "^3.1.3"指定版本 npm install vue-awesome-swiper3.1.3 swiper --save二、vue頁面使用&#xff0c;寫了一個小demo <template><div class"vue-swiper"><h1>{{ msg }}</h1><…

陶瓷工業5G智能制造工廠數字孿生可視化平臺,推進行業數字化轉型

陶瓷工業5G智能制造工廠數字孿生可視化平臺&#xff0c;推進行業數字化轉型。在陶瓷工業領域&#xff0c;5G智能制造工廠數字孿生可視化平臺的應用正在改變著行業的傳統生產模式&#xff0c;推動著數字化轉型的進程。本文將圍繞這一主題展開探討&#xff0c;分析數字孿生可視化…

Unity GC + C# GC + Lua GC原理

Unity垃圾回收原理 參考文章&#xff1a;垃圾回收 (計算機科學) - 維基百科&#xff0c;自由的百科全書 (wikipedia.org) 在計算機科學中&#xff0c;垃圾回收&#xff08;英語&#xff1a;Garbage Collection&#xff0c;縮寫為GC&#xff09;是指一種自動的存儲器管理機制。…

配置之道:深入研究Netty中的Option選項

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事 配置之道&#xff1a;深入研究Netty中的Option選項 前言Option的基礎概念ChannelOption與Bootstrap Option常見的ChannelOption類型ChannelConfig的使用Option的生命周期不同傳輸協議的Option 前言 在…

Linux下檢查端口占用

很多網站都給出方法檢查出端口占用的進程&#xff0c;直接就kill掉&#xff0c;并不檢查占用進程的詳細情況&#xff0c;如&#xff1a;https://www.runoob.com/w3cnote/linux-check-port-usage.html 正常情況下&#xff0c;需要對進程進行檢查 ls /proc/進程ID -l

Tomcat部署Web服務器及基礎功能配置

前言 Tomcat作為一款網站服務器&#xff0c;目前市面上Java程序使用的比較多&#xff0c;作為運維工人&#xff0c;有必要了解一款如何去運行Java環境的網站服務。 目錄 一、Java相關介紹 1. Java歷史 2. Java跨平臺服務 3. Java實現動態網頁功能 3.1 servelt 3.2 jsp …

Revit-二開之創建TextNote-(1)

Revit二開之創建TextNote TextNode在Revit注釋模塊中&#xff0c;具體位置如圖所示 圖中是Revit2018版本 【Revit中的使用】 Revit 中的操作是點擊上圖中的按鈕在平面視圖中點擊任意放置放置就行&#xff0c; 在屬性中可以修改文字 代碼實現 創建TextNode ExternalComm…

Web Tomcat

目錄 1 前言2 Tomcat的安裝3 Tomcat文件的構成4 Tomcat的使用步驟 1 前言 Tomcat是一個 http(web)的容器&#xff0c;籠統的理解一下所有的網站都叫做web。這個web容器可以把我們的前端(htmlcssjs)和后端(servlet)代碼都運行起來。 Tomcat是一個免費的開源的Servlet容器&#…

Flutter中的三棵樹

Widget Tree&#xff1a; 頁面配置信息。 Element Tree&#xff1a; Widget tree的實例化對象&#xff0c;創建出renderObject&#xff0c;并關聯到element.renderobject屬性上&#xff0c;最后完成RenderObject Tree的創建。 RenderObject Tree&#xff1a;完成布局和圖層繪制…

【C++ 函數重載】

C 函數重載 ■ C 函數重載簡介■ C 運算符重載■ 一元運算符重載■ 二元運算符重載 &#xff08;&#xff0c;-&#xff0c;*&#xff0c;/&#xff09;■ 關系運算符重載 &#xff08; < 、 > 、 < 、 > 、 等等&#xff09;■ 輸入/輸出運算符重載&#xff08;運…

【嵌入式學習】網絡編程day03.02

一、項目 1、TCP機械臂測試 #include <myhead.h> #define SER_IP "192.168.126.32" #define SER_PORT 8888 #define CER_IP "192.168.126.42" #define CER_PORT 9891 int main(int argc, const char *argv[]) {int wfd-1;//創建套接字if((wfdsocke…

ubuntu創建賬號和samba共享目錄

新建用于登錄Ubuntu圖形界面的用戶 sudo su #切換為root用戶獲取管理員權限用于新建用戶 adduser username #新建用戶&#xff08;例如用戶名為username&#xff09; adduser username sudo #將用戶添加到 sudo 組 新建只能用于命令行下登錄的用戶 sudo su #切換為root用戶…

《TCP/IP詳解 卷一》第8章 ICMPv4 和 ICMPv6

目錄 8.1 引言 8.1.1 在IPv4和IPv6中的封裝 8.2 ICMP 報文 8.2.1 ICMPv4 報文 8.2.2 ICMPv6 報文 8.2.3 處理ICMP報文 8.3 ICMP差錯報文 8.3.1 擴展的ICMP和多部報文 8.3.2 目的不可達和數據包太大 8.3.3 重定向 8.3.4 ICMP 超時 8.3.5 參數問題 8.4 ICMP查詢/信息…