1. 程式人生 > >Java學習總結(十六)——MySQL數據庫(中)分組,嵌套,連接查詢及外鍵與關系表設計

Java學習總結(十六)——MySQL數據庫(中)分組,嵌套,連接查詢及外鍵與關系表設計

MySQL數據庫 分組查詢 連接查詢 子查詢 外鍵與關系表設計

一.分組查詢
1.語法:group by 分組字段1[,分組字段2,.........] [having 分組後的篩選條件]
2.註意:分組字段應該與select後的查詢字段一致,否則查詢結果無意義
3.分組查詢經常會與聚合函數一起使用
例:(1)先建一張商品表(以此表為例進行分組查詢)

技術分享圖片

(2)插入記錄

技術分享圖片

(3)查詢:
#1.計算每一種商品單價的平均價格

技術分享圖片

查詢結果:
技術分享圖片
#2.計算日用品種類的平均價格
技術分享圖片

查詢結果:
技術分享圖片
二.連接查詢
1.等值連接
語法:select 字段1,字段2,........ from 表A,表B,....... where 連接條件 [其他過濾條件];
2.內連接
語法:select 字段1,字段2,.........from 表A inner join 表B on 連接條件 [其他過濾條件];

3.外連接
左外連接:
語法:select 字段1,字段2,.........from 表A left join 表B on 連接條件;
註意:左外連接的查詢結果是,除了返回表中符合條件的記錄外還要加上左表中剩下的全部記錄。
右外連接:

語法:select 字段1,字段2,..........from 表A right join 表B on 連接條件;
註意:右外連接的查詢結果是,除了返回表中符合條件的記錄外還要加上右表中剩下的全部記錄。
例:(1)先創建表
創建學校表(父表)
技術分享圖片
創建學生表(子表)

技術分享圖片

(2)添加數據:
技術分享圖片

技術分享圖片
(3)查詢學生的姓名,成績與所在的學校的歷史
等值連接:
技術分享圖片
查詢結果:
技術分享圖片
內連接:
技術分享圖片

查詢結果:
技術分享圖片

(4)使用左外連接查詢學生表與學校表的相關記錄,學校為左表。

技術分享圖片

查詢結果:
技術分享圖片

(5)使用右外連接查詢學生表說學校表的相關記錄,學校表為右表
技術分享圖片

查詢結果:

技術分享圖片

三.子查詢(嵌套查詢)
1.子查詢是指在外部查詢語句中嵌套著一個內部查詢(子查詢),子查詢的查詢結果一般是作為外部查詢的條件,子查詢要用括號括起來。
2.子查詢常用的關鍵字:
in:判斷某個(些)字段值是否在指定的子查詢結果集中
all:判斷某個字段值是否能滿足指定操作符對子查詢結果集所有記錄的篩選
any:判斷某個字段值是否滿足指定操作符對子查詢結果集中的任何一個值
例:(查詢案例)
(1)建表
技術分享圖片

(2)添加數據

技術分享圖片

(3)查詢
#1.查詢與SCOTT同一部門員工
如果只有一個SCOTT:
查詢語句:
技術分享圖片

查詢結果:
技術分享圖片
如果至少一個SCOTT(向表中添加在加入一SCOTT:INSERT INTO emp VALUES(9527,‘SCOTT‘,‘ANALYST‘,7566,‘1987-05-19‘,1000,NULL,10);):

查詢語句:
技術分享圖片

查詢結果:
技術分享圖片
#2.工資高於JONES的員工
如果只有一個JONES:
查詢語句:
技術分享圖片

查詢結果:
技術分享圖片
如果至少一個JONES(添加一個JONES:INSERT INTO emp VALUES(9999,‘JONES‘,‘MANAGER‘,7839,‘1981-04-02‘,2000,NULL,20);):
查詢語句:

技術分享圖片
查詢結果:
技術分享圖片
#3.工資高於30號部門所有員工的員工信息
方式一:
技術分享圖片

查詢結果:
技術分享圖片
方式二:
技術分享圖片

查詢結果:
技術分享圖片
方式三:
技術分享圖片

查詢結果:
技術分享圖片
#4。查詢工作與工資與’MARTIN’(馬丁)完全相同的員工信息
只有一個員工叫‘MARTIN’時:
查詢語句:
技術分享圖片

查詢結果:
技術分享圖片
至少有一個‘MARTIN’時(手動添加一個’MARTIN’:INSERT INTO emp VALUES(8888,‘MARTIN‘,‘CLERK‘,7698,‘1982-09-28‘,1100,1400,30);):
查詢語句(方式一):
技術分享圖片

查詢結果:
技術分享圖片
#5.查詢傭金不為null的員工信息:
查詢語句:
技術分享圖片

查詢結果:
技術分享圖片

#6.在emp表中查詢,要求查詢每個員工的姓名以及他所對應的上司的名字:
查詢語句:
技術分享圖片

查詢結果:
技術分享圖片

四.外鍵(foreign key)
1.外鍵的定義:
[ constraint 約束名稱 ] foreign key (作為外鍵的字段名) references 父表名稱 (父表主鍵)
2.外鍵的作用:用來約束子表中的記錄,使之與父表的記錄相對應
例(超市表與員工表,其中超市表為父表,員工表為子表):
創建超市表並顯示表結構(父表):
技術分享圖片

創建員工表並顯示表結構(子表):
技術分享圖片
設置外鍵部分SQL語句:
技術分享圖片
五.一對多關系表的設計,多對多關系表的設計
1.通過在表上設置外鍵的方式,關聯父表的主鍵,這樣父表的一條記錄就可以關聯子表的多條記錄了。
%不再舉例,上文所提到的學校表與學生表以及超市表與員工表均是一對多的關系%
2..多對多關系表的設計:
(1)通過設置中間表的方式實現“多對多”關系表的設計
(2)中間表至少有兩個外鍵字段,分別關聯於兩張“多”表的主鍵
(3)而且這兩個外鍵字段的組合值不能重復(一種方式是通過將這兩個字段設置為聯合主鍵,以確保他們的組合值不重復)
例(以學生以及課程為例,設計多對多關系表):
創建學生表:
技術分享圖片

創建課程表:
技術分享圖片

創建中間表:

技術分享圖片

添加數據:
技術分享圖片

查詢:
#1.學號為2的學生選擇了那些課程
查詢語句:
技術分享圖片

查詢結果:
技術分享圖片

【本次總結完畢】

Java學習總結(十六)——MySQL數據庫(中)分組,嵌套,連接查詢及外鍵與關系表設計