MySQL中SQL命令語句條件查詢實(shí)例詳解
一、聚合函數(shù)
聚合函數(shù):又叫組函數(shù),用來對(duì)表中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)和計(jì)算,結(jié)合group by分組使用,用于統(tǒng)計(jì)和計(jì)算分組數(shù)據(jù)
常用聚合函數(shù)
- count(col):求指定列的總行數(shù)
- max(col):求指定列的最大值
- min(col):求指定列的最小值
- sum(col):求指定列的和
- avg(col):求指定列的平均值(不計(jì)null值)
- ifnull(字段名,指定值):判斷指定字段是否為null,若為空則使用指定值替換



二、分組查詢
分組查詢:將查詢結(jié)果按指定字段進(jìn)行分組,字段中數(shù)據(jù)相等的分為一組
語法:group by 列名 [having 條件表達(dá)式][with rollup]
- 列名:指按指定字段的值進(jìn)行分組
- having 條件表達(dá)式:用來過濾分組后的數(shù)據(jù)
- with rollup:在所有記錄最后加上一條記錄,顯示select查詢時(shí)聚合函數(shù)的統(tǒng)計(jì)和計(jì)算結(jié)果
group by:用于單個(gè)或多個(gè)字段分組

group_concat(字段名):統(tǒng)計(jì)每個(gè)分組指定字段的信息集合,每個(gè)信息間用逗號(hào)分隔

group by結(jié)合聚合函數(shù)使用

group by結(jié)合having使用
having作用:與where類似,用來過濾分組數(shù)據(jù),只能用于group by

group by結(jié)合with rollup使用
with rollup作用:在記錄最后新增一行,顯示select查詢時(shí)聚合函數(shù)的統(tǒng)計(jì)和計(jì)算結(jié)果

三、連接查詢
連接查詢:能夠?qū)崿F(xiàn)多個(gè)表之間的查詢,適合查詢的字段數(shù)據(jù)來自不同的表的情況
內(nèi)連接:查詢兩個(gè)表中符合條件的共有記錄,根據(jù)連接查詢條件取出兩個(gè)表中的交集
內(nèi)連接查詢語法:select 字段 from 表1 inner join 表2 on 表1.字段1=表2.字段2;
inner join:內(nèi)連接查詢關(guān)鍵字
on:連接查詢條件
左連接:以左表為主根據(jù)條件查詢右表數(shù)據(jù),若右表數(shù)據(jù)不存在則用null填充
左連接查詢語法:select 字段 from 表1 left join 表2 on 表1.字段1=表2.字段2;
left join:左連接查詢關(guān)鍵字
on:連接查詢條件
表1為左表,表2為右表
右連接:以右表為主根據(jù)條件查詢左表數(shù)據(jù),若左表數(shù)據(jù)不存在則用null值填充
右連接查詢語法:select 字段 from 表1 right join 表2 on 表1.字段1=表2.字段2;
right join:右連接查詢關(guān)鍵字
on:連接查詢條件
表1為左表,表2為右表
自連接:左表與右表為同一個(gè)表,根據(jù)連接查詢條件查詢兩個(gè)表中數(shù)據(jù),必須對(duì)表起別名
自連接查詢語法:select 字段 from 表名 as 別名1 inner join 表名 as 別名2 on 別名1.字段1=別名2.字段2;
自連接查詢就是把一張表模擬成左右兩張表,然后進(jìn)行連表查詢,是一種特殊的連接方式,連接的表還是本身這張表


四、子查詢
子查詢:在select語句中嵌入另一個(gè)select語句,被嵌入的select稱為子查詢語句,外部select稱為主查詢
子查詢與主查詢關(guān)系
- 子查詢是嵌入在主查詢中的
- 子查詢輔助主查詢,用來充當(dāng)條件或數(shù)據(jù)源
- 子查詢可以獨(dú)立存在,是一條完整的select語句

五、數(shù)據(jù)庫設(shè)計(jì)三范式及E-R模型
范式:對(duì)設(shè)計(jì)數(shù)據(jù)庫提出的一些規(guī)范,共有8范式,一般只需遵循3范式
- 第一范式(1NF):強(qiáng)調(diào)列的原子性,即列不能再細(xì)分為其他列
- 第二范式(2NF):滿足1NF,另有兩部分內(nèi)容
- 表必須有一個(gè)主鍵
- 非主鍵字段必須完全依賴于主鍵,不能只依賴與主鍵一部分
- 第三范式(3NF):滿足 2NF,另外非主鍵列必須直接依賴于主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況
E-R模型:即實(shí)體-關(guān)系模型,用來描述數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)模型
- 實(shí)體:用矩形表示,并標(biāo)注實(shí)體名稱
- 屬性:用橢圓表示,并標(biāo)注屬性名稱
- 關(guān)系:用菱形表示,并標(biāo)注關(guān)系名稱
- 一對(duì)一:如人與身份證,在兩個(gè)表中創(chuàng)建一個(gè)字段,其中一個(gè)表存儲(chǔ)另一個(gè)表的主鍵值,關(guān)系是一種數(shù)據(jù),需要通過一個(gè)字段存儲(chǔ)在表中
- 一對(duì)多:如學(xué)生表與班級(jí)表,在多的一方表(學(xué)生表)中創(chuàng)建一個(gè)字段,存儲(chǔ)班級(jí)表的主鍵值
- 多對(duì)多:如學(xué)生表、班級(jí)表、科目表,新建一張表C,這個(gè)表只有兩個(gè)字段,一個(gè)用于存儲(chǔ)A的主鍵值,一個(gè)用于存儲(chǔ)B的主鍵值
六、外鍵約束
外鍵約束:對(duì)外鍵字段的值進(jìn)行更新和插入時(shí)會(huì)和引用表中字段的數(shù)據(jù)進(jìn)行驗(yàn)證,若數(shù)據(jù)不合法則更新和插入失敗,能夠保證數(shù)據(jù)有效性
添加和刪除外鍵約束
已存在的字段添加外鍵約束:alter table 表1 add foreign key(表1中的外鍵) references 表2(表2主鍵);
或:alter table 從表 add foreign key(外鍵字段) references 主表(主鍵字段);
例:alter table students add foreign key(sid) references classe(id);
創(chuàng)建表添加外鍵約束:
create table teacher(
id int primary key auto_increment not null,
name varchar(10),
sid int not null,
foreign key(sid) references students(id)
);
刪除外鍵約束:
獲取外鍵約束名稱:show create table 表名;
刪除:alter table 表名 drop foreign key 外鍵名;



總結(jié)
到此這篇關(guān)于MySQL中SQL命令語句條件查詢的文章就介紹到這了,更多相關(guān)SQL命令語句條件查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中的distinct與group by比較使用方法
今天無意中聽到有同事在討論,distinct和group by有什么區(qū)別,下面這篇文章主要給大家介紹了關(guān)于MySQL去重中distinct和group by區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-03-03
linux安裝兩個(gè)mysql(8.0和5.7),并同時(shí)使用方式
這篇文章主要介紹了如何在CentOS?7上下載和安裝MySQL?8.0和MySQL?5.7.30,并詳細(xì)描述了安裝步驟,包括解壓、配置、初始化和啟動(dòng)等過程2024-12-12
CentOS 7.4 64位安裝配置MySQL8.0的詳細(xì)步驟
本文分步驟給大家介紹了CentOS 7.4 64位安裝配置MySQL8.0 的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10

