Mysql多表查詢

2022-07-12 19:39:14 字數 1802 閱讀 2508

*隱式內連線:使用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後面的條件進行資料篩選,逐條匹配。不會產生笛卡爾積現象,效率高。

*左外連線:使用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是不合理的。

使用union 和 union all 操作符進行表資料的合併,使用前提是表或者查詢的字段數、列表名稱/型別相同。

union 和 union all 的區別: 

union        在表鏈結後會對所產生的結果進行排序運算,刪除重複的記錄再返回合併結果。

union all       只是簡單的將兩個結果合併後返回。因不需去重,所以效率高於union。

具體的介紹可參考:

或者 查詢中巢狀查詢,即乙個查詢的結果作為另乙個查詢的條件,稱巢狀查詢為子查詢。

子查詢需用小括號括起來。

(此處省略一萬字... ...)

mysql多表 MySQL 多表查詢

多表查詢 select listname from tablename1,tablename2 笛卡爾積 多表查詢中,如果沒有連線條件,則會產生笛卡爾積 數學中的定義 假設集合a 集合b 則兩個集合的笛卡爾積為 實際執行環境下,應避免使用笛卡爾積 解決方案 在where加入有效的連線條件 等值連線 ...

mysql多表查詢方式 MySQL多表查詢方式問題

你的 sql 沒有用到任何索引,對 a b 兩個表都是全表掃瞄,在資料量小的時候是沒有問題的,但是如果資料量超過 100 萬,效能問題就會突顯出來。這裡不清楚你的 created at 欄位是什麼型別,不過從你的 date format created at,y m d 看來,應該是 datetim...

mysql 多表查詢or MySQL 多表查詢

前期準備 建表create table dep id int,name varchar 20 create table emp id int primary key auto increment,name varchar 20 enum male female not null default ma...