MySQL 運算符實戰:9 道經典練習題解析

MySQL 運算符實戰:9 道經典練習題解析

運算符是 MySQL 查詢的 “靈魂”,靈活運用各類運算符能讓數據篩選更加精準高效。本文通過 9 道實戰練習題,詳解邏輯運算符、比較運算符及模糊匹配的用法,幫你快速掌握運算符的核心應用場景。

一、范圍查詢:NOT BETWEEN 與 OR 的靈活運用

題目 1:選擇工資不在 5000 到 12000 的員工的姓名和工資

解決方案
-- 方法1:使用OR邏輯運算符
SELECT last_name, salary
FROM employees
WHERE salary < 5000 OR salary > 12000;-- 方法2:使用NOT BETWEEN(更簡潔)
SELECT last_name, salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
知識點解析
  • BETWEEN AND:表示閉區間范圍(包含邊界值),salary BETWEEN 5000 AND 12000 等價于 salary >= 5000 AND salary <= 12000;

  • NOT 取反:NOT BETWEEN 直接排除范圍內的數據,比 OR 更簡潔,可讀性更高;

  • 適用場景:連續范圍的反向篩選,優先用 NOT BETWEEN。

二、集合查詢:IN 與 OR 的效率對比

題目 2:選擇在 20 或 50 號部門工作的員工姓名和部門號

解決方案
-- 方法1:使用OR邏輯運算符
SELECT last_name, department_id
FROM employees
WHERE department_id = 20 OR department_id = 50;-- 方法2:使用IN集合運算符(推薦)
SELECT last_name, department_id
FROM employees
WHERE department_id IN (20, 50);
知識點解析
  • IN 運算符:用于匹配離散的多個值,IN (20,50) 等價于 =20 OR =50,但代碼更簡潔;

  • 性能優勢:當集合元素較多(如 10 個以上),IN 的執行效率通常高于多個 OR 拼接;

  • 注意:IN 列表中若包含 NULL,不會影響非 NULL 值的匹配,但結果可能包含 NULL。

三、NULL 值處理:IS NULL 與 IS NOT NULL

題目 3:選擇公司中沒有管理者的員工姓名及 job_id

解決方案
SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL;

題目 4:選擇公司中有獎金的員工姓名、工資和獎金級別

解決方案
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
知識點解析
  • NULL 的特殊性:NULL 表示 “未知值”,不能用 = 或 != 判斷,必須用 IS NULL(為空)或 IS NOT NULL(非空);

  • 應用場景:判斷字段是否未填寫(如管理者 ID、獎金比例),避免因 NULL 導致的篩選遺漏;

  • 注意:IFNULL(commission_pct, 0) 可將 NULL 轉換為 0(如計算年薪時),但篩選時仍需用 IS NOT NULL。

四、模糊匹配:LIKE 通配符的精準用法

題目 5:選擇員工姓名的第三個字母是 a 的員工姓名

解決方案
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
解析
  • LIKE 通配符:_ 匹配單個任意字符,% 匹配 0 個或多個任意字符;

  • 模式說明a% 表示前兩個字符任意,第三個字符為a,后續字符不限( 對應兩個位置)。

題目 6:選擇姓名中有字母 a 和 k 的員工姓名

解決方案
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%k%' OR last_name LIKE '%k%a%';
解析
  • 多條件模糊匹配:需考慮兩種順序(a在前k在后或k在前a在后),用 OR 連接;

  • 注意:% 可匹配任意長度字符(包括 0),確保不遺漏包含兩個字符的所有情況。

題目 7:顯示表 employees 中 first_name 以 ‘e’ 結尾的員工信息

解決方案
-- 方法1:使用LIKE
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name LIKE '%e';-- 方法2:使用REGEXP正則(更靈活)
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name REGEXP 'e$';
解析
  • 結尾匹配:%e 表示以e結尾(LIKE),e$ 表示以e結尾(REGEXP正則);

  • REGEXP 優勢:支持更復雜的模式(如多字符結尾),適合高級字符串匹配。

五、區間與集合綜合運用

題目 8:顯示表 employees 部門編號在 80-100 之間的姓名、工種

解決方案
SELECT last_name, job_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;
解析
  • 連續區間優選 BETWEEN:BETWEEN 80 AND 100 等價于 >=80 AND <=100,代碼更簡潔;

  • 注意:區間包含邊界值(80 和 100),若需排除邊界需用 > 和 <。

題目 9:顯示表 employees 的 manager_id 是 100、101、110 的員工姓名、工資、管理者 id

解決方案
SELECT last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 110);
解析
  • 離散值集合用 IN:IN (100,101,110) 清晰表達 “屬于指定集合”,比 =100 OR =101 OR =110 更易讀;

  • 擴展:若集合元素來自子查詢,可寫成 IN (SELECT …),實現動態匹配。

總結:運算符核心用法速查表

運算符 / 語法作用典型場景
BETWEEN A AND B匹配 A 到 B 的閉區間工資、年齡等連續范圍查詢
NOT BETWEEN排除 A 到 B 的區間反向范圍篩選
IN (值1,值2…)匹配離散集合中的值部門 ID、管理者 ID 等固定選項
IS NULL判斷字段為空查找未分配管理者、無獎金的記錄
IS NOT NULL判斷字段非空查找有獎金、已填寫信息的記錄
LIKE ‘%a%’模糊匹配包含 a 的字符串姓名、職位等包含特定字符的查詢
LIKE ‘__a%’匹配第三個字符為 a 的字符串固定位置字符匹配
REGEXP ‘e$’正則匹配以 e 結尾的字符串復雜模式的字符串匹配

通過這 9 道題,可掌握運算符在實際場景中的靈活應用。記住:優先用 IN 替代多 OR、用 BETWEEN 簡化連續范圍、用 IS NULL 處理空值,能讓你的 SQL 更簡潔高效。

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

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

相關文章

【R語言】更換電腦后,如何在新設備上快速下載原來設備的 R 包?

【R語言】更換電腦后&#xff0c;如何在新設備上快速下載原來設備的 R 包&#xff1f; 在日常使用 R 進行數據分析時&#xff0c;我們往往會安裝很多包&#xff08;packages&#xff09;&#xff0c;一旦更換電腦&#xff0c;手動一個一個重新安裝會非常麻煩。本文介紹一種簡單…

如何在 Ubuntu 24.04 或 22.04 LTS 上安裝 PowerShell

在本教程中,我們將學習如何在 Ubuntu 24.04 Noble 或 22.04 Jammy JellyFish Linux 中通過命令終端安裝 Microsoft Windows PowerShell。 Windows PowerShell 既是一個命令行外殼程序,也是一種腳本語言。它擁有超過 130 個遵循一致語法和命名約定的命令行工具,稱為 cmdlet(…

基于支持向量機的數據回歸預測(libsvm) SVM

一、作品詳細簡介 1.1附件文件夾程序代碼截圖 全部完整源代碼&#xff0c;請在個人首頁置頂文章查看&#xff1a; 學行庫小秘_CSDN博客?編輯https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夾說明 1.2.1 main.m主函數文件 這段 MATLAB 代碼實現…

Flowith-節點式GPT-4 驅動的AI生產力工具

本文轉載自&#xff1a;Flowith-節點式GPT-4 驅動的AI生產力工具 - Hello123工具導航 ** 一、節點式 AI 工作流革新者&#xff1a;Flowith 深度解析 二、產品核心定位 Flowith 是一款基于 GPT-4 Turbo 的節點式 AI 生產力工具&#xff0c;突破傳統單線程聊天模式&#xff0c…

MySQL的事務日志:

目錄 redo&#xff08;重做日志&#xff09;&#xff1a; 特點&#xff1a; 組成&#xff1a; 整體流程&#xff1a; redo log buffer與redo log file之間的刷盤策略&#xff1a; 異步刷盤&#xff1a; 同步刷盤&#xff1a; 拆中策略&#xff1a; undo&#xff08;回…

JavaScript 中 throw error 與 throw new Error(error) 的用法及區別,分別適合什么場景使用?

JavaScript 中 throw error 與 throw new Error(error) 的用法及區別 在 JavaScript 中&#xff0c;throw 關鍵字用于拋出異常。當代碼遇到某些錯誤或異常情況時&#xff0c;可以通過拋出錯誤來通知程序&#xff0c;方便后續的錯誤處理。盡管 throw 的使用看似簡單&#xff0c…

鴻蒙自帶組件效果大全

圖形變換-視效與模糊-通用屬性-ArkTS組件-ArkUI&#xff08;方舟UI框架&#xff09;-應用框架 - 華為HarmonyOS開發者 注意:找到需求效果之后先對一下版本 視距 圖像效果 圖片裁剪 顏色漸變 前景屬性設置 外描邊設置: 視效設置: 組件內容模糊 運動模糊 點擊回彈效果…

ISP算法如何優化提升成像質量

ISP算法通過多維度技術協同優化成像質量&#xff0c;核心優化路徑如下&#xff1a;一、降噪與細節增強?AI驅動降噪?深度學習模型實時識別噪點模式&#xff0c;暗光場景信噪比提升5倍以上&#xff0c;同時保留紋理細節。時空域聯合降噪技術抑制運動模糊&#xff0c;鬼影消除率…

單例模式及優化

單例模式是一種創建型設計模式&#xff0c;其核心是確保一個類在程序中只能存在唯一實例&#xff0c;并提供一個全局訪問點。這種模式適用于需要集中管理資源&#xff08;如日志、配置、連接池&#xff09;的場景&#xff0c;避免資源沖突和重復創建的開銷。 一、介紹 類型 單例…

Dockerfile優化指南:利用多階段構建將Docker鏡像體積減小90%

更多如果你已經跟隨我們之前的教程&#xff0c;親手將自己的應用裝進了Docker這個“魔法盒子”&#xff0c;那你可能很快就會遇到一個幸福但又尷尬的煩惱&#xff1a;你親手構建的Docker鏡像&#xff0c;竟然像一個塞滿了石頭和棉被的行李箱&#xff0c;臃腫不堪&#xff0c;笨…

英文PDF翻譯成中文怎么做?試試PDF翻譯工具

在全球化快速發展的時代&#xff0c;跨語言交流變得愈發頻繁&#xff0c;無論是學術研究、商務合作還是日常學習&#xff0c;都離不開一個高效、準確的翻譯工具。尤其是對于PDF文件的翻譯需求&#xff0c;更是日益增長。今天&#xff0c;就讓我們一起深入了解幾款在PDF翻譯領域…

macOS使用brew切換Python版本【超詳細圖解】

目錄 一、更新Homebrew倉庫 二、安裝pyenv 三、將pyenv添加到bash_profile文件中 四、使.bash_profile文件的更改生效 五、安裝需要的Python版本 六、設置全局使用的Python版本 七、檢查Python版本是否切換成功 pyenv常用命令 一、更新Homebrew倉庫 brew update 這個…

[矩陣置零]

初始思路分析 這段代碼實現了將矩陣中元素為0的行和列全部置零的功能。主要思路是使用標記數組記錄需要置零的行和列。以下是詳細分析&#xff1a; 1. 初始化階段 int m matrix.size(); int n matrix[0].size(); vector<bool> row(m), col(n);獲取矩陣的行數m和列數n創…

redis-集成prometheus監控(k8s)

一. 簡介&#xff1a; 關于redis的簡介和部署&#xff0c;可以參考單獨的文章redis-sentinel基礎概念及部署-CSDN博客&#xff0c;這里就不細說了。這里只講講如何在k8s中部署export并基于prometheus做redis的指標采集。 二. 實現方式&#xff1a; 首先我們需要先部署exporter…

OVS:ovn為什么默認選擇Geneve作為二層隧道網絡協議?

首先確認 Geneve 是一種封裝協議,可能提供比 VLAN 或 VXLAN 更靈活的擴展能力,這對 OVN 的多租戶場景很重要。可能需要支持更多元數據字段,比如攜帶網絡策略信息,這符合 SDN 集中控制的需求。 性能方面需要考慮封裝效率和硬件支持情況,雖然 Geneve 頭部稍大,但現代網卡的…

grep命令要點、詳解和示例

grep技術要點 1) 工作模型&#xff08;3 件事&#xff09; 輸入&#xff1a;從文件或標準輸入&#xff08;-&#xff09;讀入&#xff0c;一次按“行”處理&#xff08;除非用 -z 改成以 NUL 作為“行”分隔&#xff09;。匹配&#xff1a;把每一行拿去和模式&#xff08;patte…

nVidia Tesla P40使用anaconda本地重編譯pytorch3d成功加載ComfyUI-3D-Pack

背景 自己用的是nVidia Tesla P40&#xff0c;垃圾佬專屬卡 使用下面的由YanWenKun提供的ComfyUI-3D-Pack預安裝環境&#xff0c;但在本地編譯pytorch3d這一步出錯&#xff0c;后面有出錯信息&#xff0c;如果有和我一樣的卡一樣的問題&#xff0c;參看此文的解決方法 老版本…

網絡基礎——協議認識

文章目錄網絡基礎網絡的發展——引出一些概念協議認識初識協議協議分層協議分層的模型再談協議為什么要有TCP/IP協議TCP/IP協議的宏觀認識宏觀理解TCP/IP協議和操作系統的關系協議的真正本質網絡基礎 本篇文章&#xff0c;我們將正式進入網絡部分的學習。這是網絡部分的第一篇…

云原生俱樂部-RH134知識點總結(2)

這一章的內容也會比較多&#xff0c;因為預期三篇文章更完RH134系列&#xff0c;所以每章安排的內容都比較多&#xff0c;并且RH134上面的都是重點&#xff0c;一點也不好寫。昨天一天將RH124系列寫完了&#xff0c;今天爭取將RH134系列寫完。至于我為什么要著急將這些寫完&…

深度學習-計算機視覺-微調 Fine-tune

1. 遷移學習遷移學習&#xff08;transfer learning&#xff09;是一種機器學習方法&#xff0c;通過將源數據集&#xff08;如ImageNet&#xff09;上訓練得到的模型知識遷移到目標數據集&#xff08;如特定場景的椅子識別任務&#xff09;。這種方法的核心在于利用預訓練模型…