主頁 > 資料庫 > MySQL 高級SQL操作(資料的增、刪、改、查)

MySQL 高級SQL操作(資料的增、刪、改、查)

2021-08-03 08:18:42 資料庫

文章目錄

  • 資料新增
    • 1、批量插入
    • 2、蠕蟲復制
    • 3、主鍵沖突
  • 資料查詢
    • 1、查詢選項 distinct
    • 2、欄位選擇&別名 as
    • 3、資料源 from
    • 4、where子句
    • 5、group by子句
    • 6、having子句
    • 7、order by子句
    • 8、limit子句
  • 資料更新
    • 1、限制更新
  • 資料洗掉
    • 1、限制洗掉
    • 2、清空資料

資料新增

1、批量插入

批量插入:是一種優化資料逐條插入的方式

  • 批量插入資料的語法與簡單資料插入的語法差不多

  • 批量插入分為兩種:

    • 全欄位批量插入: insert into 表名 values(值串列1),(值串列2),...(值串列N);
    • 部分欄位批量插入(注意欄位默認值): insert into 表名 (欄位串列) values (值串列1),(值串列2),...(值串列N);
  • 批量插入可以針對性解決資料的批量匯入之類的業務,可以一次性解決多條資料插入,能夠有效降低客戶端占用問題,提升資料操作效率

    • MySQL8以后默認有事務安全,即批量要么都成功要么都失敗,不會出現部分問題

示例

1、批量插入學生成績(t_1全欄位)

insert into t_1 values(null,'Tom','Computer',90),(null,'Lily','Computer',92);

2、批量插入學生考試資訊(t_1不包含成績)

insert into t_1 (stu_name,course) values('Tony','English'),('Ray','Math');

2、蠕蟲復制

蠕蟲復制:從已有表中復制資料直接插入到另外一張表(同一張表)

  • 蠕蟲復制的目標是快速增加表中的資料

    • 實作表中資料復制(用于資料備份或者遷移)
    • 實作資料的指數級遞增(多用于測驗)
  • 蠕蟲復制語法:insert into 表名 [(欄位串列)] select 欄位串列 from 表名;

  • 注意事項:

    • 欄位串列必須對應上
    • 欄位型別必須匹配上
    • 資料沖突需要事先考慮

示例

1、創建一張新表,將t_1表中的資料遷移到新表t_2中

create table t_1(
	id int primary key auto_increment,
    stu_name varchar(20) not null,
    course varchar(20) not null,
    score decimal(5,2)
)charset utf8;

insert into t_2 select * from t_1;

2、快速讓t_2表中的資料增長(重復執行)

insert into t_2 (stu_name,course,score) select stu_name,course,score from t_2;

3、主鍵沖突

主鍵沖突:在資料進行插入時包含主鍵指定,而主鍵在資料表已經存在

  • 主鍵沖突的業務通常是發生在業務主鍵上(業務主鍵本身有業務意義)

  • 主鍵沖突的解決方案:

    • 忽略沖突:保留原始記錄: insert ignore into 表名 [(欄位串列)] values(值串列);
    • 沖突更新:沖突后部分欄位變成更新: insert into 表名 [(欄位串列)] values(值串列) on duplicate key update 欄位 = 新值[,欄位=新值...];
    • 沖突替換:先洗掉原有記錄,后新增記錄: replace into 表名 [(欄位串列)] values(值串列); # 效率沒有insert高(需要檢查是否沖突)
  • 從效率上來講,insert into不考慮沖突的效率最高,三種解決沖突的方式都會有效率下降(需要檢索),其中三種本身的效率依次是:忽略新資料 > 更新部分資料 > 替換全部

示例

1、用戶名作為主鍵的用戶注冊(沖突不能覆寫):username,password,regtime

create table t_3(
	username varchar(50) primary key,
    password char(32) not null,
    regtime int unsigned not null
)charset utf8;

insert into t_3 values('username','password',12345678);
# 沖突忽略
insert ignore into t_3 values('username','12345678',12345678);

2、用戶名作為主鍵的記錄用戶使用資訊(不存在新增、存在則更新時間):username,logintime

create table t_4(
	username varchar(50) primary key,
    logintime int unsigned
)charset utf8;

insert into t_4 values('username',12345678);	# 當前時間戳

# 沖突更新(替換部分欄位資料)
insert into t_4 values('username',12345678) on duplicate key update logintime = unix_timestamp();	# 當前時間戳
  • 如果主鍵不沖突:新增
  • 如果主鍵沖突:更新指定欄位
  • 上述方式適用于欄位較多,但是可能沖突時資料變化的欄位較少

3、用戶名作為主鍵的記錄用戶使用資訊(不存在新增、存在則更新全部):username,logintime、clientinfo

create table t_5(
	username varchar(50) primary key,
    logintime int unsigned,
    clientinfo varchar(255) not null
)charset utf8;

insert into t_5 values('username',unix_timestamp(),'{PC:chrome}');

# 替換插入
replace into t_5 values('username',unix_timestamp(),'{phone:uc}');
  • replace遇到主鍵重復就會先洗掉、后新增
  • 如果有較多欄位需要更新:建議使用替換

資料查詢

1、查詢選項 distinct

查詢選項:用于對查詢結果進行簡單資料篩選

  • 查詢選項是在select關鍵字之后,有兩個互斥值
    • all默認,表示保留所有記錄(關鍵字可以沒有)
    • distinct:去重,重復的記錄(針對所選欄位構成的記錄,而不是某個欄位)

示例

1、查看商品表中所有品類的商品資訊:重復的商品只保留一次(名字、價格、屬性都一致)

create table t_6(
	id int primary key auto_increment,
    goods_name varchar(50) not null,
    goods_price decimal(10,2) default 0.00,
    goods_color varchar(20),
    goods_weight int unsigned comment '重量,單位克'
)charset utf8;

insert into t_6 values(null,'mate10',5499.00,'blue',320),
(null,'mate10',5499.00,'gray',320),
(null,'nokia3301',1299,'black',420);

# 考慮所有欄位的去重(不含邏輯主鍵)
select distinct goods_name,goods_price,goods_color,goods_weight from t_6;
select goods_name,goods_price,goods_color,goods_weight from t_6; # 保留所有

# 不考慮顏色去重
select distinct goods_name,goods_price,goods_weight from t_6;
select all goods_name,goods_price,goods_weight from t_6;

2、欄位選擇&別名 as

欄位選擇:根據實際需求選擇的要獲取資料的欄位資訊

  • 根據實際需求,明確所需要的欄位名字,使用英文逗號,分隔

  • 獲取所有欄位,使用星號*通配所有欄位

  • 欄位資料可以不一定是來自資料源(select只要有結果即可)

    • 資料常量:select 1
    • 函式或者變數:select unix_timestamp(),@@version (@@是系統變數的前綴,后面跟變數名)
  • 欄位的選擇只要在保證資料需求能實作的情況下,盡可能少使用*代替(MySQL優化)

    • 減少服務器的資料讀取壓力
    • 減少網路傳輸壓力
    • 讓客戶端能夠精確決議資料(不用大海撈針)

欄位別名:給欄位取的臨時名字

  • 欄位別名使用as語法實作:
    • 欄位名 as 別名
    • 欄位名 別名
  • 欄位別名的目的通常為了保護資料
    • 欄位沖突:多張表同時操作有同名欄位(系統默認覆寫),想保留全部
    • 資料安全:對外提供資料不使用真實欄位名字
  • 欄位別名的靈活使用一方面可以保證原始資料的安全,也可以為資料使用者提供便利
    • 同名欄位覆寫問題(連表操作學習時會遇到)
    • 原始欄位保護
    • 資料欄位的簡化
  • select是SQL中用于取出資料的一種指令,這種指令未必一定需要從資料表取出資料,只要是本身能夠有資料的運算式,都可以使用select獲取

示例

1、查詢商品資訊

# 全部查詢
select * from t_6;

# 需求為商品名字和價格
select goods_name,goods_price from t_6;

# 別名使用
select goods_name as gn,goods_price gp from t_6;

2、不需要資料源的資料獲取:select的運算式本身能算出結果)

# 獲取當前時間戳和版本號
select unix_timestamp() as now,@@version as version,@@version;

3、資料源 from

資料源from關鍵字之后,資料的來源,只要最終結果是一個二維表,都可以當做資料源

  • 單表資料源:資料源就是一張表 from 表名

  • 多表資料源:資料來源是多張表(逗號分隔) from 表名1,表名2,...表名N

  • 子查詢資料源:資料來源是一個查詢結果 from (select 欄位串列 from 表名) as 別名

    • 資料源要求必須是一個
    • 如果是查詢結果必須給起一個表別名
  • 資料表也可以指定別名

    • 表名 as 別名
    • 表名 別名
  • 資料源是為查詢、檢索提供資料支持的,使用時需要明確指定

  • 通常情況下資料源不會使用簡單的多表資料源(笛卡爾積)

  • 資料表的別名在負責SQL查詢操作時非常有用,而且有些地方是必須使用(如子查詢資料源)

示例

1、單表資料源:最簡單的資料源,直接從一個資料表獲取

select * from t_7;

2、多表資料源:利用一張表的一條資料匹配另外一張表的所有記錄,記錄結果為:

  • 記錄數 = 表1記錄數 * 表2記錄數
  • 欄位數 = 表1欄位數 + 表2欄位數(笛卡爾積)
select * from t_7,t_8;

3、子查詢資料源:資料來源是一個select對應的查詢結果

  • 查詢陳述句需要使用括號包裹
  • 查詢結果需要指定別名
select * from (select * from t_7,t_8) t; # 資料有沖突查不出來
select * from (select * from t_7) as t;

4、如果有時候名字較長或者使用不方便,可以利用表別名

select * from t_1 as t;

select t1.*,t2.stu_name from t_1 as t1,t_2 t2;
  • 一般情況下別名設定是為了后續條件中可以直接使用別名
  • 如果多表操作下,可以使用表別名來明確提取表欄位

4、where子句

where子句:跟在from資料源之后,對資料進行條件匹配,篩選資料的

  • where是在磁盤讀取后,進入記憶體之前進行篩選
    • 不符合條件的資料不會進入記憶體
  • where篩選的內容因為還沒進入記憶體,所以資料是沒有被加工過
    • 欄位別名不能在where中使用

示例

1、查詢t_5表中學生為lily的成績資訊

select * from t_5 where stu_name = 'Lily';

2、因為where是在磁盤取資料時進行條件篩選,此時資料沒有進入記憶體,所以欄位別名是無效的

# 錯誤 
select stu_name name,score from t_5 where name = 'Lily';

運算子:用于進行運算的符號

  • 運算子可以用來進行欄位資料運算,配合where進行條件篩選
  • 比較運算子
    • >(大于)、<(小于)、=(等于)、>=(大于等于)、<=(小于等于)、<>(不等于)
    • between A and B:A和B之間(A小于B),包括A和B本身(數值比較)
    • in (資料1,資料2,...資料N):在列舉的資料之中
    • like 'pattern':像上面樣的,用于字串比較
      • _:單下劃線,匹配對應位置的一個任意字符(ab_:ab開頭+一個字符,匹配abc,ab1,但不能匹配abcd)
      • %:匹配當前位置(往后)任意數量任意字符(ab%:ab開頭+任意數量任意字符,匹配abc,ab1,abcd)
  • 邏輯運算子
    • and(邏輯與)、or(邏輯或)、not(邏輯非)
  • null運算子
    • is null(為空)、is not null(不為空)

示例

1、查詢成績不及格的所有學生資訊

# 成績條件:成績是數值,又是比大小,可以直接使用比較運算子
select * from t_5 where score < 60;

2、查詢成績在60-90間的學生資訊

# 成績條件:區間60到90,可以有兩種解決方案
select * from t_5 where score between 60 and 90;
select * from t_5 where score >= 60 and score <= 90;

3、查詢還沒有成績的學生

# 成績條件:成績為null,所以不能用比較符號查,只能使用is null實作
select * from t_5 where score is null;

5、group by子句

group by子句:分組統計,根據某個欄位將所有的結果分類,并進行資料統計分析

  • 分組的目的不是為了顯示資料,一定是為了統計資料
  • group by 子句一定是出現在where子句之后(如果同時存在)
  • 分組統計可以進行統計細分:先分大組,然后大組分小組

聚合函式:

  • 分組統計需要使用統計函式:
    • group_concat():將組里的某個欄位全部保留
    • any_value():不屬于分組欄位的任意一個組里的值
    • count():求對應分組的記錄數量
      • count(欄位名):統計某個欄位值的數量(NULL不統計)
      • count(*):統計整個記錄的數量(較多)
    • sum():求對應分組中某個欄位是和
    • max()/min():求對應分組中某個欄位的最大/最小值
    • avg():求對應分組中某個欄位的平均值
  • 分組統計使用資料資料的查詢只能依賴統計函式和被分組欄位,而不能是其他欄位(MySQL7以前可以,不過資料沒意義:因為系統只保留組里的第一個)

示例

1、創建一張表,存盤學生資訊

create table t_0(
	id int primary key auto_increment,
	name varchar(10) not null,gender enum('男','女','保密'),
	age tinyint unsigned not null,
	class_name varchar(10) not null comment '班級名稱'
)charset utf8;

insert into t_0 values
(null,'鳴人','男',18,'木葉1班'),(null,'佐助','男',18,'木葉1班'),(null,'佐井','男',19,'木葉2班'),
(null,'大蛇丸','男',28,'木葉0班'),(null,'卡卡西','男',29,'木葉0班'),(null,'小櫻','女',18,'木葉1班'),
(null,'雛田','女',18,'木葉1班'),(null,'我愛羅','男',19,'木葉1班'),(null,'向日葵','女',6,'木葉10班'),
(null,'博人','男',8,'木葉10班'),(null,'鼬','男',28,'木葉0班');

2、統計每個班的人數

select count(*),class_name from t_0 group by class_name;

3、多分組:統計每個班的男女學生數量

select count(*),class_name,gender from t_0 group by class_name,gender;

4、統計每個班里的人數,并記錄班級學生的名字

select count(*),group_concat(name),class_name from t_0 group by class_name;
select count(*),any_value(name),class_name from t_0 group by class_name;

分組原理:

以統計班級學生為例

<style>#mermaid-svg-mO7XzBkDgVyekeiZ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .label text{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .node rect,#mermaid-svg-mO7XzBkDgVyekeiZ .node circle,#mermaid-svg-mO7XzBkDgVyekeiZ .node ellipse,#mermaid-svg-mO7XzBkDgVyekeiZ .node polygon,#mermaid-svg-mO7XzBkDgVyekeiZ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-mO7XzBkDgVyekeiZ .node .label{text-align:center;fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .node.clickable{cursor:pointer}#mermaid-svg-mO7XzBkDgVyekeiZ .arrowheadPath{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-mO7XzBkDgVyekeiZ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-mO7XzBkDgVyekeiZ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-mO7XzBkDgVyekeiZ .edgeLabel rect{opacity:0.9}#mermaid-svg-mO7XzBkDgVyekeiZ .edgeLabel span{color:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-mO7XzBkDgVyekeiZ .cluster text{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-mO7XzBkDgVyekeiZ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-mO7XzBkDgVyekeiZ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-mO7XzBkDgVyekeiZ .actor-line{stroke:grey}#mermaid-svg-mO7XzBkDgVyekeiZ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-mO7XzBkDgVyekeiZ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .sequenceNumber{fill:#fff}#mermaid-svg-mO7XzBkDgVyekeiZ #sequencenumber{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .messageText{fill:#333;stroke:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-mO7XzBkDgVyekeiZ .labelText,#mermaid-svg-mO7XzBkDgVyekeiZ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-mO7XzBkDgVyekeiZ .loopText,#mermaid-svg-mO7XzBkDgVyekeiZ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-mO7XzBkDgVyekeiZ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-mO7XzBkDgVyekeiZ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-mO7XzBkDgVyekeiZ .noteText,#mermaid-svg-mO7XzBkDgVyekeiZ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-mO7XzBkDgVyekeiZ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-mO7XzBkDgVyekeiZ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-mO7XzBkDgVyekeiZ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-mO7XzBkDgVyekeiZ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .section{stroke:none;opacity:0.2}#mermaid-svg-mO7XzBkDgVyekeiZ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-mO7XzBkDgVyekeiZ .section2{fill:#fff400}#mermaid-svg-mO7XzBkDgVyekeiZ .section1,#mermaid-svg-mO7XzBkDgVyekeiZ .section3{fill:#fff;opacity:0.2}#mermaid-svg-mO7XzBkDgVyekeiZ .sectionTitle0{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .sectionTitle1{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .sectionTitle2{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .sectionTitle3{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-mO7XzBkDgVyekeiZ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .grid path{stroke-width:0}#mermaid-svg-mO7XzBkDgVyekeiZ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-mO7XzBkDgVyekeiZ .task{stroke-width:2}#mermaid-svg-mO7XzBkDgVyekeiZ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .taskText:not([font-size]){font-size:11px}#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-mO7XzBkDgVyekeiZ .task.clickable{cursor:pointer}#mermaid-svg-mO7XzBkDgVyekeiZ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-mO7XzBkDgVyekeiZ .taskText0,#mermaid-svg-mO7XzBkDgVyekeiZ .taskText1,#mermaid-svg-mO7XzBkDgVyekeiZ .taskText2,#mermaid-svg-mO7XzBkDgVyekeiZ .taskText3{fill:#fff}#mermaid-svg-mO7XzBkDgVyekeiZ .task0,#mermaid-svg-mO7XzBkDgVyekeiZ .task1,#mermaid-svg-mO7XzBkDgVyekeiZ .task2,#mermaid-svg-mO7XzBkDgVyekeiZ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutside0,#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutside2{fill:#000}#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutside1,#mermaid-svg-mO7XzBkDgVyekeiZ .taskTextOutside3{fill:#000}#mermaid-svg-mO7XzBkDgVyekeiZ .active0,#mermaid-svg-mO7XzBkDgVyekeiZ .active1,#mermaid-svg-mO7XzBkDgVyekeiZ .active2,#mermaid-svg-mO7XzBkDgVyekeiZ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-mO7XzBkDgVyekeiZ .activeText0,#mermaid-svg-mO7XzBkDgVyekeiZ .activeText1,#mermaid-svg-mO7XzBkDgVyekeiZ .activeText2,#mermaid-svg-mO7XzBkDgVyekeiZ .activeText3{fill:#000 !important}#mermaid-svg-mO7XzBkDgVyekeiZ .done0,#mermaid-svg-mO7XzBkDgVyekeiZ .done1,#mermaid-svg-mO7XzBkDgVyekeiZ .done2,#mermaid-svg-mO7XzBkDgVyekeiZ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-mO7XzBkDgVyekeiZ .doneText0,#mermaid-svg-mO7XzBkDgVyekeiZ .doneText1,#mermaid-svg-mO7XzBkDgVyekeiZ .doneText2,#mermaid-svg-mO7XzBkDgVyekeiZ .doneText3{fill:#000 !important}#mermaid-svg-mO7XzBkDgVyekeiZ .crit0,#mermaid-svg-mO7XzBkDgVyekeiZ .crit1,#mermaid-svg-mO7XzBkDgVyekeiZ .crit2,#mermaid-svg-mO7XzBkDgVyekeiZ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-mO7XzBkDgVyekeiZ .activeCrit0,#mermaid-svg-mO7XzBkDgVyekeiZ .activeCrit1,#mermaid-svg-mO7XzBkDgVyekeiZ .activeCrit2,#mermaid-svg-mO7XzBkDgVyekeiZ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-mO7XzBkDgVyekeiZ .doneCrit0,#mermaid-svg-mO7XzBkDgVyekeiZ .doneCrit1,#mermaid-svg-mO7XzBkDgVyekeiZ .doneCrit2,#mermaid-svg-mO7XzBkDgVyekeiZ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-mO7XzBkDgVyekeiZ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-mO7XzBkDgVyekeiZ .milestoneText{font-style:italic}#mermaid-svg-mO7XzBkDgVyekeiZ .doneCritText0,#mermaid-svg-mO7XzBkDgVyekeiZ .doneCritText1,#mermaid-svg-mO7XzBkDgVyekeiZ .doneCritText2,#mermaid-svg-mO7XzBkDgVyekeiZ .doneCritText3{fill:#000 !important}#mermaid-svg-mO7XzBkDgVyekeiZ .activeCritText0,#mermaid-svg-mO7XzBkDgVyekeiZ .activeCritText1,#mermaid-svg-mO7XzBkDgVyekeiZ .activeCritText2,#mermaid-svg-mO7XzBkDgVyekeiZ .activeCritText3{fill:#000 !important}#mermaid-svg-mO7XzBkDgVyekeiZ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-mO7XzBkDgVyekeiZ g.classGroup text .title{font-weight:bolder}#mermaid-svg-mO7XzBkDgVyekeiZ g.clickable{cursor:pointer}#mermaid-svg-mO7XzBkDgVyekeiZ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-mO7XzBkDgVyekeiZ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-mO7XzBkDgVyekeiZ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-mO7XzBkDgVyekeiZ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-mO7XzBkDgVyekeiZ .dashed-line{stroke-dasharray:3}#mermaid-svg-mO7XzBkDgVyekeiZ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ .commit-id,#mermaid-svg-mO7XzBkDgVyekeiZ .commit-msg,#mermaid-svg-mO7XzBkDgVyekeiZ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-mO7XzBkDgVyekeiZ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-mO7XzBkDgVyekeiZ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-mO7XzBkDgVyekeiZ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-mO7XzBkDgVyekeiZ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-mO7XzBkDgVyekeiZ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-mO7XzBkDgVyekeiZ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-mO7XzBkDgVyekeiZ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-mO7XzBkDgVyekeiZ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-mO7XzBkDgVyekeiZ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-mO7XzBkDgVyekeiZ .edgeLabel text{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mO7XzBkDgVyekeiZ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-mO7XzBkDgVyekeiZ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-mO7XzBkDgVyekeiZ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-mO7XzBkDgVyekeiZ .note-edge{stroke-dasharray:5}#mermaid-svg-mO7XzBkDgVyekeiZ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-mO7XzBkDgVyekeiZ .error-icon{fill:#522}#mermaid-svg-mO7XzBkDgVyekeiZ .error-text{fill:#522;stroke:#522}#mermaid-svg-mO7XzBkDgVyekeiZ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-mO7XzBkDgVyekeiZ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-mO7XzBkDgVyekeiZ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-mO7XzBkDgVyekeiZ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-mO7XzBkDgVyekeiZ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-mO7XzBkDgVyekeiZ .marker{fill:#333}#mermaid-svg-mO7XzBkDgVyekeiZ .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style> <style>#mermaid-svg-mO7XzBkDgVyekeiZ { color: rgba(0, 0, 0, 0.75); font: ; }</style>
木葉1班
木葉2班
木葉0班
木葉10班
獲取資料后分組開始
匹配班級名字分組
木葉1班組
鳴人
佐助
小櫻
雛田
我愛羅
木葉2班組
佐井
木葉0班組
大蛇丸
卡卡西
木葉10班組
博人
向日葵
統計結果
只對結果負責
結果就是函式,而函式只對小組作業
木葉1班組5人 木葉2班組1人 木葉0班組3人 木葉10班組2人
回傳結果
分組結束

回溯統計:在進行分組時(通常是多分組),每一次結果的回溯都進行一次匯總統計

  • 回溯統計語法:在統計之后使用 with rollup
  • 回溯統計一般用在多欄位分組中,用來統計各級分組的匯總資料
  • 因為回溯統計會將對應的分組欄位置空(不置空無法合并),所以回溯的資料還需要經過其他程式語言加工處理才能取出資料來

示例

統計每個班的男女同學數量,同時要知道班級人數總數

# 只統計每個班的男女同學數量,沒有班級匯總
select count(*),class_name,gender,group_concat(name) from t_40 group by class_name,gender;
# 匯總統計:回溯
select count(*),class_name,gender,group_concat(name) from t_40 group by class_name,gender with rollup;

回溯統計原理:

<style>#mermaid-svg-56l0PShgZgx8G0BF .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-56l0PShgZgx8G0BF .label text{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .node rect,#mermaid-svg-56l0PShgZgx8G0BF .node circle,#mermaid-svg-56l0PShgZgx8G0BF .node ellipse,#mermaid-svg-56l0PShgZgx8G0BF .node polygon,#mermaid-svg-56l0PShgZgx8G0BF .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-56l0PShgZgx8G0BF .node .label{text-align:center;fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .node.clickable{cursor:pointer}#mermaid-svg-56l0PShgZgx8G0BF .arrowheadPath{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-56l0PShgZgx8G0BF .flowchart-link{stroke:#333;fill:none}#mermaid-svg-56l0PShgZgx8G0BF .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-56l0PShgZgx8G0BF .edgeLabel rect{opacity:0.9}#mermaid-svg-56l0PShgZgx8G0BF .edgeLabel span{color:#333}#mermaid-svg-56l0PShgZgx8G0BF .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-56l0PShgZgx8G0BF .cluster text{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-56l0PShgZgx8G0BF .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-56l0PShgZgx8G0BF text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-56l0PShgZgx8G0BF .actor-line{stroke:grey}#mermaid-svg-56l0PShgZgx8G0BF .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-56l0PShgZgx8G0BF .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-56l0PShgZgx8G0BF #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-56l0PShgZgx8G0BF .sequenceNumber{fill:#fff}#mermaid-svg-56l0PShgZgx8G0BF #sequencenumber{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF #crosshead path{fill:#333;stroke:#333}#mermaid-svg-56l0PShgZgx8G0BF .messageText{fill:#333;stroke:#333}#mermaid-svg-56l0PShgZgx8G0BF .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-56l0PShgZgx8G0BF .labelText,#mermaid-svg-56l0PShgZgx8G0BF .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-56l0PShgZgx8G0BF .loopText,#mermaid-svg-56l0PShgZgx8G0BF .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-56l0PShgZgx8G0BF .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-56l0PShgZgx8G0BF .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-56l0PShgZgx8G0BF .noteText,#mermaid-svg-56l0PShgZgx8G0BF .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-56l0PShgZgx8G0BF .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-56l0PShgZgx8G0BF .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-56l0PShgZgx8G0BF .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-56l0PShgZgx8G0BF .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .section{stroke:none;opacity:0.2}#mermaid-svg-56l0PShgZgx8G0BF .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-56l0PShgZgx8G0BF .section2{fill:#fff400}#mermaid-svg-56l0PShgZgx8G0BF .section1,#mermaid-svg-56l0PShgZgx8G0BF .section3{fill:#fff;opacity:0.2}#mermaid-svg-56l0PShgZgx8G0BF .sectionTitle0{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .sectionTitle1{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .sectionTitle2{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .sectionTitle3{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-56l0PShgZgx8G0BF .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .grid path{stroke-width:0}#mermaid-svg-56l0PShgZgx8G0BF .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-56l0PShgZgx8G0BF .task{stroke-width:2}#mermaid-svg-56l0PShgZgx8G0BF .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .taskText:not([font-size]){font-size:11px}#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-56l0PShgZgx8G0BF .task.clickable{cursor:pointer}#mermaid-svg-56l0PShgZgx8G0BF .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-56l0PShgZgx8G0BF .taskText0,#mermaid-svg-56l0PShgZgx8G0BF .taskText1,#mermaid-svg-56l0PShgZgx8G0BF .taskText2,#mermaid-svg-56l0PShgZgx8G0BF .taskText3{fill:#fff}#mermaid-svg-56l0PShgZgx8G0BF .task0,#mermaid-svg-56l0PShgZgx8G0BF .task1,#mermaid-svg-56l0PShgZgx8G0BF .task2,#mermaid-svg-56l0PShgZgx8G0BF .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutside0,#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutside2{fill:#000}#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutside1,#mermaid-svg-56l0PShgZgx8G0BF .taskTextOutside3{fill:#000}#mermaid-svg-56l0PShgZgx8G0BF .active0,#mermaid-svg-56l0PShgZgx8G0BF .active1,#mermaid-svg-56l0PShgZgx8G0BF .active2,#mermaid-svg-56l0PShgZgx8G0BF .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-56l0PShgZgx8G0BF .activeText0,#mermaid-svg-56l0PShgZgx8G0BF .activeText1,#mermaid-svg-56l0PShgZgx8G0BF .activeText2,#mermaid-svg-56l0PShgZgx8G0BF .activeText3{fill:#000 !important}#mermaid-svg-56l0PShgZgx8G0BF .done0,#mermaid-svg-56l0PShgZgx8G0BF .done1,#mermaid-svg-56l0PShgZgx8G0BF .done2,#mermaid-svg-56l0PShgZgx8G0BF .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-56l0PShgZgx8G0BF .doneText0,#mermaid-svg-56l0PShgZgx8G0BF .doneText1,#mermaid-svg-56l0PShgZgx8G0BF .doneText2,#mermaid-svg-56l0PShgZgx8G0BF .doneText3{fill:#000 !important}#mermaid-svg-56l0PShgZgx8G0BF .crit0,#mermaid-svg-56l0PShgZgx8G0BF .crit1,#mermaid-svg-56l0PShgZgx8G0BF .crit2,#mermaid-svg-56l0PShgZgx8G0BF .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-56l0PShgZgx8G0BF .activeCrit0,#mermaid-svg-56l0PShgZgx8G0BF .activeCrit1,#mermaid-svg-56l0PShgZgx8G0BF .activeCrit2,#mermaid-svg-56l0PShgZgx8G0BF .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-56l0PShgZgx8G0BF .doneCrit0,#mermaid-svg-56l0PShgZgx8G0BF .doneCrit1,#mermaid-svg-56l0PShgZgx8G0BF .doneCrit2,#mermaid-svg-56l0PShgZgx8G0BF .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-56l0PShgZgx8G0BF .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-56l0PShgZgx8G0BF .milestoneText{font-style:italic}#mermaid-svg-56l0PShgZgx8G0BF .doneCritText0,#mermaid-svg-56l0PShgZgx8G0BF .doneCritText1,#mermaid-svg-56l0PShgZgx8G0BF .doneCritText2,#mermaid-svg-56l0PShgZgx8G0BF .doneCritText3{fill:#000 !important}#mermaid-svg-56l0PShgZgx8G0BF .activeCritText0,#mermaid-svg-56l0PShgZgx8G0BF .activeCritText1,#mermaid-svg-56l0PShgZgx8G0BF .activeCritText2,#mermaid-svg-56l0PShgZgx8G0BF .activeCritText3{fill:#000 !important}#mermaid-svg-56l0PShgZgx8G0BF .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-56l0PShgZgx8G0BF g.classGroup text .title{font-weight:bolder}#mermaid-svg-56l0PShgZgx8G0BF g.clickable{cursor:pointer}#mermaid-svg-56l0PShgZgx8G0BF g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-56l0PShgZgx8G0BF g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-56l0PShgZgx8G0BF .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-56l0PShgZgx8G0BF .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-56l0PShgZgx8G0BF .dashed-line{stroke-dasharray:3}#mermaid-svg-56l0PShgZgx8G0BF #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF .commit-id,#mermaid-svg-56l0PShgZgx8G0BF .commit-msg,#mermaid-svg-56l0PShgZgx8G0BF .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-56l0PShgZgx8G0BF g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-56l0PShgZgx8G0BF g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-56l0PShgZgx8G0BF g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-56l0PShgZgx8G0BF .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-56l0PShgZgx8G0BF .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-56l0PShgZgx8G0BF .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-56l0PShgZgx8G0BF .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-56l0PShgZgx8G0BF .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-56l0PShgZgx8G0BF .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-56l0PShgZgx8G0BF .edgeLabel text{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-56l0PShgZgx8G0BF .node circle.state-start{fill:black;stroke:black}#mermaid-svg-56l0PShgZgx8G0BF .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-56l0PShgZgx8G0BF #statediagram-barbEnd{fill:#9370db}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-state .divider{stroke:#9370db}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-56l0PShgZgx8G0BF .note-edge{stroke-dasharray:5}#mermaid-svg-56l0PShgZgx8G0BF .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-56l0PShgZgx8G0BF .error-icon{fill:#522}#mermaid-svg-56l0PShgZgx8G0BF .error-text{fill:#522;stroke:#522}#mermaid-svg-56l0PShgZgx8G0BF .edge-thickness-normal{stroke-width:2px}#mermaid-svg-56l0PShgZgx8G0BF .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-56l0PShgZgx8G0BF .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-56l0PShgZgx8G0BF .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-56l0PShgZgx8G0BF .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-56l0PShgZgx8G0BF .marker{fill:#333}#mermaid-svg-56l0PShgZgx8G0BF .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style> <style>#mermaid-svg-56l0PShgZgx8G0BF { color: rgba(0, 0, 0, 0.75); font: ; }</style>
木葉1班
木葉2班
木葉0班
木葉10班
統計開始
大分組:班級名字分組
木葉1班組
鳴人
佐助
小櫻
雛田
我愛羅
木葉2班組
佐井
木葉0班組
大蛇丸
卡卡西
木葉10班組
博人
向日葵
小分組:性別分組
木葉1班組:男
鳴人
佐助
我愛羅
木葉1班組:女
小櫻
雛田
小分組:性別分組
木葉2班組:男
佐井
小分組:性別分組
木葉0班組:男
大蛇丸
卡卡西
小分組:性別分組
木葉10班組:男
博人
木葉10班組:女
向日葵
性別回溯
木葉1班組:NULL
鳴人
佐助
小櫻
雛田
我愛羅
性別回溯
木葉2班組:NULL
佐井
性別回溯
木葉0班組:NULL
大蛇丸
卡卡西
性別回溯
木葉10班組:NULL
博人
向日葵
班級名字回溯
NULL:NULL
全部人
回溯統計結束

分組排序:在分組后統計結果時可以根據分組欄位進行升序或者降序顯示資料

  • 默認的系統就會自動對分組結果根據分組欄位進行升序排序
  • 可以設定分組結果的排序方式
    • group by 欄位名 [ASC]:升序排序(默認)
    • group by 欄位名 DESC:降序排序

示例

1、對分組結果女性優先顯示:gender為列舉,男值為1,女值為2

select count(*),class_name,gender,group_concat(name),any_value(name) 
from t_0 group by class_name,gender desc;

6、having子句

having子句:類似于where子句,是用來進行條件篩選資料的

  • having 子句本身是針對分組統計結果進行條件篩選的,但是本質是針對分組統計,如果沒有分組統計,不要使用having進行資料篩選
  • having子句必須出現在group by子句之后(如果同時存在)
  • having針對的資料是在記憶體里已經加載的資料
  • having幾乎能做where能做的所有事,但是where卻不一定
    • 欄位別名(where針對磁盤資料,那時還沒有)
    • 統計結果(where在group by之前)
    • 分組統計函式(having通常是針對group by存在的)
  • 但是能用where解決問題的地方絕不使用having
    • where針對磁盤讀取資料,源頭解決問題
    • where能夠限制無效資料進入記憶體,記憶體利用率較高,而having是針對記憶體資料篩選

示例

1、獲取班級人數小于3的班級

select count(*) as count,class_name,group_concat(name) from t_0 group by class_name having count < 3;

# 多用了一次函式(效率降低)
select count(*) as count,class_name,group_concat(name) from t_0 group by class_name having count(*) < 3;

# 沒辦法,前面沒統計,只能自己統計
select class_name,group_concat(name) from t_0 group by class_name having count(*) < 3; 

7、order by子句

order by子句:排序,根據某個指定的欄位進行升序或者降序排序

  • 排序的參照物是校對集
  • 排序是針對前面所得到的結果進行排序 (已經進入到記憶體的資料)
  • order by子句在having子句字后(如果同時存在)
  • 排序分為升序和降序:默認是升序
    • order by 欄位 [ASC]:升序
    • order by 欄位 DESC:降序
  • 多欄位排序:是在第一個欄位排好序的情況下,不改變原來排序的基調后,再小范圍排序(類似分組)
  • 實際開發中排序的使用非常常見,尤其是在數值、時間上多見

示例

1、單欄位排序:給所有學生按照年紀大小升序排序

select * from t_0 order by age;
select * from t_0 order by age asc;

2、多欄位排序:先性別降序排序,然后按年齡升序排序

select * from t_40 order by gender desc,age;
select * from t_40 order by gender desc,age asc;

8、limit子句

limit子句:限制資料的獲取數量(記錄數)

  • limit 子句必須在order by子句之后(如果同時存在)

  • limit限制數量的方式有兩種:

    • limit 數量:限制獲取的數量(不保證一定能獲取到指定數量)
    • limit 起始位置,數量:限制資料獲取的位置以及數量(分頁)
  • limit限制數量可以有效的減少服務器的壓力和傳輸壓力

  • 常利用limit來實作分頁獲取資料

示例

1、獲取t_0表中前3條資料

select * from t_0 limit 3;

2、獲取t_0表中第3條以后的3條資料

select * from t_0 limit 3,3;select * from t_0 limit 6,3;

資料查詢總結:

  • 查詢操作是所有操作里使用的最多也是最終的操作

  • 查詢操作的完整語法:select select選項 欄位串列[別名] /* from 資料源[別名] where子句 group by子句 having子句 order by子句 limit 子句;

    • 各個位置的順序不能調換
    • 五子句(where、group by、having、order by、limit)可以沒有,但是出現后一定要保證順序
    • group by到最后都是針對已經加載帶記憶體中的資料進行加工處理
  • 很多結構的組合其實可以達到同一效果,但是可能程序和效率會不同

資料更新

1、限制更新

限制更新:即更新時對更新的記錄數進行限制

  • 限制更新通過 limit 來實作,來完成批量小范圍操作
  • 限制更新其實是區域更新的一種手段,實際開發當中,極少出現這類操作,一般都愿意精準操作(利用where條件明確更新條件)
  • 更新操作不可逆

示例

1、對會員選3個發送10元紅包(添加到賬戶)

create table t_1(	
	id int primary key auto_increment,    
	username varchar(50) not null unique,    
	password char(32) not null,    
	account decimal(10,2) default 0.00
)charset utf8;
	
insert into t_1 values(null,'username1','password',default),
(null,'username2','password',default),
(null,'username3','password',default),
(null,'username4','password',default),
(null,'username5','password',default);

update t_1 set account = account + 10 limit 3;

資料洗掉

1、限制洗掉

限制洗掉:限制要洗掉的記錄數

  • 使用 limit 限制洗掉數量
  • 限制洗掉本質也是洗掉,操作不可逆,謹慎使用
  • 一般很少使用限制洗掉,通常是通過where條件精確洗掉

示例

1、洗掉沒有賬戶余額的一個用戶(當前用戶量少,一般數量會大些)

delete from t_1 where account = 0 limit 1;

2、清空資料

清空資料:將表中的所有資料清除,并且將表的所有狀態回到原始狀態

  • 清空資料的本質是先洗掉表,后創建表
  • 清空資料能夠讓表的一些變化狀態回到原始狀態
    • 自增長重新回到初始值
  • 清空語法: truncate 表名
  • 清空資料表是一種比delete更徹底的資料洗掉方式,所以使用之前必須要慎重
  • 一般只會在開發階段才會使用這種資料洗掉操作,如表資料發生錯亂,或者業務發生變化

示例

1、清空用戶資料表

truncate t_1;

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/291559.html

標籤:其他

上一篇:Redis高可用架構設計以及常見問題分析

下一篇:你一定要知道的SQL優化技巧

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more