【MySQL】查詢語句:條件、排序和分頁

基本查詢

MySQL 數據庫使用SELECT語句來查詢數據。

查詢字段

  • 以下為在MySQL數據庫中查詢數據通用的 SELECT 語法:
SELECT 字段名,字段名... FROM 表名;
  • 選擇全部列
SELECT * FROM emp;	-- 查詢所有字段

在這里插入圖片描述

一般情況下,除非需要使用表中所有的字段數據,最好不要使用通配符‘*’。使用通配符雖然可以節省輸入查詢語句的時間,但是獲取不需要的列數據通常會降低查詢和所使用的應用程序的效率。

  • 選擇指定的列
SELECT empno,ename,job FROM emp;

在這里插入圖片描述

列(字段)別名

在很多情況下為了方便查看結果或者簡化字段名,會對查詢的字段取別名。

  • 語法:
SELECT 字段1 [AS 別名],字段2 [AS 別名]... FROM 表名;
  • 舉例一:
    通過直接在選擇的列或表后面提供別名
SELECT empno 員工編號,ename 員工姓名,job 工作 FROM emp;

在這里插入圖片描述

  • 舉例二:
    使用AS關鍵字為查詢結果的列或表取別名
SELECT empno AS 員工編號,ename AS 員工姓名,job AS 工作 FROM emp;
  • 舉例三:
    還可以用單引號或雙引號把別名包裹起來。
SELECT empno AS "員工編號",ename AS "員工姓名",job AS "工作" FROM emp;	-- 用雙引號包裹別名SELECT empno AS '員工編號',ename AS '員工姓名',job AS '工作' FROM emp;	-- 用單引號包裹別名

當別名中包含空格時,必須用單引號或雙引號進行包裹!如下:

SELECT empno AS 員工 編號 FROM emp;

會直接報錯:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '編號 FROM emp' at line 1

SELECT empno AS "員工 編號" FROM emp;

在這里插入圖片描述

DISTINCT去重

從表中查詢數據時,可能會收到重復的行記錄。為了刪除這些重復行,可以在SELECT語句中使用DISTINCT子句。

  • 語法
SELECT DISTINCT 字段列表 FROM 表名;
單列中使用 DISTINCT

查詢員工表(emp)中所有員工的崗位(job)有哪些。

SELECT job FROM emp;

執行SQL語句,得到如下結果:
在這里插入圖片描述

可看到上面結果中,有些結果是重復的,比如:SALESMANMANAGER為了做到相同的結果只顯示一個就要刪除重復的記錄,將DISTINCT子句添加到SELECT語句中即可

SELECT DISTINCT job FROM emp;

查詢到的結果如下:
在這里插入圖片描述

可以看到,當使用DISTINCT子句時,重復的job被消除了。

多列中使用 DISTINCT
  • 舉例二:查詢員工表(emp)中,job對應的部門(deptno),去掉重復記錄
SELECT DISTINCT job,deptno FROM emp;

在這里插入圖片描述

這里會發現job或者deptno中會有重復,但是這個并沒有問題DISTINCT是刪除重復的行,這里并沒有哪一行是重復的。

注意DISTNCT關鍵字必須寫在所有字段之前

空值參與運算

先來一個查詢案例,查詢員工年薪,即 (sal+comm)* 12。

SELECT ename,(sal + comm)*12 AS '年薪' FROM emp;

查詢結果集如下:
在這里插入圖片描述

發現有很多員工的年薪竟然是NULL,白干一年!這是為啥呢,emp表中每個員工都是有薪資的,只不過不是所有員工都有獎金,有的是NULL。當NULL值參與運算時,計算的結果一定是NULL,所以要對NULL進行處理!

在這里插入圖片描述

SELECT ename,sal + IFNULL(comm,0)*12 AS '年薪' FROM emp;

IFNULL(expr, value_if_null)是一個處理NULL值的函數expr是要處理的表達式,而value_if_null是表達式為NULL時的值,這樣就不會出現被公司白嫖一年的情況了。
在這里插入圖片描述

注意:空值不等于任何值,甚至不等于NULL。
要想判斷是不是NULL值,必須使用IS NULL

SELECT NULL IS NULL;

查詢常數

在使用MySQL進行數據查詢時,經常需要加入一列常數來進行特定的計算或篩選。通過在SELECT語句中使用常數值和別名,可以方便地在查詢結果中添加一列常數。

比如,我們想對emp表中的員工姓名進行查詢,同時增加一列字段corporation,這個字段固定為“XX公司”,可以這樣寫:

SELECT 'XX公司' AS 'corporation',ename FROM emp;

在這里插入圖片描述

條件查詢

從 MySQL 表中使用 SELECT 語句來查詢數據,如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句中。

語法

SELECT column1, column2, ...
FROM table_name
WHERE condition;

在條件中,可以使用以下基本的比較操作符進行比較也可以用下面的邏輯運算符連接多個條件

運算符表

關系運算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<=>安全等于
<> 或 !=不等于
邏輯運算符功能
AND 或 &&并且(多個條件同時成立)
OR 或 ||或者(多個條件任意成立一個)
NOT 或 !非,不是
XOR邏輯異或 (一真一假才為真)
其他功能
BETWEEN…AND…在某個范圍之間(含最小、最大值)
[NOT] IN(…)在in之后的列表中的值,多選一
LIKE模糊匹配(_匹配單個字符,%匹配任意個字符)
IS [NOT] NULL是 NULL
REGEXP正則表達式運算符
RLIKE正則表達式運算符
LEAST最小值運算符
GREATEST最大值運算符
查詢需求
  1. 查詢工資等于3000的員工
SELECT * FROM emp WHERE emp.sal<3000;

在這里插入圖片描述

  1. 查詢沒有獎金的員工
SELECT * FROM emp WHERE emp.comm IS NULL;

在這里插入圖片描述

  1. 查詢工資在1200到1800之間的員工(包含1200和1800歲)
SELECT * FROM emp WHERE emp.sal BETWEEN 1200 AND 1800;

在這里插入圖片描述

  1. 查詢職位為推銷員,且工資小于1500的員工
SELECT * FROM emp WHERE emp.sal BETWEEN 1200 AND 1800 && emp.job='SALESMAN';
  1. 查詢姓名為四個字的員工
SELECT * FROM emp WHERE emp.ename LIKE '____';
#'____'是四個連續的下劃線,注意下劃線之間不要有空格

在這里插入圖片描述

  1. 查詢姓名最后一位是S的員工
SELECT * FROM emp WHERE emp.ename LIKE '%S';

在這里插入圖片描述

排序查詢

通過條件查詢語句可以查詢到符合用戶需求的數據,但是查詢到的數據一般都是按照數據最初被添加到表中的順序來顯示。為了使查詢結果的順序滿足用戶的要求,在 MySQL 中,你可以使用 ORDER BY 子句對查詢結果進行排序。ORDER BY 允許你按照一個或多個列的值對結果進行升序(ASC)或降序(DESC)排序。

語法

SELECT 字段名 FROM 表名 ... ORDER BY 排序字段名 [ASC|DESC],[排序字段名 [ASC|DESC]];

語法說明:

  • 排序字段名:表示需要排序的字段名稱,多個字段時用逗號隔開。
  • ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC為默認值。

特點

  • ORDER BY子句一般放到查詢語句的最后面,LIMIT字句除外。
  • 當排序的字段中存在空值時,ORDER BY 會將該空值作為最小值來對待。在語句后加上NULLS LAST空值會最后出現。
  • ORDER BY 指定多個字段進行排序時,MySQL 會按照字段的順序從左到右依次進行排序。
  • 注意:在對多個字段進行排序時,排序的第一個字段必須有相同的值,才會對第二個字段進行排序。如果第一個字段數據中所有的值都是唯一的,MySQL 將不再對第二個字段進行排序。

查詢需求

  1. 根據姓名對員工進行排序(升序)
SELECT * FROM emp ORDER BY emp.ename ASC;
  1. 查詢入職時間大于1981年6月6日的員工信息,并按照入職時間升序排列
SELECT * FROM emp WHERE emp.hiredate>'1981-6-6' ORDER BY emp.hiredate ASC;

在這里插入圖片描述

  1. 根據工作職位,進行升序排列,職位相同的情況下,再根據入職時間降序排列
SELECT * FROM emp ORDER BY emp.job ASC , emp.hiredate DESC;

在這里插入圖片描述

分頁查詢

對于比較多的數據,如果在一個頁面全部顯示,查看起來會眼花繚亂。

進行分頁查詢有兩種寫法,如下所示:

LIMIT

SELECT 字段名 FROM 表名 LIMIT 起始索引,查詢記錄數;
SELECT column1, column2, ...
FROM table_name
LIMIT 20 OFFSET 10;
#這將返回從第 21 條記錄開始的下 10 條記錄

LIMIT OFFSET

SELECT 字段名 FROM 表名 LIMIT 查詢記錄數 OFFSET 起始索引;
User
SELECT column1, column2, ...
FROM table_name
LIMIT 20 offset 10;
#這將返回從第11條記錄開始的后續20條記錄

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

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

相關文章

消防主機報故障時發出故障及原因及解決辦法!

本文以青鳥消防JBF-11SF為例。 其他型號或品牌的消防主機也可參考。 開機前&#xff0c;必須先測量系統接線的絕緣電阻&#xff0c;確保各絕緣電阻滿足以下要求&#xff1a; 1&#xff09;空載時各電路信號線之間的絕緣值應大于5K歐姆。 2&#xff09;正常天氣條件下&#x…

Java SE:反射

反射作用 獲取字節碼文件里面的所有信息&#xff0c;包括構造方法、成員、成員方法&#xff0c;以及修飾他們的修飾符、類型和方法的返回值等等&#xff0c;只要是類里面的內容都能獲取&#xff0c;獲取之后可以動態的調用方法&#xff0c;動態的創建對象 獲取類字節碼文件對象…

2024全國水科技大會暨新材料在水污染防治中的應用論壇(十)

召集人&#xff1a;唐 量 上海大學環境與化學工程學院教授 莊贊勇 福州大學材料科學與工程學院教授 一、會議背景 為積極應對“十四五”期間我國生態環境治理面臨的挑戰&#xff0c;加快生態環境科技創新&#xff0c;構建綠色技術創新體系&#xff0c;全面落實科學技術部、生…

創建hadoop集群

分布式hadoop集群分布 服務器功能規劃 node-1&#xff1a;namenode,datanode,nodemanager,historyserver node-2&#xff1a;resourcemanage,datanode,nodemanager node-3&#xff1a;datanode&#xff0c;nodemanager&#xff0c;secondarynamenode #在node-1上 $ bin/hdfs …

點云數據結構化與體素化理論學習

一、PCD點云數據存儲格式的進一步認識 &#xff08;一&#xff09;PCD點云存儲格式相較于其它存儲格式&#xff08;如PLY、STL、OBJ、X3D等&#xff09;的優勢[1] &#xff08;1&#xff09;具有存儲和處理有組織的點云數據集的能力&#xff0c;這對于實時應用和增強現實及機器…

20240302-1-ZooKeeper面試題(三)

21. 集群最少要幾臺機器&#xff0c;集群規則是怎樣的? 集群規則為 2N1 臺&#xff0c;N>0&#xff0c;即 3 臺。 22. 集群支持動態添加機器嗎&#xff1f; 其實就是水平擴容了&#xff0c;Zookeeper 在這方面不太好。兩種方式&#xff1a;第 62 頁 共 485 頁全部重啟&a…

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之非包裝類型

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之非包裝類型 一、未包裝類型映射二、未包裝類型字段名三、查詢未包裝對象3.1 按未包裝字段排序3.2 未包裝對象的字段投影3.3 未包裝對象的Query By Example3.4 未包裝對象的存儲庫查詢 四、更新未包裝對象五、未包裝對象…

蒼穹外賣學習 Day10 Day11 Day12

前言 用于記錄蒼穹外賣Day10、Day11、Day12的學習 Day10 訂單狀態定時處理 來電提醒 客戶催單 訂單狀態定時處理 Spring Task Spring Task是一個任務調度工具&#xff0c;可以按照約定的時間自動執行某個代碼邏輯&#xff08;定時自動執行某段Java代碼&#xff09; cron表…

代碼隨想錄算法訓練營第三十天| 回溯篇總結

文章目錄 前言一、組合問題二、切割問題三、子集問題四、排列問題五、性能分析總結 前言 回溯法就是暴力搜索&#xff0c;并不是什么高效的算法&#xff0c;最多再剪枝一下。 組合問題&#xff1a;N個數里面按一定規則找出k個數的集合 排列問題&#xff1a;N個數按一定規則全…

【黑馬程序員】STL之set和map容器

文章目錄 set/multiset容器set基本概念簡介區別 set的構造和賦值功能描述函數原型代碼示例運行結果 set的大小和交換功能描述函數原型代碼示例運行結果 set的插入和刪除功能描述函數原型代碼示例運行結果 set查找和統計函數原型代碼示例運行結果 set和multiset區別區別代碼示例…

JVM(6)

JMM JVM定義了一種Java內存模型來屏蔽掉各種硬件和操作系統的內存訪問差異,以實現讓Java程序在各種平臺下都能達到一致的內存訪問效果.在此之前,C/C直接使用物理硬件和操作系統的內存模型,因此,會由于不同平臺下的內存模型差異,有可能導致程序在一套平臺上并發完全正常,而在另…

深入解剖指針(4)

個人主頁&#xff08;找往期文章包括但不限于本期文章中不懂的知識點&#xff09;&#xff1a; 我要學編程(?_?)-CSDN博客 目錄 回調函數 qsort使用舉例 使用qsort函數排序整型數據 使用qsort排序結構數據 qsort函數的模擬實現 回調函數 回調函數就是一個通過函數指…

【Android12】Android性能調優工具SystemServerTiming日志

Android性能調優工具SystemServerTiming日志 性能優化、穩定性優化是Android系統優化的兩大方面&#xff0c;對于性能調試Android提供了很多工具&#xff0c;比如&#xff1a;bootchart、systrace、perfboot、log、dmsg等等。 SystemServerTiming是Android原生系統中一個日志…

《Spring Security 簡易速速上手小冊》第10章 未來趨勢與高級話題(2024 最新版)

文章目錄 10.1 云原生安全性趨勢10.1.1 基礎知識10.1.2 重點案例&#xff1a;保護微服務通信10.1.3 拓展案例 1&#xff1a;容器安全最佳實踐10.1.4 拓展案例 2&#xff1a;自動化安全審計和合規性檢查 10.2 反應式編程與 Spring Security10.2.1 基礎知識10.2.2 重點案例&#…

nginx-圖片模塊

./configure --with-http_image_filter_module location / {root html;index index.html index.htm;if ($arg_w "") {set $arg_w -;}if ($arg_h "") {set $arg_h -;}image_filter resize $arg_w $arg_h;image_filter_jpeg_quality 95; } 訪問: 1234…

CSS錐形漸變:conic-gradient()

畫一個扇形圖&#xff0c;使用常規方法可能很難畫&#xff0c;但是用錐形漸變的話非常好畫 <style>.pattern{width: 100px; height: 100px;border-radius: 50%;background: conic-gradient(yellow 30deg , black 30deg , black 90deg , yellow 90deg ,yellow 150d…

Git分布式版本控制系統——git學習準備工作

一、Git倉庫介紹 開發者可以通過Git倉庫來存儲和管理文件代碼&#xff0c;Git倉庫分為兩種&#xff1a; 本地倉庫&#xff1a;開發人員自己電腦上的Git倉庫 遠程倉庫&#xff1a;遠程服務器上的Git倉庫 倉庫之間的運轉如下圖&#xff1a; commit&#xff1a;提交&#xff…

Decoupled Knowledge Distillation解耦知識蒸餾

Decoupled Knowledge Distillation解耦知識蒸餾 現有的蒸餾方法主要是基于從中間層提取深層特征&#xff0c;而忽略了Logit蒸餾的重要性。為了給logit蒸餾研究提供一個新的視角&#xff0c;我們將經典的KD損失重新表述為兩部分&#xff0c;即目標類知識蒸餾&#xff08;TCKD&a…

c++之旅——第四彈

大家好啊&#xff0c;這里是c之旅第三彈&#xff0c;跟隨我的步伐來開始這一篇的學習吧&#xff01; 如果有知識性錯誤&#xff0c;歡迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 創作不易&#xff0c;希望大家多多支持哦&#xff01; 本篇文章的主…

如何對比 MySQL 主備數據的一致性?

隨著業務范圍的擴大&#xff0c;很多企業為了保障核心業務的高可用性&#xff0c;選擇了 MySQL 主從架構&#xff0c;這一套方案通常具備主備數據同步、數據備份與恢復、讀寫分離、高可用切換等特性&#xff0c;是一種相當成熟可靠的數據庫架構方案。然而這套方案在特定情況下可…