【MySQL成神之路】運算符總結

MySQL運算符總結

MySQL提供了豐富的運算符,用于在SQL語句中進行各種計算和比較操作。這些運算符可以分為算術運算符、比較運算符、邏輯運算符、位運算符等幾大類。合理使用這些運算符可以構建復雜的查詢條件和計算表達式。

一、算術運算符

MySQL支持基本的算術運算,包括:

  1. 加法運算符(+): 用于兩個數值相加

    SELECT 10 + 5;  -- 結果為15

  2. 減法運算符(-): 用于兩個數值相減

    SELECT 10 - 5;  -- 結果為5

  3. 乘法運算符(*): 用于兩個數值相乘

    SELECT 10 * 5;  -- 結果為50

  4. 除法運算符(/): 用于兩個數值相除

    SELECT 10 / 5;  -- 結果為2.0000

  5. 取模運算符(%)或MOD(): 返回兩個數相除的余數

    SELECT 10 % 3;  -- 結果為1
    SELECT MOD(10,3);  -- 同樣結果為1

二、比較運算符

比較運算符用于比較兩個表達式,返回布爾值(TRUE/FALSE/UNKNOWN):

  1. 等于(=): 判斷兩個值是否相等

    SELECT * FROM users WHERE age = 25;

  2. 不等于(!=或<>): 判斷兩個值是否不相等

    SELECT * FROM users WHERE age != 25;

  3. 大于(>)和小于(<): 判斷一個值是否大于或小于另一個值

    SELECT * FROM products WHERE price > 100;

  4. 大于等于(>=)和小于等于(<=): 包含等于條件的大小比較

    SELECT * FROM orders WHERE amount >= 500;

  5. BETWEEN...AND...: 判斷值是否在某個范圍內

    SELECT * FROM employees WHERE salary BETWEEN 5000 AND 10000;

  6. IN: 判斷值是否在指定列表中

    SELECT * FROM customers WHERE country IN ('USA','UK','China');

  7. LIKE: 模式匹配,常用于模糊查詢

    SELECT * FROM products WHERE name LIKE '%apple%';

  8. IS NULL/IS NOT NULL: 判斷值是否為NULL

    SELECT * FROM users WHERE phone IS NOT NULL;

三、邏輯運算符

邏輯運算符用于組合多個條件:

  1. AND(&&): 邏輯與,所有條件都為真時返回真

    SELECT * FROM students WHERE age > 18 AND gender = 'M';

  2. OR(||): 邏輯或,任一條件為真時返回真

    SELECT * FROM products WHERE category = 'Electronics' OR price < 100;

  3. NOT(!): 邏輯非,反轉布爾值

    SELECT * FROM employees WHERE NOT department = 'HR';

  4. XOR: 邏輯異或,當且僅當一個條件為真時返回真

    SELECT * FROM users WHERE is_active XOR is_premium;

四、位運算符

位運算符對二進制位進行操作:

  1. 按位與(&): 對兩個數的二進制表示逐位進行與操作

    SELECT 5 & 3;  -- 結果為1 (0101 & 0011 = 0001)

  2. 按位或(|): 對兩個數的二進制表示逐位進行或操作

    SELECT 5 | 3;  -- 結果為7 (0101 | 0011 = 0111)

  3. 按位異或(^): 對兩個數的二進制表示逐位進行異或操作

    SELECT 5 ^ 3;  -- 結果為6 (0101 ^ 0011 = 0110)

  4. 按位取反(~): 對一個數的二進制表示逐位取反

    SELECT ~1;  -- 結果為-2 (取決于位數)

  5. 左移(<<)和右移(>>): 將二進制位向左或向右移動指定位數

    SELECT 1 << 3;  -- 結果為8 (0001左移3位變為1000)
    SELECT 8 >> 2;  -- 結果為2 (1000右移2位變為0010)

五、運算符優先級

MySQL運算符按照以下優先級順序計算(從高到低):

  1. 一元運算符(如NOT、~)

  2. 算術運算符(*、/、%、+、-)

  3. 移位運算符(<<、>>)

  4. 位運算符(&、^、|)

  5. 比較運算符(=、!=、>、<、>=、<=、LIKE等)

  6. 邏輯運算符(NOT、AND、OR)

當不確定運算順序時,建議使用括號明確指定運算順序,這不僅能確保正確性,還能提高代碼可讀性。

六、注意事項

  1. NULL處理:與NULL比較時需特別注意,使用=無法正確比較NULL值,應使用IS NULLIS NOT NULL

  2. 數據類型轉換:MySQL會嘗試自動轉換數據類型進行比較,但有時可能導致意外結果,建議確保比較的數據類型一致。

  3. 性能考慮:在索引列上使用函數或運算符可能導致索引失效,如WHERE YEAR(date_column) = 2023會使date_column上的索引無法使用。

  4. 浮點數比較:浮點數比較可能存在精度問題,建議使用范圍比較或轉換為DECIMAL后再比較。

REGEXP 運算符

在SQLSERVER里是沒有正則函數或者運算符的,MYSQL在這方面的確比較完善用來匹配字符串,語法格式為:expr REGEXP 匹配條件,如果expr滿足匹配條件,返回1;如果不滿足,則返回0;若expr或匹配條件任意一個為NULL,則結果為NULL

常用的幾種通配符:

(1)'^'匹配以該字符后面的字符開頭的字符串

(2)'$'匹配以該字符后面的字符結尾的字符串

(3)'.'匹配任何一個單字符

(4)'[...]'匹配在方括號內的任何字符。例如,“[abc]" 匹配a、b或c。字符的范圍可以使用一個'-',“[a-z]”匹配任何字母,而“[0-9]”匹配任何數字

(5) '' 匹配零個或多個在他前面的字符。例如,“x”匹配任何數量的''字符,“[0-9]”匹配任何數量的數字,而“.*”匹配任何數量的任何字符。

使用REGEXP 運算符進行字符串匹配運算,SQL語句如下:

SELECT 'ssky' REGEXP '^s','ssky' REGEXP 'y$' ,'ssky' REGEXP '.sky','ssky' REGEXP'[ab]';

由結果可以看到,指定匹配字符串為ssky。

'^s'表示匹配任何以字母s開頭的字符串,因此滿足匹配條件,返回1;

'y$'表示匹配任何以字母y結尾的字符串,因此滿足匹配條件,返回1;

'.sky'表示匹配任何以sky結尾,字符長度為4的字符串,因此滿足匹配條件,返回1;

'^s'表示匹配任何以字母s開頭的字符串,因此滿足匹配條件,返回1;

'[ab]'表示匹配任何包含字母a或者b的字符串,指定字符串中沒有字母a也沒有字母b,因此不滿足匹配條件,返回0;

注意:正則表達式是一個可以進行復雜查詢的強大工具,相對于LIKE字符串匹配,他可以使用更多的通配符類型,查詢結果更加靈活

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

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

相關文章

自用Vscode 配置c++ debug環境

前言 使用vscode配置c debug環境的好處 1、可以借助vscode方便輕量的擴展和功能 2、避免了傳統使用gdb 復雜按鍵以及不夠直觀的可視化 3、方便一次運行&#xff0c;斷點處查看變量&#xff0c;降低找bug難度 4、某大公司項目采用類似配置&#xff0c;經過實踐檢驗 配置c運行環…

創建一個使用 GPT-4o 和 SERP 數據的 RAG 聊天機器人

亮數據-網絡IP代理及全網數據一站式服務商屢獲殊榮的代理網絡、強大的數據挖掘工具和現成可用的數據集。亮數據&#xff1a;網絡數據平臺領航者https://www.bright.cn/?promogithub15?utm_sourceorganic-social-cn&utm_campaigncsdn 本指南將解釋如何使用 Python、GPT-4…

吳恩達 Deep Learning(1-36)ppt逐行理解

課程地址&#xff1a;(超爽中英!) 2024公認最好的【吳恩達深度學習】教程&#xff01;附課件代碼 Professionalization of Deep Learning_嗶哩嗶哩_bilibili 1.目錄 2.什么是神經網絡 3.用神經網絡進行監督學習 4.為什么深度學習會興起 7.二分分類 適用于二元分類問題的函數&…

三維點云的處理

1 點云原理 https://zh.wikipedia.org/wiki/%E9%BB%9E%E9%9B%B2 點云&#xff08;英語&#xff1a;point cloud&#xff09;是空間中點的數據集&#xff0c;可以表示三維形狀或對象&#xff0c;通常由三維掃描儀獲取。點云中每個點的位置都由一組笛卡爾坐標(X,Y,Z)描述[1]&…

鴻蒙HarmonyOS多設備流轉:分布式的智能協同技術介紹

隨著物聯網和智能設備的普及&#xff0c;多設備間的無縫協作變得越來越重要。鴻蒙&#xff08;HarmonyOS&#xff09;作為華為推出的新一代操作系統&#xff0c;其分布式技術為實現多設備流轉提供了強大的支持。本文將詳細介紹鴻蒙多設備流轉的技術原理、實現方式和應用場景。 …

Spring Boot- 2 (數萬字入門教程 ):數據交互篇

JDBC交互框架: Spring的JDBC操作工具: 依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> JDBC的模版類:JdbcTemplate 引入Mysql的依賴 <depe…

在 Kotlin 中,什么是內聯函數?有什么作用?

在 Kotlin 中&#xff0c;內聯函數是一種通過 inline 關鍵字聲明的函數&#xff0c;其主要目的是優化高階函數&#xff08;即以函數作為參數或返回值的函數&#xff09;的性能。 內聯函數的函數體會在編譯時直接插入到調用處&#xff0c;從而避免函數調用的開銷&#xff0c;并…

LLM筆記(五)概率論

1. 隨機變量與概率分布&#xff1a;模型輸出的基礎 在LLM中&#xff0c;隨機變量最直觀的體現就是模型預測的下一個token。每個時刻&#xff0c;模型都會輸出一個概率分布&#xff0c;表示詞匯表中每個token可能是"下一個詞"的概率。 直觀理解 想象模型在處理句子…

LeetCode-滑動窗口-找到字符串中所有字母異位詞

LeetCode-滑動窗口-找到字符串中所有字母異位詞 ?? 關于專欄&#xff1a;專欄用于記錄 prepare for the coding test。 文章目錄 LeetCode-滑動窗口-找到字符串中所有字母異位詞&#x1f4dd; 找到字符串中所有字母異位詞&#x1f3af;題目描述&#x1f50d; 輸入輸出示例&am…

PostgreSQL 初體驗

目錄 一、PostgreSQL 1. 簡介 2. 特點 &#xff08;1&#xff09; 開源免費&#xff08;Open Source&#xff09; &#xff08;2&#xff09;標準兼容&#xff08;SQL Compliance&#xff09; &#xff08;3&#xff09; 豐富的數據類型&#xff08;Data Types&#xff09…

05_核支持向量機

描述 核支持向量機&#xff08;通常簡稱為SVM&#xff09;可以推廣到更復雜模型的擴展&#xff0c;這些模型無法被輸入空間的超平面定義。 SVM 的核心思想是找到一個最優的超平面&#xff0c;將不同類別的數據分開。這個超平面不僅要能夠正確分類數據&#xff0c;還要使得兩個…

Java + 鴻蒙雙引擎:ZKmall開源商城如何定義下一代B2C商城技術標準?

在 B2C 電商領域持續革新的當下&#xff0c;技術架構的優劣成為決定商城競爭力的核心要素。ZKmall開源商城以其創新融合的 Java 與鴻蒙雙引擎&#xff0c;為下一代 B2C 商城技術標準勾勒出全新藍圖&#xff0c;在性能、兼容性、拓展性等關鍵維度實現了重大突破。 一、Java 技術…

關于 Web 漏洞原理與利用:3. CSRF(跨站請求偽造)

一、原理&#xff1a; 利用用戶登錄態偽造操作 CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站請求偽造&#xff09;是攻擊者“借刀殺人”&#xff0c;借用用戶瀏覽器中已有的登錄狀態&#xff0c;誘導用戶完成攻擊者指定的操作。 1. 基本機制分解 1&#xf…

【HTML5】【AJAX的幾種封裝方法詳解】

【HTML5】【AJAX的幾種封裝方法詳解】 AJAX (Asynchronous JavaScript and XML) 封裝是為了簡化重復的異步請求代碼&#xff0c;提高開發效率和代碼復用性。下面我將介紹幾種常見的 AJAX 封裝方式。 方法1. 基于原生 XMLHttpRequest 的封裝 XMLHttpRequest。其主要特點如下…

C++ - 網絡編程之初始連接(Winsock2 概述、初始連接案例、初始連接案例解讀)

一、Winsock2 概述 Winsock2&#xff08;Windows Sockets 2&#xff09;是微軟提供的 Windows 平臺網絡編程庫 二、初始連接案例 1、Server #include <winsock2.h> #include <ws2tcpip.h> #include <iostream>#pragma comment(lib, "ws2_32.lib&quo…

Spring Cloud Gateway深度解析:原理、架構與生產實踐

文章目錄 前言一、概述二、核心架構設計及設計原理2.1 分層架構模型網絡層&#xff08;I/O模型&#xff09;核心處理層 2.2 核心組件協作流程路由定位階段過濾器執行階段 2.3 響應式編程模型實現Reactor上下文傳遞背壓處理機制 2.4 動態路由設計原理2.5 異常處理體系2.6 關鍵路…

游戲開發實戰(一):Python復刻「崩壞星穹鐵道」嗷嗚嗷嗚事務所---源碼級解析該小游戲背后的算法與設計模式【純原創】

文章目錄 奇美拉項目游戲規則奇美拉(Chimeras)檔案領隊成員 結果展示&#xff1a; 奇美拉項目 由于項目工程較大&#xff0c;并且我打算把我的思考過程和實現過程中踩過的坑都分享一下&#xff0c;因此會分3-4篇博文詳細講解本項目。本文首先介紹下游戲規則并給出奇美拉檔案。…

說一下響應狀態碼有哪些?

HTTP響應狀態碼分類(RFC 7231標準) 1. 1xx(信息類) 臨時響應,表示請求已被接收,需要繼續處理 100 Continue:客戶端應繼續發送請求體 101 Switching Protocols:服務器同意升級協議(如WebSocket) 102 Processing(WebDAV):服務器正在處理但未完成 2. 2xx(成功類)…

Linux多進程 寫時拷貝 物理地址和邏輯地址

如果不采用寫時拷貝技術 直接fork子進程 會發生什么&#xff1f; 如上圖所示 橙色為父進程所占內存空間 綠色為子進程所占內存空間。 如果子進程只是需要做出一點點和父進程不一樣的 其余和父進程均為相同 第一 就會出現復制開銷比較大&#xff1b;第二占用內存空間 所以 …

【TTS回顧】Bert-VITS2深度解析:融合BERT的多語言語音合成模型

一、基本介紹 Bert-VITS2是基于VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的改進版本,通過整合BERT語義編碼能力,顯著提升了語音合成的自然度和表現力。項目地址:https://github.com/fishaudio/Bert-VITS2 語種自然度相似度流…