MySQL資料庫CRUD

来源:https://www.cnblogs.com/yjh1024/archive/2022/07/28/16530505.html
-Advertisement-
Play Games

#資料庫的CRUD語句 ##INSERT語句 ###在指定列中插入數據 INSERT INTO 表名 (column1,column2,column3,...) VALUES (value1,value2,value3,...); INSERT INTO website (url,country) ...


資料庫的CRUD語句

INSERT語句

在指定列中插入數據

INSERT INTO 表名 (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

INSERT INTO website (url,country)
VALUES ('https://www.baid.com',CN)

在所有的列中插入數據

列相關信息可以省略,但是要求按順序給所有欄位指定要添加的值
INSERT INTO 表名
VALUES (value1,value2,value3,...);

INSERT INTO website
VALUES (1,'百度','https://www.baid.com',CN)

UPDATE語句

UPDATE 表名
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
修改 WHERE 確定的某些記錄的列數據,如果沒有 WHERE,將修改所有記錄

//修改所有記錄
UPDATE employee
SET salary = 15000
//使用WHERE過濾
UPDATE employee
SET salary = salary*1.2,birthday = '2022-7-13'
WHERE name = '楓原萬葉'

DELETE語句

DELETE FROM 表名
WHERE some_column=some_value;
刪除 WHERE 確定的某些記錄,如果沒有 WHERE,將刪除所有記錄

DELETE FROM employee
WHERE salary = 15000

註意DELETE 語句是刪除一條記錄而不能刪除某一列的值,可以通過UPDATE 把值設置為 NULL' '

SELECT語句

SELECT [DISTINCT] * | {column1,column2,..,} FROM 表名

  • DISTINCT可選,表示是否去掉重覆數據。
  • * 表示查詢所有列,如果沒有 * ,需要指定要查詢的列名

使用表達式查詢

可以使用表達式對查詢的列數據進行運算。

//統計學生總分
SELECT `name`, (chinese+english+math) FROM student;

使用as指定別名

可以對查詢的表達式或者其它欄位指定一個別名,執行查詢語句後的輸出結構將用別名代替欄位名。

SELECT `name` AS '名字', (chinese + english + math + 10) AS total_score
    FROM student

使用where字句過濾查找

在where字句中使用的比較運算符

運算符 功能
>,<,=,>=,<> 大於,小於,等於,大於等於,不等於
BETWEEN ... AND ... 查找在某一區間的值
IN(SET) 查找在IN列表中的值
LIKE 模糊查詢,%表示0到多個字元,_表示一個任意字元
IS NULL 判斷是否為空
還有一些邏輯運算符,and、or、not
-- 比較查找
SELECT * FROM student WHERE english > 90
-- 區間查找,註意是閉區間
SELECT * FROM student WHERE english BETWEEN 80 AND 90
-- IN列表查找
SELECT * FROM student WHERE math IN (89, 90, 91);
-- 模糊查詢,查找姓張的人
SELECT * FROM student WHERE `name` LIKE '張%'
-- 日期用於比較
SELECT * FROM emp WHERE hiredate>'1992-01-01'

使用order by對查詢結構排序

ORDER BY column asc|desc

  • column 指定待排序的列名,列明也可以是之前as定義的別名
  • asc是升序排列,也是預設情況,desc是降序
  • 可以使用多次排序,即對前一個欄位相同的數據再根據後一個欄位進行排序
--降序排列
SELECT `name`, (chinese + english + math) AS total_score
    FROM student
        WHERE `name` LIKE '韓%' ORDER BY total_score desc;
-- 兩次排序
SELECT * FROM emp 
    ORDER BY deptno ASC,sal DESC;

統計函數

COUNT

返回符號條件的行數,即多少條符合條件的記錄
SELECT COUNT(*) | COUNT(列名) FROM 表名
如果指定了列名,COUNT 不會將空記錄計入到總數中。

//統計表中的所有記錄的條數
SELECT COUNT(*) FROM student;
//WHERE語句過濾
SELECT COUNT(*) FROM student WHERE math > 80;

SUM

求和函數,對符合的列數據相加求和,只能用於數值列
SELECT { SUM(列名), SUM(列名) ... } FROM 表名

SELECT SUM(math),SUM(english),SUM(chinese) FROM student;

AVG

對符合條件的列數據求平均值
SELECT {AVG(列名), AVG(列名) ...} FROM 表名

//各科成績求平均值
SELECT AVG(math + english + chinese) FROM student;

MAN/MIN

SELECT MAX(列名)/MIN(列名) FROM 表名

SELECT MAX(math), MIN(math) FROM student

分組查詢

使用GROUP BY分組

GROUP可以對數據按列進行分組,即列相同的放在同一組

-- 把員工按照部門進行分組,然後統計每個部門的平均薪資和最高工資
SELECT AVG(sal), MAX(sal) , deptno
FROM emp GROUP BY deptno

說明:GROUP BY分組後直接查詢獲得的是第一個該組成員,比如這裡部門號為10,如果有多個部門號為10的數據,只會輸出按照順序排第一的數據

使用HAVING過濾組

HAVING 對之前用GROUP BY分組得到的結果進行過濾

//對之前的分組過過濾掉平均薪資只有兩千的部門
SELECT AVG(sal), deptno
    FROM emp GROUP BY deptno
        HAVING AVG(sal) < 2000

字元串函數

使用字元串函數可以對查詢得到的字元串數據進行一些處理後輸出

函數 功能
CONCAT(string2,..) 連接列數據和指定的字元串
UCASE(string2) 字元串轉大寫
LCASE(string2) 字元串轉小寫
LENGHT(string) string長度(位元組)
REPLACE (str ,search_str ,replace_str ) 在 str 中用 replace_str 替換 search_str

數學函數

函數 功能
ABS (num) 求絕對值
CEILING (number2) 向上取整
FLOOR (number2) 向下取整
FORMAT (number,decimal_places ) 保留小數位數(四捨五入)
RAND(seed) 返回隨機數 其範圍為 0 ≤ v ≤ 1.0
    1. 如果使用 rand(), 每次返回不同的隨機數 ,在 0 ≤ v ≤ 1.0
    1. 如果使用 rand(seed) 返回隨機數, 範圍 0 ≤ v ≤ 1.0, 如果 seed 不變,該隨機數也不不會變

時間日期函數

加密函數-MD5()

MD5信息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值(hash value),相同的數據MD5加密後是一樣的,不同的數據加密後理論上存在相同的可能。

MySQL提供函數 MD5(str),計算一個給定字元串的 MD5 摘要,並將結果作為一個 32 位的由十六進位字元 組成的字元串返回。一個十六進位數據可以由4個二進位數據表示,正好128位數據。
通常我們將用戶密碼寫入資料庫時,保存的不是密碼的原文,而是對密碼進行加密後再保存到資料庫中,這樣可以防止當資料庫泄漏後,對方拿到的不是密碼的原文,賬號就不會被盜走。當驗證登錄時,用戶輸入密碼,對其進行MD5加密後與資料庫中保存的MD5值進行比較,相同則登錄成功。

-- 插入數據,對密碼‘yjh123456’進行加密
INSERT INTO `user` 
    VALUES(100,'yjh',MD5('yjh123456'))

流程式控制制函數

主要由兩種,用來對不同的數據作不同的處理

IF語句

語法:IF(exp1,exp2,exp3)
說明:exp1為True時返回exp2,否則返回exp3

-- 從emp表中查找數據comm為空時顯示0.0,否則顯示本身
SELECT ename,IF(comm IS NULL,0.0,comm) 
    FROM emp

註意:這裡判斷是否為空,要使用 IS NULL,不為空使用 IS NOT NULL

CASE語句

相當於條件分支語句,可以對更多的可能情況做處理
語法:
SELECT CASE
WHEN exp1 THEN exp2
WHEN exp2 THEN exp2
END;

SELECT ename,(SELECT CASE 
WHEN job = 'CLERK' THEN '職員' 
WHEN job='MANAGER' THEN '經理' 
WHEN job='SALESMAN'THEN'銷售人員'
ELSE job 
END) AS'job'--對整列重命名 
FROM emp;

分頁查詢

當我們查詢返回的記錄路條數過多,為了防止數據爆炸,可以使用分頁查詢,即查詢滿足條件的某幾條記錄
基本語法:
SELECT ...
LIMIT START ROWS;

作用,顯示從START + 1 開始的 ROWS 條記錄

多字句查詢

當查詢的要求比較複雜時,需要用到多條字句,這些字句的順序應該是:
SELECT column.. FROM table
WHERE exp
GROUP BY column
HAVING condition
ORDER BU colunm
LIMIT start, rows

多表查詢

有時候我們需要查兩個或兩個以上的表的數據,只需要在 FROM 後面多添加一個表名即可,在不作任何 WHRER字句過濾時,得到的是一個笛卡爾集,它將一個表的每一條記錄與其它表任何一條記錄組合,因此得到的總記錄數是每個表的記錄的乘積。

--使用where字句過濾多表查詢的結果
SELECT ename,sal,dname,emp.deptno
FROM emp,dept
WHERE emp.deptno = dept.deptno--出現相同欄位時,用表名.欄位

自連接

自連接是將同一張表當作兩張表來查詢,當我們需要兩次查詢一個欄位但是查詢的條件不一樣時我們可以使用自連接來解決問題。使用自連接由幾點需要註意:

  • 因為是兩張一樣的表,所以我們要分別為這兩張表指定別名,跟在表名後即可
  • 最後為列名也指定別名
--查詢員工的名字並且根據它的上級編號再查出上級的名字
SELECT worker.ename AS'職員名',boss.ename AS'上級名'
FROM emp worker,emp boss
WHERE worker.mgr = boss.empno;

子查詢

子查詢是指嵌入在其它 sql 語句中的 select 語句,也叫嵌套查詢,子查詢分為單行子查詢,多行子查詢,多列子查詢,同時子查詢結果還可以作為一張表使用。

單行子查詢

單行子查詢返回的是一行的查詢數據

-- 單行子查詢:顯示與 SMITH 同一部門的所有員工
SELECT *
FROM emp
WHERE deptno = (
SELECT deptno
FROM emp
WHERE ename = 'SMITH' )

多行子查詢

多行子查詢使用 IN 關鍵字

-- 如何查詢和部門 10 的工作相同的雇員的
SELECT ename, job, sal, deptno
FROM emp
WHERE job IN (
SELECT DISTINCT job
FROM emp
WHERE deptno = 10
) AND deptno <> 10

子查詢作為臨時表

可以把子查詢得到的結果作為一張表,然後進行多表查詢,這種查詢方式能夠解決很多複雜的查詢問題,目前展示一個見到那的的案例,以後有更多的體悟再來豐富一下。

--查詢 ecshop 中各個類別中,價格最高的商品
--先得到 各個類別中,價格最高的商品 max + group by cat_id, 當做臨時表
SELECT goods_id, ecs_goods.cat_id, goods_name, shop_price
FROM (SELECT cat_id , MAX(shop_price) AS max_price
        FROM ecs_goods
            GROUP BY cat_id) temp , ecs_goods
WhERE temp.cat_id = ecs_goods.cat_id
AND temp.max_price = ecs_goods.shop_price

註釋:關於這個查詢需求,一開始我以為直接用 MAX+分組就好了,但是輸出結果與目標不一致,這是因為這裡還要輸出商品號,商品號和這個最高價格不匹配,這是GROUP BY導致的,這裡的商品號其實是每一組第一個成員的商品號

多列子查詢

如果要求查詢結果對多個欄位有要求可以使用多列子查詢

-- 查詢與 allen 的部門和崗位完全相同的所有雇員(並且不含 allen 本人)
SELECT *
FROM emp
WHERE (deptno , job) = (
SELECT deptno , job
FROM emp
WHERE ename = 'ALLEN' ) AND ename != 'ALLEN

合併查詢

有時候為了多個查詢結構需要合併,可以使用集合操作符 UNION(去重), UNION ALL(不去重)

學習總結來源於韓順平老師一周學會MYSQL


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.依賴 在理解依賴註入之前,必須先理解其中的依賴是什麼。對於我們開發的程式而言,實際上就是通過不同類型的對象相互協作而構建成的應用,例如在訂單類中,就會引用商品類作為某個屬性。由於類於類之間存在這種引用關係,在類中就避免不了通過“new”對引用的外部類型進行實例化,對於這種現象就會促使應用程式代碼 ...
  • 1.iftop 以CentOS 7.8為例,先執行以下命令 yum install -y epel-release 安裝iftop yum install -y iftop iftop 界面相關說明 TX:發送流量 RX:接收流量 TOTAL:總流量 peak:流量峰值 rates:分別表示過去2s ...
  • GraphPad Prism 9 for Mac是一款專業的科研統計分析繪圖軟體,世界領先的科學家都在使用Prism 9 Mac,使用Prism 9 Mac版幫助您有效的分析、統計並繪製出直觀的圖形,幫您節省大量的時間,讓您更加專註於您的科研。 詳情:GraphPad Prism 9 for Mac ...
  • 前言 製作centos7無人值守安裝,在windows下也可以進行,但是由於U盤文件系統的問題,難免需要在windows和centos7下來回切換,進行配置,才能完成製作,比如主分區exfat格式用於存放ISO和ks.cfg文件通常情況下只能被windows讀取,centos7下讀取不到,掛載不上, ...
  • DxO PureRAW Mac版是發佈了,該軟體採用了智能技術,以解決影響所有RAW文件的七個問題:去馬賽克,降噪,波紋,變形,色差,不想要的漸暈,以及缺乏清晰度。 詳情:DxO PureRAW for mac(raw照片處理器) 功能特色 釋放Adobe Photoshop和Lightroom的R ...
  • 想給自己的照片變得高大上嗎?那就來試試這裡的DxO PhotoLab for Mac版raw圖片處理軟體吧。它可以隨時手動調整,控制照片的各個方面。dxo photolab mac版還能去除噪音有效地消除了光的限制,檢索顏色的細節,應用複雜的光學校正和增強細節。 詳情:DxO PhotoLab 5 ...
  • 換源(建議清華源或者阿裡源) sudo apt update sudo apt upgrade # 軟體升級 sudo apt dist-upgrade #內核更新 grub-customizer 引導控制工具 sudo add-apt-repository ppa:danielrichter200 ...
  • 一、電腦基礎和Linux基礎知識 1.馮諾依曼體繫結構 1946年美籍匈牙利數學家馮·諾依曼於提出存儲程式原理,把程式本身當作數據來對待,程式和該程式處理的數據用同樣的方式儲存。馮·諾依曼體系的要點是: 數字電腦的數制採用二進位,bit位, byte位元組1 byte = 8 bit 電腦應該按 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...