日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

《MySQL数据库》关联查询

發(fā)布時(shí)間:2023/12/2 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《MySQL数据库》关联查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、關(guān)聯(lián)查詢

1、概念

在查詢數(shù)據(jù)時(shí),所需要的數(shù)據(jù)不只在一張表中,可能在兩張或多張表中。這個(gè)時(shí)候,需要同時(shí)操作這些表來查詢數(shù)據(jù),即關(guān)聯(lián)查詢。

關(guān)聯(lián)查詢所涉及到的表與表之間都會(huì)存在有關(guān)聯(lián)的字段,如員工表的部門編號和部門表的部門編號。

2、笛卡爾積

在做關(guān)聯(lián)查詢時(shí),數(shù)據(jù)庫會(huì)使用某一張表中的每一條記錄都與另外一張表的所有記錄進(jìn)行組合。比如表A有x條記錄,表B有y條記錄,最終組合數(shù)為x*y,這個(gè)值就是笛卡爾積,通常沒有意義。

3、等值連接

在做關(guān)聯(lián)查詢時(shí),這些表中存在著有關(guān)聯(lián)的兩個(gè)字段。我們使用某一張表中的一條記錄通過相關(guān)聯(lián)的字段與另外一張表的記錄進(jìn)行匹配,組合成一條新的記錄。使用"="連接關(guān)聯(lián)字段

需求1:查詢員工的姓名,職位及其所在部門的名稱 、地址

4、內(nèi)連接

內(nèi)連接返回所有滿足條件的記錄,關(guān)鍵字join on。查詢效果與等值連接一樣。
用法:表A [inner] join 表B on 關(guān)聯(lián)條件

5、外連接

在做關(guān)聯(lián)查詢時(shí),我們所需要的數(shù)據(jù),除了那些滿足關(guān)聯(lián)條件的數(shù)據(jù)外,還有不滿足關(guān)聯(lián)條件的數(shù)據(jù)。此時(shí)需要使用外連接。

會(huì)涉及到兩個(gè)概念:

驅(qū)動(dòng)表(主表):除了顯示滿足條件的數(shù)據(jù),還需要顯示不滿足條件的數(shù)據(jù)的表 從表(副表):只顯示滿足關(guān)聯(lián)條件的數(shù)據(jù)的表

mysql外連接只支持左外連接,右外連接,不支持全外連接

左外連接:表A left [outer] join 表B on 關(guān)聯(lián)條件。 表A是驅(qū)動(dòng)表,表B是從表 右外連接表A right [outer] join 表B on 關(guān)聯(lián)條件表B是驅(qū)動(dòng)表,表A是從表 全外連接:兩張表的數(shù)據(jù)不管滿不滿足條件,都做顯示。表A full [outer] join 表B on 關(guān)聯(lián)條件 PS:mysql 不支持全外連接

需求1:查詢所有員工的姓名,職位,及其部門編號,部門名稱----分析:員工表為驅(qū)動(dòng)表,部門表為從表

select e.ename,e.job,e.deptno,d.dname from emp e left join dept d on e.deptno = d.deptno;

6、自連接

自連接是一種特殊的關(guān)聯(lián)查詢。數(shù)據(jù)的來源是同一個(gè)表,這樣的表內(nèi)的多個(gè)字段要存有關(guān)系。我們要使用表別名來虛擬出兩個(gè)表。

需求1:查詢員工姓名,職位及其上司姓名,職位。

mysql > select a.ename 員工姓名, a.job 員工職位, b.ename 上司姓名, b.job 上司職位 from emp a join emp b on a.mgr=b.empno;分析:可以看出 a的mgr與b的empno關(guān)聯(lián),所以,a是員工表,b是領(lǐng)導(dǎo)表

二、高級關(guān)聯(lián)查詢

有的時(shí)候,我們要查詢的數(shù)據(jù),一個(gè)簡單的查詢語句完成不了,并且我們使用的數(shù)據(jù),表中不能直觀體現(xiàn)出來。而是預(yù)先經(jīng)過一次查詢才會(huì)有所體現(xiàn)。那么先執(zhí)行的查詢,我們稱之子查詢。被子查詢嵌入的查詢語句稱之為父查詢或主查詢。

主查詢可以是select語句,也可以是DML語句或者是DDL語句。

根據(jù)子查詢返回結(jié)果的不同,可以分為單行單列子查詢、多行單列子查詢、多行多列子查詢。

子查詢所在的位置,有可能出現(xiàn)在以下地方:

1)子查詢可以在where子句中 2)子查詢可以在from子句中 3)子查詢可以在having子句中 4)子查詢可以在select字句中,相當(dāng)于外連接的另外一種寫法。

1、在where子句中

需求1:查詢和員工姓名scott同職位的員工信息。

select ename,job,hiredate,sal,deptno from emp where job=(select job from emp where ename='scott');

需求2:查詢薪水比所有員工的平均薪水高的員工信息

mysql > select ename,job,hiredate,sal from emp where sal > (select avg(ifnull(sal,0)) from emp);

需求3:查詢出部門中有salesman但是職位不是salesman的員工信息

select ename,job,hiredate,sal,deptno from emp where deptno in (select distinct deptno from emp where job='salesman') and job <> 'salesman';

exists 關(guān)鍵字

有時(shí)候,子查詢需要引用主查詢的字段數(shù)據(jù),我們使用exists關(guān)鍵字。exists后面的子查詢至少返回一條記錄,則整個(gè)條件為true;

需求:查詢有員工的部門信息

mysql > select deptno,dname,loc from dept d where exists (select * from emp e where d.deptno =e.deptno);

2、在from子句中

from子句用于指定表,如果想在一個(gè)子查詢的結(jié)果里繼續(xù)查詢,則子查詢需要寫在from子句中,相當(dāng)于一個(gè)表。

需求1:查詢工資大于本部門平均工資的員工的信息。

mysql > select e.ename,e.sal,t.avg_sal,t.deptno from emp e join (select deptno,avg(ifnull(sal,0)) 'avg_sal' from emp group by deptno) t on e.deptno = t.deptno and e.sal>t.avg_sal order by t.deptno;

需求2:查詢每個(gè)員工的工資,姓名和其部門的平均工資。

select e.ename, e.sal, t.avg_sal from emp e , (select deptno,avg(ifnull(sal,0)) 'avg_sal' from emp group by deptno) t where e.deptno = t.deptno order by t.deptno;

3、在having子句中

需求:查詢平均工資大于30號部門平均工資的部門號、平均工資

mysql > select deptno,avg(ifnull(sal,0)) from emp group by deptno having avg(ifnull(sal,0))>(select avg(ifnull(sal,0)) from emp where deptno=30);

4、在select子句中

需求1:查詢每個(gè)員工的姓名,工資,及其部門的平均工資,工資之和

select ename,sal, (select avg(ifnull(sal,0)) from emp a where a.deptno=b.deptno) avg_sal , (select sum(sal) from emp c where c.deptno=b.deptno ) sum_sal from emp b order by b.deptno;

總結(jié)

以上是生活随笔為你收集整理的《MySQL数据库》关联查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。