MySQL表的CURD使用
一、Create
創(chuàng)建一張學(xué)生表
1.1單行數(shù)據(jù)+全列插入
1.2多行數(shù)據(jù)+指定列插入
1.3插入否則更新主鍵沖突
唯一鍵沖突
可疑選擇性進(jìn)行同步更新操作:使用ON DUPLICATE KEY UPDATE
-- 0 row affected: 表中有沖突數(shù)據(jù),但沖突數(shù)據(jù)的值和 update 的值相等
-- 1 row affected: 表中沒有沖突數(shù)據(jù),數(shù)據(jù)被 插入
-- 2 row affected: 表中有沖突數(shù)據(jù),并且數(shù)據(jù)已經(jīng)被更新使用MySQL庫函數(shù)來獲取受到影響的數(shù)據(jù)行數(shù):SELECT ROW_COUNT();
1.4替換
- - 主鍵 或者 唯一鍵 沒有沖突,則直接插入;
-- 主鍵 或者 唯一鍵 如果沖突,則刪除后再插入
二、Retrieve
創(chuàng)建表結(jié)構(gòu)
插入數(shù)據(jù)
2.1 select列
2.1.1全列查詢
-- 通常情況下不建議使用 * 進(jìn)行全列查詢
-- 1. 查詢的列越多,意味著需要傳輸?shù)臄?shù)據(jù)量越大;
-- 2. 可能會(huì)影響到索引的使用。
2.1.2指定列查詢
指定列的順序不需要按定義表的順序來
2.1.3查詢字段為表達(dá)式
表達(dá)式不包含字段
表達(dá)式包含一個(gè)字段
表達(dá)式包含多個(gè)字段
2.1.4為查詢結(jié)果指定別名
SELECT column [AS] alias_name [...] FROM table_name;
2.1.5結(jié)果去重distinct關(guān)鍵字
2.2where條件
比較運(yùn)算符
運(yùn)算符 | 說明 |
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于, NULL 不安全,例如 NULL = NULL 的結(jié)果是 NULL |
<=> | 等于, NULL 安全,例如 NULL <=> NULL 的結(jié)果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 | 范圍匹配, [a0, a1] ,如果 a0 <= value <= a1 ,返回 TRUE(1) |
IN (option, ...) | 如果是 option 中的任意一個(gè),返回 TRUE(1) |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
LIKE | 模糊匹配, % 表示任意多個(gè)(包括 0 個(gè))任意字符; _ 表示任意一個(gè)字符 |
邏輯運(yùn)算符
運(yùn)算符 | 說明 |
AND | 多個(gè)條件必須都為 TRUE(1) ,結(jié)果才是 TRUE(1) |
OR | 任意一個(gè)條件為 TRUE(1), 結(jié)果為 TRUE(1) |
NOT | 條件為 TRUE(1) ,結(jié)果為 FALSE(0 |
2.3結(jié)果排序
- -- ASC 為升序(從小到大)
- -- DESC 為降序(從大到?。?/li>
- -- 默認(rèn)為 ASC
SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];
沒有order by返回的結(jié)果是未定義的
2.4篩選分頁結(jié)果
-- 起始下標(biāo)為 0 -- 從 s 開始,篩選 n 條結(jié)果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 從 0 開始,篩選 n 條結(jié)果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 從 s 開始,篩選 n 條結(jié)果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
按 id 進(jìn)行分頁,每頁 3 條記錄,分別顯示 第 1 、 2 、 3 頁
三、Update
UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]
對(duì)查詢到的結(jié)果進(jìn)行列值更新
更新為具體指
一次更新多個(gè)列
更新值為原值基礎(chǔ)上變更
沒有 WHERE 子句,則更新全表
四、Delete
4.1刪除數(shù)據(jù)
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
刪除“孫悟空”的數(shù)據(jù)
刪除整張表的數(shù)據(jù)
在刪除的基礎(chǔ)上再插入一條數(shù)據(jù),可見刪除數(shù)據(jù)并不會(huì)重置auto_increment項(xiàng)
4.2截?cái)啾?/h3>
TRUNCATE [TABLE] table_name
TRUNCATE [TABLE] table_name
只對(duì)整張表進(jìn)行操作,不能像delete一樣對(duì)部分?jǐn)?shù)據(jù)操作
實(shí)際上不對(duì)數(shù)據(jù)進(jìn)行操作,影響行數(shù)是0,所以比delete快,但是truncate在刪除數(shù)據(jù)時(shí),并不經(jīng)過真正的事務(wù),所以無法回滾
會(huì)重置auto_increment項(xiàng)
五、插入查詢結(jié)果
INSERT INTO table_name [(column [, column ...])] SELECT ...
案例:刪除表中的的重復(fù)復(fù)記錄,重復(fù)的數(shù)據(jù)只能有一份
創(chuàng)建一張空表 no_duplicate_table ,結(jié)構(gòu)和 duplicate_table 一樣
將 duplicate_table的去重?cái)?shù)據(jù)插入到no_duplicate_table
通過重命名表實(shí)現(xiàn)原子的去重操作
六、聚合函數(shù)
函數(shù) | 說明 |
COUNT([DISTINCT] expr) | 返回查詢到的數(shù)據(jù)的數(shù)量 |
SUM([DISTINCT] expr) | 返回查詢到的數(shù)字總和,不是數(shù)字沒有意義 |
AVG([DISTINCT] expr) | 返回查詢到的數(shù)字平均值,不是數(shù)字沒有意義 |
MAX([DISTINCT] expr) | 返回查詢到的數(shù)字最大值,不是數(shù)字沒有意義 |
MIN([DISTINCT] expr) | 返回查詢到的數(shù)字最小值,不是數(shù)字沒有意義 |
使用 * 做統(tǒng)計(jì),不受 NULL 影響
使用表達(dá)式做統(tǒng)計(jì)
NULL 不會(huì)計(jì)入結(jié)果
COUNT(math)統(tǒng)計(jì)的是全部的數(shù)學(xué)成績
統(tǒng)計(jì)去重的數(shù)學(xué)成績個(gè)數(shù)
統(tǒng)計(jì)數(shù)學(xué)成績總分
配合where條件使用
統(tǒng)計(jì)平均分
返回英語最高分
返回>70以上數(shù)學(xué)的最低分
七、group by子句的使用
在 select 中使用 group by 子句可以對(duì)指定列進(jìn)行分組查詢
案例
- 顯示每個(gè)部門的平均工資和最高工資: select deptno,avg(sal),max(sal) from EMP group by deptno;
- 顯示每個(gè)部門的每種崗位的最低工資和平均工資:select avg(sal),min(sal),job, deptno from EMP group by deptno, job;
- 顯示平均工資低于2000的部門和它的平均工資
統(tǒng)計(jì)各個(gè)部門的平均工資:
select avg(sal) from EMP group by deptno
having搭配group by使用,對(duì)group by的查詢結(jié)果進(jìn)行篩選:
select avg(sal) as myavg from EMP group by deptno having myavg<2000;
--having 經(jīng)常和 group by 搭配使用,作用是對(duì)分組進(jìn)行篩選,作用有些像 where
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql中FIND_IN_SET()和IN區(qū)別簡析
這篇文章主要介紹了Mysql中FIND_IN_SET()和IN區(qū)別簡析,設(shè)計(jì)實(shí)例代碼,具有一定參考價(jià)值。需要的朋友可以了解。2017-10-10MySQL查詢本周、上周、本月、上個(gè)月份數(shù)據(jù)的sql代碼
MySQL查詢的方式很多,下面為您介紹的MySQL查詢實(shí)現(xiàn)的是查詢本周、上周、本月、上個(gè)月份的數(shù)據(jù),如果您對(duì)MySQL查詢方面感興趣的話,不妨一看2012-11-11MySQL 8.0 驅(qū)動(dòng)與阿里druid版本兼容問題解決
MySQL 8.0 驅(qū)動(dòng)與阿里druid版本不兼容會(huì)導(dǎo)致有報(bào)錯(cuò)問題,本文就詳細(xì)的介紹一下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2021-07-07