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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...