mysql 關聯子查詢
關聯子查詢是指乙個包含對錶的引用的子查詢,該錶也顯示在外部查詢中。通俗一點來講,就是子查詢引用到了主查詢的資料資料。
以乙個實際的例子來理解關聯子查詢:
article 文章表:
aidtitlecontentuid
文章1文章1正文內容...
文章2文章2正文內容...
文章3文章3正文內容...
文章4文章4正文內容...
user 使用者表:
uidusernameemail
admin
jack
我們要查出 article 表中的資料,但要求 article 中的某個或某些欄位與 user 表字段有邏輯關係(本例為 uid 相等)。sql 語句如下:
select * from article where uid in(select uid from user where article.uid = user.uid)
返回查詢結果如下:
aidtitlecontentuid
文章1文章1正文內容...
文章2文章2正文內容...
文章3文章3正文內容...
將該例 sql 與如下語句比較更能看出關聯子查詢與普通子查詢的區別:
select * from article where uid in(select uid from user)
在本例項中,雖然兩個 sql 執行後的返回結果都一樣,但它們的實現過程是完全不一樣的。後者(普通子查詢)實際被執行為:
select * from article where uid in(1,2,3)
但在關聯子查詢中,是無法單獨執行子查詢語句的。其實際流程大致為:
先做外部主查詢;
將主查詢的值傳入子查詢並執行;
子查詢再將查詢結果返回主查詢,主查詢根據返回結果完成最終的查詢。
這個執行流程類似於 exists 子查詢,實際上某些情況下 mysql 就是將關聯子查詢重寫為 exists 子查詢來執行的。
mysql 關聯子查詢效率
很明顯,一般情況下關聯子查詢的效率是比較低下的,實際上本例中的關聯子查詢例子也僅是為了演示關聯子查詢的原理及用法。如果可以的話,關聯子查詢盡量使用 join 或其他查詢來代替。如本例中,使用 inner join 來替換的 sql 為:
select article.* from article inner join user on article.uid = user.uid
注意:此處只是為了演示用 inner join 替換關聯子查詢的樣例,並非表名這種處理是最優處理。
MySQL 多表關聯子查詢
select from major subject discussion a join select id from fa user a join select class from major subject classes a join select subject no from major ...
mysql求和 子查詢 MySQL子查詢
到現在為止,我們已經表明,以select宣告是乙個簡單的查詢。該單個語句從單個資料庫表中檢索資料。sql還同意建立乙個子查詢。即巢狀在其他查詢的查詢。下列實施例給出巢狀查詢。一種表示訂單資訊儲存,包含訂單號,客戶id。訂購日期。例如以下所看到的 一張表示儲存訂單物品資訊,例如以下 另一張表儲存的是客...
mysql 3 多表查詢 子查詢 關聯查詢
1.子查詢 2.關聯查詢 1.子查詢兩種情況 1.1 where 後面跟了一堆的語句 1.2from 後面兩表做了拼接 先建兩張表 create table dept id int 10 not null primary key auto increment,deptname varchar 50 ...