詳解MySQL多表查詢
??多表查詢
??內連接查詢
- 語法
-- 隱式內連接 SELECT 字段列表 FROM 表1,表2… WHERE 條件; -- 顯示內連接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 條件;
內連接相當于查詢 A B 交集數(shù)據(jù)
- 案例
- 隱式內連接
SELECT * FROM emp, dept WHERE emp.dep_id = dept.did;
執(zhí)行上述語句結果如下:
- 查詢 emp的 name, gender,dept表的dname
SELECT emp. NAME, emp.gender, dept.dname FROM emp, dept WHERE emp.dep_id = dept.did;
執(zhí)行語句結果如下:
上面語句中使用表名指定字段所屬有點麻煩,sql也支持給表指別名,上述語句可以改進為
SELECT t1. NAME, t1.gender, t2.dname FROM emp t1, dept t2 WHERE t1.dep_id = t2.did;
- 顯式內連接
select * from emp inner join dept on emp.dep_id = dept.did; -- 上面語句中的inner可以省略,可以書寫為如下語句 select * from emp join dept on emp.dep_id = dept.did;
執(zhí)行結果如下:
??外連接查詢
- 語法
-- 左外連接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 條件; -- 右外連接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 條件;
左外連接:相當于查詢A表所有數(shù)據(jù)和交集部分數(shù)據(jù)
右外連接:相當于查詢B表所有數(shù)據(jù)和交集部分數(shù)據(jù)
- 案例
- 查詢emp表所有數(shù)據(jù)和對應的部門信息(左外連接)
select * from emp left join dept on emp.dep_id = dept.did;
執(zhí)行語句結果如下:
結果顯示查詢到了左表(emp)中所有的數(shù)據(jù)及兩張表能關聯(lián)的數(shù)據(jù)。
- 查詢dept表所有數(shù)據(jù)和對應的員工信息(右外連接)
select * from emp right join dept on emp.dep_id = dept.did;
執(zhí)行語句結果如下:
結果顯示查詢到了右表(dept)中所有的數(shù)據(jù)及兩張表能關聯(lián)的數(shù)據(jù)。
要查詢出部門表中所有的數(shù)據(jù),也可以通過左外連接實現(xiàn),只需要將兩個表的位置進行互換:
select * from dept left join emp on emp.dep_id = dept.did;
??子查詢
概念
查詢中嵌套查詢,稱嵌套查詢?yōu)樽硬樵儭?/p>
什么是查詢中嵌套查詢呢?我們通過一個例子來看:
需求:查詢工資高于豬八戒的員工信息。
來實現(xiàn)這個需求,我們就可以通過二步實現(xiàn),第一步:先查詢出來 豬八戒的工資
select salary from emp where name = '豬八戒'
第一步:查詢工資高于豬八戒的員工信息
select * from emp where salary > 3600;
第二步中的3600可以通過第一步的sql查詢出來,所以將3600用第一步的sql語句進行替換
select * from emp where salary > (select salary from emp where name = '豬八戒');
這就是查詢語句中嵌套查詢語句。
- 子查詢根據(jù)查詢結果不同,作用不同
- 子查詢語句結果是單行單列,子查詢語句作為條件值,使用 = != > < 等進行條件判斷
- 子查詢語句結果是多行單列,子查詢語句作為條件值,使用 in 等關鍵字進行條件判斷
- 子查詢語句結果是多行多列,子查詢語句作為虛擬表
- 案例
- 查詢 ‘財務部’ 和 ‘市場部’ 所有的員工信息
-- 查詢 '財務部' 或者 '市場部' 所有的員工的部門did select did from dept where dname = '財務部' or dname = '市場部'; select * from emp where dep_id in (select did from dept where dname = '財務部' or dname = '市場部');
- 查詢入職日期是 ‘2011-11-11’ 之后的員工信息和部門信息
-- 查詢入職日期是 '2011-11-11' 之后的員工信息 select * from emp where join_date > '2011-11-11' ; -- 將上面語句的結果作為虛擬表和dept表進行內連接查詢 select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;
最后說一句
感謝大家的閱讀,文章通過網(wǎng)絡資源與自己的學習過程整理出來,希望能幫助到大家。
才疏學淺,難免會有紕漏,如果你發(fā)現(xiàn)了錯誤的地方,可以提出來,我會對其加以修改。
到此這篇關于詳解MySQL多表查詢的文章就介紹到這了,更多相關MySQL多表查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Mysql循環(huán)插入數(shù)據(jù)的實現(xiàn)
這篇文章主要介紹了Mysql循環(huán)插入數(shù)據(jù)的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08