從入門到精通【MySQL】 CRUD

文章目錄

    • 📕1. Create 新增
        • ??1.1 單行數據全列插入
        • ??1.2 單行數據指定列插入
        • ??1.3 多行數據指定列插入
    • 📕2. Retrieve 檢索
        • ??2.1 全列查詢
        • ??2.2 指定列查詢
        • ??2.3 查詢字段為表達式
        • ??2.4 為查詢結果指定別名
        • ??2.5 結果去重查詢
    • 📕3. WHERE條件查詢
        • ??3.1 基本查詢
        • ??3.2 AND和OR
        • ??3.3 AND和OR的優先級
        • ??3.4 范圍查詢
        • ??3.5 模糊查詢
        • ??3.6 NULL的查詢
        • ??3.7 ORDER BY 排序
        • ??3.8 分頁查詢
    • 📕4. Update 修改
    • 📕5. Delete 刪除
        • ??5.1 普通Delete刪除
        • ??5.2 截斷表
        • ??5.3 插入查詢結果
    • 📕6. 聚合函數
    • 📕7. Group by 分組查詢
        • ??7.1 HAVING子句
    • 📕8. 內置函數
        • ??8.1 日期函數
        • ??8.2 字符串處理函數
        • ??8.3 數學函數
        • ??8.4 其他常用函數

📕1. Create 新增

INSERT INTO name(filed1,filed2……) VALUE(value1,value2……);
  • INSERT INTO 是插入關鍵字
  • INTO 一般都要寫,也可以省略
  • name為表名字
  • filed是要插入的列
  • value是要插入的值
??1.1 單行數據全列插入

值的數量必須和定義表的列的數量及順序一致

-- 創建一個用于演示的表
CREATE TABLE IF NOT EXISTS users(id BIGINT,`name` VARCHAR(20) COMMENT'用戶名稱' 
);-- 全列插入
INSERT INTO users VALUE(1,'張三');
INSERT INTO users VALUE(2,'李四');
??1.2 單行數據指定列插入
-- 指定了要插入的列
INSERT INTO users(id,`name`) VALUE(3,'艾米');
??1.3 多行數據指定列插入
INSERT INTO users(id,`name`) VALUE(5,'孫悟空'),(6,'豬八戒'),(7,  '唐僧');

📕2. Retrieve 檢索

SELECT 列名1,列名2 FROM 表名;
  • SELECT 為查詢關鍵字
  • 列名處是 * 的時候是查詢所有列(一般不建議,數據過多時會很慢)
??2.1 全列查詢
SELECT * FROM 表名;
??2.2 指定列查詢
SELECT 指定列名稱 FROM 表名;
??2.3 查詢字段為表達式
  1. 常量表達式
SELECT 10 FROM 表名;
  1. 把所有學生的語文成績加10分
SELECT Chinese+10 FROM 表名;
  1. 計算所有學生語文、數學和英語成績的總分
SELECT chinese+nath+english FROM  表名;
??2.4 為查詢結果指定別名
SELECT 列名1+列名2AS】 別名 FROM 表名;

AS可以省略,別名如果包含空格必須用單引號包裹

??2.5 結果去重查詢
SELECT DISTINCT 列名1,列名2 FROM 表名;

使用DISCTINCT去重時,只有查詢列表中所有列的值都相同才會判定為重復

📕3. WHERE條件查詢

SELECT 列名1,列名2 FROM 表名 WHERE 條件……;

比較運算符
在這里插入圖片描述
邏輯運算符
在這里插入圖片描述

??3.1 基本查詢
  1. 查詢英語不及格的同學及英語成績 ( < 60 )
SELECT id,name,english FROM exam WHERE english < 60;
  1. 查詢語文成績高于英語成績的同學
SELECT id,name,chinese,math FROM exam WHERE chinese > math;
  1. 總分在 200 分以下的同學
SELECT id,name,chinese+math+english FROM exam WHERE chinese+math+english < 200;
??3.2 AND和OR
  1. 查詢語文成績大于80分且英語成績大于80分的同學
SELECT id,name FROM exam WHERE chinese > 80 AND english > 80;
  1. 查詢語文成績大于80分或英語成績大于80分的同學
SELECT * FROM exam WHERE  chinese > 80 OR english > 80;
??3.3 AND和OR的優先級
select * from exam where chinese > 80 or math > 70 and english > 70;
select * from exam where (chinese > 80 or math > 70) and english > 70;

注意:AND的優先級高于OR,括號的優先級高于AND和OR。

??3.4 范圍查詢
  1. 語文成績在 [80, 90] 分的同學及語文成績
SELECT name,chinese FROM exam WHERE chinese >= 80 AND chinese <= 90;
SELECT name,chinese FROM exam WHERE BETWEEN chinese 80 AND 90;
  1. 數學成績是 78 或者 79 或者 98 或者 99 分的同學及數學成績
SELECT name,math FROM exam WHERE math = 78 OR math = 79 OR math = 98 OR math = 99;
SELECT name,math FROM exam WHERE IN (78,79,98,99);
??3.5 模糊查詢
  1. 查詢所有姓孫的同學
SELECT * FROM exam WHERE name LIKE '孫%';
  1. 查詢姓孫且姓名共有兩個字同學
SELECT * FROM exam WHERE name LIKE '孫_';
??3.6 NULL的查詢
  1. 查詢英語成績為NULL的記錄
SELECT * FROM exam WHERE english IS NULL;
  1. 查詢英語成績不為NULL的記錄
SELECT * FROM exam WHERE english IS NOT NULL;

💡💡💡💡💡💡💡💡💡💡💡💡注意事項💡💡💡💡💡💡💡💡💡💡💡

  1. WHERE條件中可以使用表達式,但不能使用別名
  2. AND的優先級高于OR,在同時使用時,建議使用小括號()包裹優先執行的部分
  3. 過濾NULL時不要使?等于號(=)與不等于號(!= , <>)
  4. NULL與任何值運算結果都為NULL
??3.7 ORDER BY 排序
-- ASC 為升序(從?到?
-- DESC 為降序(從?到?)
-- 默認為ASC
SELECT 列名1,列名2 FROM 表名 WHERE 條件 ORDER BY 列名 DESC/ASC;
  1. 按數學成績從低到高排序(升序)
SELECT * FROM exam ORDER BY math ASC;
  1. 查詢同學各門成績,依次按數學降序,英語升序,語文升序的方式顯示
SELECT * FROM exam ORDER BY math DESC,english ASC,chinese ASC;
  1. 查詢同學及總分,由高到低排序,可以使用列的別名進行排序
SELECT math+english+chinese AS 總分 FROM exam ORDER BY 總分 DESC;  
  1. 所有英語成績不為NULL的同學,按語文成績從高到低排序
SELECT * FROM exam WHERE english IS NOT NULL ORDER BY chinese DESC;

💡💡💡💡💡💡💡💡💡💡💡💡注意事項💡💡💡💡💡💡💡💡💡💡💡

  1. 查詢中沒有ORDER BY子句,返回的順序是未定義的,永遠不要依賴這個順序
  2. ORDER BY 子句中可以使用列的別名進行排序
  3. NULL 進行排序時,視為比任何值都小,升序出現在最上面,降序出現在最下面
??3.8 分頁查詢
-- 起始下標為 0
-- 從 0 開始,篩選 num 條結果
SELECT 列名 FROM 表名 ((WHERE 條件)(ORDER BY 列名 ASC/DESC)LIMIT num;   
-- 從 start 開始,篩選 num 條結果
SELECT 列名 FROM 表名 (WHERE 條件)(ORDER BY 列名 ASC/DESC)LIMIT start,num;   
-- 從 start 開始,篩選 num 條結果,?第?種?法更明確,建議使?
SELECT 列名 FROM 表名 (WHERE 條件)(ORDER BY 列名 ASC/DESC)LIMIT num OFFSET start;   

Tips:

  1. 總頁數 = 數據的總條數 / 每頁要展示的數量,如果有余數則 + 1.
  2. start = (當前頁號 - 1)* 每頁要展示的數量

📕4. Update 修改

UPDATE 表名 SET 修改值 (WHERE 條件)(ORDER BY 列名 ASC/DESC)(LIMIT num);

對符合條件的結果進行列值更新

  1. 將孫悟空同學的數學成績變更為 80 分
UPDATE exam SET math = 80 WHERE name = '孫悟空';
  1. 將曹孟德同學的數學成績變更為 60 分,語文成績變更為 70 分
UPDATE exam SET math = 60,chinese = 70 WHERE name = '曹孟德';
  1. 將總成績倒數前三的 3 位同學的數學成績加上 30 分
UPDATE exam SET math = math + 30 WHERE chinese+math+english IS NOT NULL ORDER  BY chinese+math+english ASC LIMIT 0,3
  1. 將所有同學的語文成績更新為原來的 2 倍
UPDATE exam SET Chinese= Chinese * 2;

💡💡💡💡💡💡💡💡💡💡💡💡注意事項💡💡💡💡💡💡💡💡💡💡💡

  1. 以原值的基礎上做變更時,不能使用math += 30這樣的語法
  2. 不加where條件時,會導致全表數據被列新,謹慎操作

📕5. Delete 刪除

??5.1 普通Delete刪除
DELETE FROM 表名 [WHERE 條件] [ORDER BY ...] [LIMIT count];
  • 刪除孫悟空同學的考試成績
DELETE FROM exam WHERE name = '孫悟空';

💡💡💡💡💡💡💡💡💡💡💡💡注意事項💡💡💡💡💡💡💡💡💡💡💡

執行Delete時不加條件會刪除整張表的數據,謹慎操作

??5.2 截斷表
TRUNCATE TABLE 表名;

🌰例如:

-- 準備測試表
CREATE TABLE t_truncate (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20)
);-- 插入新數據
INSERT INTO t_truncate (name) VALUES ('A'), ('B'), ('C');-- 此時查看建表結構,注意AUTO_INCREMENT=4-- 截斷表
TRUNCATE TABLE t_truncate;--繼續查看表結構,注意AUTO_INCREMENT已被重置為0

💡TRUNCATE 的注意事項:

  1. 只能對整表操作,不能像 DELETE ?樣針對部分數據
  2. 不對數據操作所以比DELETE更快,TRUNCATE在刪除數據的時候,不經過真正的事物
  3. 會重置 AUTO_INCREMENT 項,而DELETE不會
??5.3 插入查詢結果
INSERT INTO 表名 SELECT ...

🌰例如:刪除表中的重復記錄,重復的數據只能有一份

實現思路:原始表中的數據一般不會主動刪除,但是真正查詢時不需要重復的數據,如果每次查詢
都使用DISTINCT進行去重操作,會嚴重效率。可以創建一張與 t_recored 表結構相同的表,把去重的記錄寫入到新表中,以后查詢都從新表中查,這樣真實的數據不丟失,同時又能保證查詢效率

-- 創建測試表,并構造數據
CREATE TABLE t_recored (id int, name varchar(20));INSERT INTO t_recored VALUES
(100, 'aaa'),
(100, 'aaa'),
(200, 'bbb'),
(200, 'bbb'),
(200, 'bbb'),
(300, 'ccc');--創建?張新表,表結構與t_recored相同
create table t_recored_new like t_recored;-- 原表中的記錄去重后寫?到新表
insert into t_recored_new select distinct * from t_recored;

📕6. 聚合函數

常用聚合函數
在這里插入圖片描述

📕7. Group by 分組查詢

GROUP BY 子句的作用是通過一定的規則將一個數據集劃分成若干個小的分組,然后針對若干個
分組進行數據處理,比如使用聚合函數對分組進行統計。

SELECT 列名 FROM 表名 GROUP BY 列名 HAVING 條件; 
  1. 統計每個角色的人數
SELECT role,count(*) FROM emp GROUP BY role;
??7.1 HAVING子句

使用GROUP BY 對結果進行分組處理之后,對分組的結果進行過濾時,不能使用 WHERE 子句,而要使用 HAVING 子句

  1. 顯?平均工資低于1500的角色和它的平均工資
SELECT role,AVG(salary) FROM emp GROUP BY role HAVING AVG(salary) < 1500;

Having 與Where 的區別

?Having 用于對分組結果的條件過濾

? Where 用于對表中真實數據的條件過濾

📕8. 內置函數

??8.1 日期函數

u

??8.2 字符串處理函數

在這里插入圖片描述

??8.3 數學函數

在這里插入圖片描述

??8.4 其他常用函數

在這里插入圖片描述

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

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

相關文章

C++學習之云盤上傳文件列表下載

1.上傳打開文件操作 1. 注冊 客戶端 成功 {"code":"002"} 該用戶已存在 {"code":"003"} 失敗 {"code":"004"} 服務器 2. 登錄 客戶端 服務器 // url http: //127.0.0.1:80/reg // post 數據格式 …

OpenCV圖像拼接(5)用于計算一組圖像的特征點和描述符的函數computeImageFeatures()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::detail::computeImageFeatures 是 OpenCV 中用于計算一組圖像的特征點和描述符的函數&#xff0c;通常在圖像拼接或類似的任務中使用。這個函…

詳細解析格式化消息框的代碼

書籍&#xff1a;《windows程序設計(第五版)》的開始 環境&#xff1a;visual studio 2022 內容&#xff1a;格式化消息框 說明&#xff1a;以下內容大部分來自騰訊元寶。 封裝MessageBoxPrintf 在MessageBoxPrintf()中處理可變參數&#xff0c;通過va_list機制&#xff0c…

【SpringSecurity】詳細核心類與過濾器流程講解和封裝通用組件實戰

Spring Security 全面介紹 1. 什么是 Spring Security&#xff1f; Spring Security 是一個功能強大且高度可定制的認證和訪問控制框架&#xff0c;是保護基于 Spring 的應用程序的標準工具。它是一個專注于為 Java 應用程序提供認證和授權的框架&#xff0c;實際上它是 Spri…

淺談Qt事件子系統——以可拖動的通用Widget為例子

淺談Qt事件子系統——以可拖動的通用Widget為例子 這一篇文章是一個通過實現可拖動的通用Widget為引子簡單介紹一下我們的事件對象子系統的事情 代碼和所有的文檔 1&#xff1a;Qt側的API介紹和說明 ? 這個是每一個小項目的慣例&#xff0c;我會介紹大部分Qt程序中使用到的…

[入門]NUC13配置Ubuntu20.04詳細步驟

文章目錄 1. 安裝Ubuntu20.041.1 制作系統啟動盤1.1.1 下載鏡像文件1.1.2 配置啟動盤 1.2 安裝內存條、硬盤1.3 安裝系統 2. 網卡驅動配置2.1 關閉安全啟動2.2 安裝intel官方網卡驅動backport2.2.1 第四步可能會出現問題 2.3 ubuntu官方的驅動2.4 重啟 3. 軟件安裝3.1 錄屏軟件…

(七)Reactor響應式編程框架

一、簡介 Reactor 是運行在 JVM 上的編程框架&#xff0c;最大特點是完全非阻塞&#xff0c;能高效控制 “背壓”&#xff0c;簡單來說就是處理數據傳輸時速度不匹配的問題 。它能和 Java 8 里的一些功能直接搭配使用&#xff0c;像處理異步結果的 CompletableFuture、處理數據…

從邊緣到核心:群聯云防護如何重新定義安全加速邊界?

一、安全能力的全方位碾壓 1. 協議層深度防護 四層防御&#xff1a; 動態過濾畸形TCP/UDP包&#xff08;如SYN Flood&#xff09;&#xff0c;傳統CDN僅限速率控制。技術示例&#xff1a;基于AI的協議指紋分析&#xff0c;攔截異常連接模式。 七層防御&#xff1a; 精準識別業…

【Linux】Ubuntu 24.04 LTS 安裝 OpenJDK 8

目錄 通過 apt-get 直接安裝 JDK 1. 更新 apt 軟件源 2. 檢查 JDK 是否已安裝 3. 安裝OpenJDK 4. 檢查 JDK 是否成功安裝 5. 設置 JAVA_HOME 環境變量 找到需要設置的 Java 路徑 使用文本編輯器打開/etc/environment文件 添加 Java 安裝路徑 應用更改和驗證配置 通過…

Java 方法執行原理底層解析

java 文件經過javac編譯后&#xff0c;變成了存儲了一系列指令的.class文件。本文從指令層面分析Java 方法從解析、調用到執行的過程。 1 指令 一般格式&#xff1a;操作碼 [操作數1] [操作數2] ... 操作碼 1個字節的無符號整數&#xff08;范圍&#xff1a;0x00 ~ 0xFF&…

【數學建模】最大最小值模型詳解

數學建模中的最大最小值模型詳解 文章目錄 數學建模中的最大最小值模型詳解引言最大最小值模型的基本概念最大化問題最小化問題 常見的求解方法1. 微積分法2. 線性規劃3. 非線性規劃4. 動態規劃 實際應用案例案例1&#xff1a;生產規劃問題案例2&#xff1a;投資組合優化 最大最…

C#的List和DIctionary實現原理(手搓泛型類以及增刪查改等功能)

這里寫自定義目錄標題 ListDIctionary List MyList類&#xff1a;這是一個泛型類&#xff0c;能夠存儲任意類型的元素。 _items數組&#xff1a;用于實際存儲元素。 _size變量&#xff1a;記錄當前列表中的元素數量。 構造函數&#xff1a;初始化數組容量為 4。 Count屬性&…

Linux系統管理與編程08:任務驅動綜合應用

蘭生幽谷&#xff0c;不為莫服而不芳&#xff1b; 君子行義&#xff0c;不為莫知而止休。 [環境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet環境 [要求] zabbix6.0安裝環境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步驟] 3 …

數據結構之基本隊列-順序結構實現-初始化-判斷隊列是否為空(front=rear)-出隊-入隊-隊尾滿了,調整隊列-獲取隊頭元素

數據結構之基本隊列-順序結構實現-初始化-判斷隊列是否為空(frontrear)-出隊-入隊-隊尾滿了&#xff0c;調整隊列-獲取隊頭元素——完整可運行代碼 #include <stdio.h>#define MAXSIZE 100 typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int front;int…

基于LabVIEW的Windows平臺高速閉環控制

在Windows系統下&#xff0c;通過LabVIEW實現高速閉環控制面臨兩大核心挑戰&#xff1a;非實時操作系統的調度延遲與硬件接口的傳輸速度限制。以USB-6351&#xff08;NI USB-6351 DAQ卡&#xff09;為例&#xff0c;其理論采樣率可達1.25 MS/s&#xff08;單通道&#xff09;&a…

Java面試黃金寶典8

1. 什么是 Spring MVC 定義 Spring MVC 是 Spring 框架里用于構建 Web 應用程序的模塊&#xff0c;它嚴格遵循 MVC&#xff08;Model - View - Controller&#xff09;設計模式。這種設計模式把應用程序清晰地劃分成三個主要部分&#xff1a; Model&#xff08;模型&#xff0…

【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的 RESTful API 設計:從上手到骨折

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、開篇整活…

分享最近前端面試遇到的一些問題

前情提要&#xff08;分享個人情況&#xff0c;可以直接跳過&#xff09; 先說一下我的個人情況&#xff0c;我是2026屆的&#xff0c;目前是在找前端實習。 3月初&#xff0c;從3月3日開始在Boss上投簡歷。 分享我的個人故事&#xff0c;不想看可以直接滑到下面&#xff0c;…

rip 協議詳細介紹

以下是關于 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息協議&#xff09; 的詳細介紹&#xff0c;涵蓋其工作原理、版本演進、配置方法、優缺點及實際應用場景。 1. RIP 協議概述 類型&#xff1a;動態路由協議&#xff0c;基于距離矢量算法&#xff08…

scrapy入門(深入)

Scrapy框架簡介 Scrapy是:由Python語言開發的一個快速、高層次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站點并從頁面中提取結構化的數據&#xff0c;只需要實現少量的代碼&#xff0c;就能夠快速的抓取。 新建項目 (scrapy startproject xxx)&#xff1a;新建一個新的…