MySQL中SQL命令語句條件查詢實例詳解
一、聚合函數(shù)
聚合函數(shù):又叫組函數(shù),用來對表中的數(shù)據(jù)進行統(tǒng)計和計算,結合group by分組使用,用于統(tǒng)計和計算分組數(shù)據(jù)
常用聚合函數(shù)
- count(col):求指定列的總行數(shù)
- max(col):求指定列的最大值
- min(col):求指定列的最小值
- sum(col):求指定列的和
- avg(col):求指定列的平均值(不計null值)
- ifnull(字段名,指定值):判斷指定字段是否為null,若為空則使用指定值替換
二、分組查詢
分組查詢:將查詢結果按指定字段進行分組,字段中數(shù)據(jù)相等的分為一組
語法:group by 列名 [having 條件表達式][with rollup]
- 列名:指按指定字段的值進行分組
- having 條件表達式:用來過濾分組后的數(shù)據(jù)
- with rollup:在所有記錄最后加上一條記錄,顯示select查詢時聚合函數(shù)的統(tǒng)計和計算結果
group by:用于單個或多個字段分組
group_concat(字段名):統(tǒng)計每個分組指定字段的信息集合,每個信息間用逗號分隔
group by結合聚合函數(shù)使用
group by結合having使用
having作用:與where類似,用來過濾分組數(shù)據(jù),只能用于group by
group by結合with rollup使用
with rollup作用:在記錄最后新增一行,顯示select查詢時聚合函數(shù)的統(tǒng)計和計算結果
三、連接查詢
連接查詢:能夠實現(xiàn)多個表之間的查詢,適合查詢的字段數(shù)據(jù)來自不同的表的情況
內連接:查詢兩個表中符合條件的共有記錄,根據(jù)連接查詢條件取出兩個表中的交集
內連接查詢語法:select 字段 from 表1 inner join 表2 on 表1.字段1=表2.字段2;
inner join:內連接查詢關鍵字
on:連接查詢條件
左連接:以左表為主根據(jù)條件查詢右表數(shù)據(jù),若右表數(shù)據(jù)不存在則用null填充
左連接查詢語法:select 字段 from 表1 left join 表2 on 表1.字段1=表2.字段2;
left join:左連接查詢關鍵字
on:連接查詢條件
表1為左表,表2為右表
右連接:以右表為主根據(jù)條件查詢左表數(shù)據(jù),若左表數(shù)據(jù)不存在則用null值填充
右連接查詢語法:select 字段 from 表1 right join 表2 on 表1.字段1=表2.字段2;
right join:右連接查詢關鍵字
on:連接查詢條件
表1為左表,表2為右表
自連接:左表與右表為同一個表,根據(jù)連接查詢條件查詢兩個表中數(shù)據(jù),必須對表起別名
自連接查詢語法:select 字段 from 表名 as 別名1 inner join 表名 as 別名2 on 別名1.字段1=別名2.字段2;
自連接查詢就是把一張表模擬成左右兩張表,然后進行連表查詢,是一種特殊的連接方式,連接的表還是本身這張表
四、子查詢
子查詢:在select語句中嵌入另一個select語句,被嵌入的select稱為子查詢語句,外部select稱為主查詢
子查詢與主查詢關系
- 子查詢是嵌入在主查詢中的
- 子查詢輔助主查詢,用來充當條件或數(shù)據(jù)源
- 子查詢可以獨立存在,是一條完整的select語句
五、數(shù)據(jù)庫設計三范式及E-R模型
范式:對設計數(shù)據(jù)庫提出的一些規(guī)范,共有8范式,一般只需遵循3范式
- 第一范式(1NF):強調列的原子性,即列不能再細分為其他列
- 第二范式(2NF):滿足1NF,另有兩部分內容
- 表必須有一個主鍵
- 非主鍵字段必須完全依賴于主鍵,不能只依賴與主鍵一部分
- 第三范式(3NF):滿足 2NF,另外非主鍵列必須直接依賴于主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況
E-R模型:即實體-關系模型,用來描述數(shù)據(jù)庫存儲數(shù)據(jù)的結構模型
- 實體:用矩形表示,并標注實體名稱
- 屬性:用橢圓表示,并標注屬性名稱
- 關系:用菱形表示,并標注關系名稱
- 一對一:如人與身份證,在兩個表中創(chuàng)建一個字段,其中一個表存儲另一個表的主鍵值,關系是一種數(shù)據(jù),需要通過一個字段存儲在表中
- 一對多:如學生表與班級表,在多的一方表(學生表)中創(chuàng)建一個字段,存儲班級表的主鍵值
- 多對多:如學生表、班級表、科目表,新建一張表C,這個表只有兩個字段,一個用于存儲A的主鍵值,一個用于存儲B的主鍵值
六、外鍵約束
外鍵約束:對外鍵字段的值進行更新和插入時會和引用表中字段的數(shù)據(jù)進行驗證,若數(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 外鍵名;
總結
到此這篇關于MySQL中SQL命令語句條件查詢的文章就介紹到這了,更多相關SQL命令語句條件查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ERROR 1862 (HY000): Your password has expired. To log in you
當你在安裝 MySQL過程中,通過mysqld --initialize 初始化 mysql 操作后,生成臨時密碼后,沒有直接進行 MySQL連接,中途重啟服務或者重啟機器等,導致密碼失效問題,怎么處理呢,感興趣的朋友一起看看吧2019-11-11mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法
這篇文章主要介紹了mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法,需要的朋友可以參考下2016-01-01