??博客主頁:愛敲代碼的小楊.
?專欄:《Java SE語法》 | 《數據結構與算法》 | 《C生萬物》 |《MySQL探索之旅》 |《Web世界探險家》
??感謝大家點贊????收藏?評論???,您的三連就是我持續(xù)更新的動力??
??小楊水平有限,歡迎各位大佬指點,相互學習進步!
1. 數據庫設計
1.1 數據庫設計基本概念
- 數據庫設計就是根據業(yè)務的具體需求,結合我們所學的 DBMS ,為了這個業(yè)務構造最優(yōu)的數據存儲模型。
- 建立數據庫中的表結構以及表與表之間的關聯關系的過程。
1.2 數據庫設計的步驟
-
需求分析(數據是什么?數據具有哪些屬性?數據和屬性之間的特點是什么)
-
邏輯分析(通過 ER圖對數據庫進行邏輯建模)
-
物理設計(根據數據庫自身的特點把邏輯設計轉換為物理設計)
-
維護設計(1. 對新的需求進行建表;2. 表優(yōu)化)
1.3 表設計
1.3.1 一對一
例如:人 和 身份證 的關系
一個人只能對應一個身份證號
1.3.2 一對多
例如: 班級 和 學生 的關系
一個班級多個學生
1.3.3 多對多
例如:學生 和 課程 的關系
一個學生可以選擇多個課程
一個課程可以被多個學生選擇
案例:
-
創(chuàng)建學生表:學生 id ,姓名
create table student( id int primary key auto_increment, name varchar(20) );
-
創(chuàng)建課程表:課程表,課程名
create table course( courseId int primary key auto_increment, courseName varchar(20) );
-
創(chuàng)建關聯表:學生和課程之間的關系,需要包含學生id 和課程id 作為外鍵。
create table student_course( student_id int, course_id int, primary key (student_id, course_id), foreign key (student_id) references student(id), foreign key (course_id) references course(courseId) );
2. 聚合查詢
2.1 聚合函數
常見的統(tǒng)計總數、計算平局值等操作,可以使用聚合函數來實現,常見的聚合函數有:
函數 | 說明 |
---|---|
COUNT([DISTINCT] expr) | 返回查詢的數據的數量 |
SUM([DISTINCT] expr) | 返回查詢到的數據的總和,忽略非數值 |
AVG([DISTINCT] expr) | 返回查詢到的數據的平均值,忽略非數值 |
MAX([DISTINCT] expr) | 返回查詢到的數據的最大值,忽略非數值 |
MIN([DISTINCT] expr) | 返回查詢到的數據的最小值,忽略非數值 |
案例:
-
count:計數
-- 統(tǒng)計有多少位學生 select count(*) from student; -- 統(tǒng)計學生表有多少個姓名,姓名為 NULL 不會計入結果 select count(name) from student;
-
sum:總和
-- 統(tǒng)計分數的總和 select sum(score) from score; -- 統(tǒng)計分數小于70的總分,如果沒有返回null select sum(score) from score where score<70;
-
avg:平均值
-- 查詢分數的平均值 select avg(score) from score; -- 查詢分數小于70的平均值,如果沒有則返回 NULL
-
MAX:最大值
-- 查詢分數的最大值 select max(score) from score; -- 查詢60到90之間的最大值 select max(score) from score where score>60 and score<90; -- 查詢大于90的最大值,如果沒有則返回 NULL select max(score) from score where score>90;
-
MIN:最小值
-- 查詢分數的最小值 select min(score) from score; -- 查詢分數在60到90之間的最小值 select min(score) from score where score>60 and score<90; -- 查詢分數在60以下的最小值,如果沒有則返回 NULL select min(score) from score where score<60;
2.2 分組查詢
select
中使用 group by
子句可以對指定列進行分組查詢。需要滿足:使用 group by
進行分組查
詢時,select
指定的字段必須是“分組依據字段”,其他字段若想出現在 select
中則必須包含在聚合函
數中。
select column1, sum(column2), .. from table group by column1,column3;
案例:
測試表:職工表 id,name(姓名),role(職位),salary(工資)
create table emp(id int, name varchar(20), role varchar(20), salary int);
insert into emp values (1,'張三','Java開發(fā)',10000);
insert into emp values (2,'李四','Java開發(fā)',9000);
insert into emp values (3,'王五','Web開發(fā)',8000);
insert into emp values (4,'趙六','Web開發(fā)',9000);
insert into emp values (5,'王麻子','運維',8500);
insert into emp values (6,'瑪暈','老板',100000);
-
查詢每個崗位的最高工資、最低工資和平均工資
select role,max(salary),min(salary),avg(salary) from emp group by role;
2.3 條件過濾
group by
子句進行分組以后,需要對分組結果再進行條件過濾時,不能使用 where
語句,而需要用having
。
-
查詢平均工資低于9000的職位和它的平均工資
select role,max(salary),min(salary),avg(salary) from emp group by role having avg(salary)<9000;
文章來源:http://www.zghlxwxcb.cn/news/detail-845499.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-845499.html
到了這里,關于【MySQL探索之旅】數據庫設計以及聚合查詢的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!