一、表連線查詢
1.1 多表查詢的分類
1.1.1 內連線查詢
* 隱式內連線:使用where條件消除無用資料
* 語法:select 字段列表 from 左表, 右表 where 條件
小貼士:
* 笛卡爾積:
* 有兩個集合a,b,取這兩個集合的所有組成情況。
* 要完成多表查詢,需要消除無用的資料
* 如何消除笛卡爾積現象的影響?
* 增加where條件進行篩選,過濾掉沒有用的資料。
* 顯示內連線:使用inner join ... on語句,inner可以省略
* 語法:select 字段列表 from 左表 [inner] join 右表 on 條件
* 迫切內連線:使用inner join fetch ... on語句,inner可以省略
* 語法:select 字段列表 from 左表 [inner] join fetch 右表 on 條件
注意:隱式內連線和顯示內連線的區別
* 隱式內連線先查詢數結果集(即先進行笛卡爾積運算,生成乙個新的**。),再根據where條件篩選資料。因為表的資料量大,效率低、耗記憶體。
* 顯示內連線在查詢資料時,會根據on後面的條件進行資料篩選,逐條匹配。不會產生笛卡爾積現象,效率高。
1.1.2 外連線查詢
* 左外連線:使用left outer join ... on,outer可以省略
* 語法:select 字段列表 from 左表 left [outer] join 右表 on 條件
* 結果集:查詢的是左表所有資料以及其交集部分,若交集部分沒有資料,則顯示null。
* 迫切左外連線:使用left outer join fetch ... on語句,outer可以省略
* 語法:select 字段列表 from 左表 left [outer] join fetch 右表 on 條件
* 結果集:查詢的是左表所有資料以及其交集部分,若交集部分沒有資料,則顯示null。
* 右外連線:使用right outer join ... on,outer可以省略
* 語法:select 字段列表 from 左表 right [outer] join 右表 on 條件
* 結果集:查詢的是右表所有資料以及其交集部分,若交集部分沒有資料,則顯示null。
小貼士:
* 什麼是迫切?
* 及時將兩個關聯物件進行相互引用
* 為什麼沒有迫切右外連線?
* 因為封裝的時候是以左物件為主鍵,右物件保全。所以若左物件為null,將右物件賦值給null是不合理的。
1.1.3 查詢關聯表的所有資料(擴充套件)
使用union 和 union all 操作符進行表資料的合併,使用前提是表或者查詢的字段數、列表名稱/型別相同。
union 和 union all 的區別:
union 在表鏈結後會對所產生的結果進行排序運算,刪除重複的記錄再返回合併結果。
union all 只是簡單的將兩個結果合併後返回。因不需去重,所以效率高於union。
1.2 子查詢
1.2.1 概述
查詢中巢狀查詢,即乙個查詢的結果作為另乙個查詢的條件,稱巢狀查詢為子查詢。
1.2.2 子查詢用法
子查詢需用小括號括起來。
(此處省略一萬字... ...)
Hibernate框架的內連線和迫切內連線
public class hqltest catch exception e finally test public void fun2 內連線,以陣列方式進行儲存 string hql from customer c inner join c.setperson query query sessi...
mysql連線操作 MySQL內連線操作
筆記 實現內連線 以運算元據庫tb train cpp2和tb train cpp22為例 desc tb train cpp2 desc tb train cpp22 資料表tb train cpp2中的字段country與tb train cpp22中的字段cname對應 可實現內連線 sele...
MySQL內連線排序
student1 學生表 grade1 年級表 result 考試成績表 subject 科目表 都在上乙個部落格 查詢參加考試的同學資訊 學號 姓名 科目號 成績 select s.studentno,studentname,subjectno,studentresult from student...