JavaEE 之 數據庫技術 多表查詢

資料 ? 青牛 ? 于 2019-06-28 16:45:05 ? 408 閱讀

1.1 需求分析

需求 : 根據需求查詢商品類別表和商品表的數據

表結構如下 :
file

1.2 初始化數據

向商品類別表中添加數據

file
向商品表中添加數據
file

1.3 多表查詢

1.3.1 交叉連接查詢(基本不會使用-得到的是兩個表的乘積) [了解]

語法:select * from A,B;

代碼:
file

結果 :
file

笛卡爾積 :

笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示為X×Y, 第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員[3] 。 假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
file

數據庫表連接數據行匹配時所遵循的算法就是以上提到的笛卡爾積,表與表之間的連接可以看成是在做 乘法運算。

笛卡爾積的危害 :

file
以前五條數據為例,這五條關聯數據中只有第一條是有用的,其他幾條都是沒有用的,所以在交 叉查詢中,數據庫會浪費非常多的性能來查詢這些沒有用的數據,這種情況使我們不愿意見到 的?

解決笛卡爾積:
精確關聯條件,去掉不必要的數據!

1.3.2 內連接查詢(使用的關鍵字 inner join -- inner可以省略)

隱式內連接:select * from A,B where 條件;
file

顯示內連接:select * from A inner join B on 條件; (推薦寫法)
file

內連接原理 : 內連接根據我們連接條件大大的縮小的笛卡爾積的范圍;在內連接中只有主外 鍵能夠關聯上的數據才能被查詢出來!

內連接問題 :

向商品類別表插入一條數據
file

現在商品類別表中有6個類別
file
file

但是當我關聯查詢的時候
file
file

只能查詢出5個類別,這是為什么呢?

這是因為商品表中就就只有五個類別能和商品類別表匹配,所以內連接把能匹配的數據都查 詢出來了,那么有沒有什么辦法可以解決這個問題呢?

1.3.3 外連接查詢(使用的關鍵字 outer join -- outer可以省略)

外連接可以把關聯查詢的兩張表的一張表作為主表,另外一張作為從表,而外鏈接使用保證主 表的數據完整;

左外連接:left outer join

select * from A left outer join B on 條件;

代碼 :
file

效果 :
file

查詢原理 : 左外連接查詢是以left關鍵字左邊的表為基準表,保證左表數據完整,如果右表沒有 與左表數據匹配的記錄,那么右表將以一條null數據填充查詢結果,保證左表的完整

左外鏈接正好能解決我們上面的問題

代碼
file
file

1.3.4 右外連接:right outer join(了解)

右外鏈接與左外鏈接正好相反,它是保證右表數據完整;

此處需要注意一個問題就是所有的右外鏈接都能轉為左外鏈接,所以右外鏈接應用并不廣泛, 了解即可

語法 :

select * from A right outer join B on 條件;

1.3.5 各種連接查詢區別總結
file

1.3 多表查詢綜合案例

1.3.1 查詢價格在一萬以內名字中包含 '想' 的商品

隱式內連接

file
file
隱式內連接是借助where條件來設定關聯關系,所以這樣如果一旦where條件變多整體關聯 關系就很難把控,并且表越多,隱式內連接關聯就越亂,所以這種方案我們并不采納

顯式內連接
file
1.3.2 查詢所有分類商品的個數

左外連接 :
file

結果 :
file

此處不能寫 count() 如果寫count() 手機/運營商/數碼將會是1 因為確實有一條記錄與之對 應雖然記錄里的數據都是null

但是如果你統計外檢表的任意一個列 count() 會忽略null值所以就是0了

1.3 子查詢

定義 :一條select語句結果作為另一條select語法一部分(查詢條件,查詢結果,表等)。

語法 :
file
file

案例 : 查詢和海爾洗衣機同樣價格的商品

連接查詢 : [email protected]#$%^&*()_+................搞不了,搞不了...........

沒法連接呀,發生在一張表的查詢,關聯字段也找不到,你叫我怎么連接?啊?怎么連接?

子查詢 :
file

上面的案例是把一條SQL語句的查詢結果當做條件值傳入到另一條SQL語句中,而且大家注 意此時海爾洗衣機這條SQL返回一個結果,這種叫單行單列子查詢

接下來再演示個多行子查詢

比如查詢所有商品的商品類別名稱
file

上面這條SQL語句子查詢部分返回了多條記錄,這種子查詢叫做單行多列子查詢?

還有的時候會把查詢結果當成臨時表存儲起來然后在查詢結果基礎上再進行查詢
file

上面這條語句就是把一個查詢結果直接封裝為一個虛擬表a表 然后在封裝的虛擬表a表的基 礎上又做查詢 這種子查詢叫做 多行多列子查詢?

版權聲明:原創作品,允許轉載,轉載時務必以超鏈接的形式表明出處和作者信息。否則將追究法律責任。來自海牛部落-青牛,http://hainiubl.com/topics/36804
點贊
成為第一個點贊的人吧 :bowtie:
回復數量: 0
    暫無評論~~
    • 請注意單詞拼寫,以及中英文排版,參考此頁
    • 支持 Markdown 格式, **粗體**、~~刪除線~~、`單行代碼`, 更多語法請見這里 Markdown 語法
    • 支持表情,可用Emoji的自動補全, 在輸入的時候只需要 ":" 就可以自動提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上傳圖片, 支持拖拽和剪切板黏貼上傳, 格式限制 - jpg, png, gif,教程
    • 發布框支持本地存儲功能,會在內容變更時保存,「提交」按鈕點擊時清空
    Ctrl+Enter
    所罗门王的宝矿在线客服 极限平特肖公式规律 双色球开奖直播 快乐十分三胆全拖金额 上海晓游棋牌官方下载 江西多乐彩开奖走势 浙江快乐12走势图表 亲朋棋牌游戏官网 浙江十一选五放假 11选5赚钱 北京快中彩软件 股票推荐·天牛宝诚信 吉林十一选五开奖结果查询 足彩二串一能赚钱吗 快乐12前三组遗漏 融安《存在树上的金桔更赚钱》 天津十一选五技巧