日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

一文了解MySQL的四大子查詢

瀏覽:52日期:2023-08-14 20:18:43
目錄前言一、子查詢概念二、標(biāo)量/單行子查詢、列子/表子查詢??標(biāo)量子查詢??單行子查詢??列子查詢(多行子查詢)??表子查詢?nèi)⒖偨Y(jié)前言

本節(jié)將為大家?guī)鞰ySQL標(biāo)量/單行子查詢、列子/表子查詢的講解?

一、子查詢概念

子查詢指一個查詢語句嵌套在另一個查詢語句內(nèi)部的查詢,這個特性從MySQL 4.1開始引入;在特定情況下,一個查詢語句的條件需要另一個查詢語句來獲取,內(nèi)層查詢(inner query)語句的查詢結(jié)果,可以為外層查詢(outer query)語句提供查詢條件。

內(nèi)層查詢即子查詢,外層查詢即主查詢,只是叫法不同而已

?查詢需求:

查詢公司中工資最低的員工信息

工資最低是多少?

SELECT * FROM emp WHERE sal=(SELECT MIN(sal) FROM emp);

?子查詢規(guī)范:

子查詢必須放在小括號中子查詢一般放在比較操作符的右邊,以增強代碼可讀性子查詢可以出現(xiàn)在幾乎所有的SELECT字句中(如:SELECT、FROM、WHERE、ORDER BY、HAVING子句)

?子查詢分類:

1、根據(jù)子查詢返回的數(shù)據(jù)分類:

標(biāo)量子查詢(scalar subquery):返回1行1列一個值行子查詢(row subquery):返回的結(jié)果集是 1 行 N 列列子查詢(column subquery):返回的結(jié)果集是 N 行 1列表子查詢(table subquery):返回的結(jié)果集是 N 行 N 列

子查詢可以返回一個標(biāo)量(就一個值)、一個行、一個列或一個表,這些子查詢分別稱之為標(biāo)量、行、列和表子查詢。

2、根據(jù)子查詢和主查詢之間是否有條件關(guān)聯(lián)分類:

相關(guān)子查詢:兩個查詢之間有一定的條件關(guān)聯(lián)(相互聯(lián)系)不相關(guān)子查詢:兩個查詢之間沒有條件關(guān)聯(lián)(相互獨立)

3、為了方便,對于在何處使用子查詢給大家給出幾點個人建議:

子查詢出現(xiàn)在WHERE子句中:此時子查詢返回的結(jié)果一般都是單列單行、單行多列、多行單列子查詢出現(xiàn)在HAVING子句中:此時子查詢返回的都是單行單列數(shù)據(jù),同時為了使用統(tǒng)計函數(shù)操作子查詢出現(xiàn)在FROM子句中:此時子查詢返回的結(jié)果圖一般都是多行多列,可以按照一張數(shù)據(jù)表(臨時表)的形式操作二、標(biāo)量/單行子查詢、列子/表子查詢??標(biāo)量子查詢

子查詢返回的是單行單列的數(shù)據(jù),就是一個值

查詢出基本工資比ALLEN低的全部員工信息

SELECT * FROM emp WHERE sal<(SELECT sal FROM emp WHERE eanme&#61;&#39;ALLEN&#39;);

查詢基本工資高于公司平均工資的全部員工信息

SELECT * FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);

查詢出與ALLEN從事同一工作,并且基本工資高于員工編號為7521的全部員工信息

SELECT * FROM emp WHERE job=(SELECT job FROM emp WHERE ename='ALLEN') AND sal>(SELECT sal FROM emp WHERE empno=7521)#把ALLEN自己去掉AND ename<>'ALLEN';

?效果如下:

??單行子查詢

子查詢返回的是單行多列的數(shù)據(jù),就是一條記錄

查詢與SCOTT從事統(tǒng)一工作且工資相同的員工信息

SELECT * FROM emp WHERE (job,sal)=(SELECT job,sal FROM emp WHERE ename='SCOTT')AND ename<>'SCOTT';

查詢與員工編號為7566從事統(tǒng)一工作且領(lǐng)導(dǎo)相同的全部員工信息

SELECT * FROM emp WHERE (job,mgr)=(SELECT job,mgr FROM emp WHERE empno=7566)AND emp<>7566;

?效果如下:

??列子查詢(多行子查詢)

子查詢返回的是多行單列的數(shù)據(jù),就是一列數(shù)據(jù)。多行子查詢也稱為集合比較子查詢,

在使用多行子查詢需要使用多行比較操作符:

操作符含義IN等于列表中的任意一個ANY需要和單行比較操作符一起使用(>、<、=、<>…),與子查詢結(jié)果中任何一個值比較,一個成立ALL需要和單行比較操作符一起使用(>、<、=、<>…),和子查詢返回的所有值比較,同時成立SOME實際上是ANY的別名,作用相同,一般用ANY

IN操作符

IN 運算符用來判斷表達(dá)式的值是否位于給出的列表中;如果是,返回值為 1,否則返回值為 0。

NOT IN 的作用和 IN 恰好相反,NOT IN 用來判斷表達(dá)式的值是否不存在于給出的列表中;如果不是,返回值為 1,否則返回值為 0。

查詢出與每個部門中最低工資相同的員工信息

按照部門分組,統(tǒng)計每個部門的最低工資根據(jù)最低工資查詢出員工信息SELECT * FROM emp WHERE sal IN(SELECT MIN(sal) FROM emp GROUP BY deptno)AND deptno IS NOT NULL;

ANY操作符

ANY關(guān)鍵字是一個MySQL運算符,如果子查詢條件中ANY的比較結(jié)果為TRUE,則它會返回布爾值TRUE 。

查詢工資比任何管理工資都要高的員工信息

查找出每個管理的薪資每個員工的薪資與每個管理的薪資比較SELECT * FROM emp WHERE sal >ANY(SELECT MIN(sal) FROM emp WHERE job='MANAGER' GROUP BY deptno);

ALL操作符

ALL關(guān)鍵字是一個MySQL運算符,如果子查詢條件中ALL的比較結(jié)果為TRUE,則它會返回布爾值TRUE 。

案例同ANY操作符

?效果如下:

??表子查詢

子查詢返回的是多行多列的數(shù)據(jù),就是一個表格,必須使用 IN、ANY 和 ALL 操作符對子查詢返回的結(jié)果進(jìn)行比較

?綜合練習(xí):

在emp表中,得到與10號部門任何一個員工入職年份和領(lǐng)導(dǎo)相同的員工信息(用在where子句中)

需要用到DATE_FORMAT(hiredate,'%Y')將入職日期轉(zhuǎn)換為年份

SELECT * FROM empWHERE (DATE_FORMAT(hiredate,'%Y'),mgr) IN (SELECT DATE_FORMAT(hiredate,'%Y') hiryear,mgr FROM emp WHERE deptno=10);

查詢出每個部門的編號、名稱、位置、部門人數(shù)、平均工資(用在from子句中)

以前學(xué)的多表聯(lián)合查詢——-emp、dept

用子查詢聯(lián)合查詢

SELECT d.deptno,d.dname,d.loc,COUNT(e.deptno),ROUND(AVG(sal),2) FROMdept d LEFT JOIN emp eON e.deptno=d.deptnoGROUP BY d.deptno,d.dname,d.loc;SELECT dept.deptno,dept.dname,dept.loc,d.count,d.avgsal FROM dept LEFT JOIN (SELECT deptno,COUNT(*) count,AVG(sal) avgsal FROM emp GROUP BY deptno) dON dept.deptno=d.deptno;

查詢出所有在’SALES’部門工作的員工編號、姓名、基本工資、獎金、職位、雇傭日期、部門的最高和最低工資。(where和from子句同時使用)

#1SELECT e.empno,e.ename,e.sal,e.comm,e.job,e.hiredate,minsal,maxsal,e.deptno FROM emp e JOIN (SELECT deptno,MIN(sal) minsal,MAX(sal) maxsal FROM emp GROUP BY deptno) tdON e.deptno=td.deptno AND e.deptno=(SELECT deptno FROM dept WHERE dname='SALES');#2SELECT e.empno,e.ename,e.sal,e.comm,e.job,e.hiredate,minsal,maxsal,e.deptno FROM emp e JOIN (SELECT deptno,MIN(sal) minsal,MAX(sal) maxsal FROM emp GROUP BY deptnoHAVING deptno=(SELECT deptno FROM dept WHERE dname='SALES')) tdON e.deptno=td.deptno;

查詢出比‘ALLEN’或‘CLACRK’薪資多的所有員工的編號、姓名、基本工資、部門名稱、領(lǐng)導(dǎo)姓名、部門人數(shù)。

#隱式方式SELECT e.empno,e.ename,e.sal,d.dname,me.ename 領(lǐng)導(dǎo),temp.count FROM emp e,dept d,emp me,(SELECT deptno,COUNT(deptno) count FROM emp e GROUP BY deptno) tempWHERE e.deptno=d.deptno AND e.mgr=me.empno AND temp.deptno=e.deptnoAND e.sal >ANY(SELECT sal FROM emp WHERE ename IN('ALLEN','CLARK'))AND e.ename NOT IN('ALLEN','CLARK');#顯示方式SELECT e.empno,e.ename,e.sal,d.dname,me.ename 領(lǐng)導(dǎo),temp.count FROM emp e JOIN dept d ON e.deptno=d.deptnoLEFT JOIN emp me ON e.mgr=me.empnoJOIN (SELECT deptno,COUNT(deptno) count FROM emp e GROUP BY deptno) temp ON temp.deptno=e.deptnoAND e.sal >ANY(SELECT sal FROM emp WHERE ename IN('ALLEN','CLARK'))AND e.ename NOT IN('ALLEN','CLARK');

列出公司各個部門的經(jīng)理(假設(shè)每個部門只有一個經(jīng)理,job為‘MANAGER’)的姓名、薪資、部門名稱、部門人數(shù)、部門平均工資。

#隱式方式SELECT e.ename,e.sal,d.dname,temp.count,temp.avgsalFROM emp e,dept d,(SELECT deptno, COUNT(deptno) count,AVG(sal) avgsal FROM emp GROUP BY deptno) temp WHERE job='MANAGER' AND e.deptno=d.deptno AND temp.deptno=e.deptno; #顯示方式SELECT e.ename,e.sal,d.dname,temp.count,temp.avgsalFROM emp e JOIN dept d ON e.deptno=d.deptno JOIN (SELECT deptno, COUNT(deptno) count,AVG(sal) avgsal FROM emp GROUP BY deptno) temp ON temp.deptno=e.deptno AND job='MANAGER';

查詢出所有薪資高于公司平均薪資的員工編號、姓名、基本工資、職位、雇傭日期、所在部門名稱、部門位置、上級領(lǐng)導(dǎo)姓名、工資等級、部門人數(shù)、平均工資、平均服務(wù)年限。

#隱式方式SELECT e.empno,e.ename,e.sal,e.job,e.hiredate,d.dname,d.loc,me.ename 領(lǐng)導(dǎo),s.grade,temp.count,temp.avgsal,temp.avgyearFROM emp e,dept d,emp me,salgrade s,(SELECT deptno,COUNT(deptno) count,AVG(sal) avgsal,AVG(TIMESTAMPDIFF(MONTH,hiredate,CURDATE())/12) avgyear FROM emp GROUP BY deptno) temp WHERE e.deptno=d.deptno AND e.sal>(SELECT AVG(sal) FROM emp)AND e.mgr=me.empnoAND e.sal BETWEEN s.losal AND s.hisalAND temp.deptno=e.deptno;#顯示方式SELECT e.empno,e.ename,e.sal,e.job,e.hiredate,d.dname,d.loc,me.ename 領(lǐng)導(dǎo),s.grade,temp.count,temp.avgsal,temp.avgyearFROM emp e JOIN dept d ON e.deptno=d.deptno AND e.sal>(SELECT AVG(sal) FROM emp)LEFT JOIN emp me ON e.mgr=me.empnoJOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisalJOIN (SELECT deptno,COUNT(deptno) count,AVG(sal) avgsal,AVG(TIMESTAMPDIFF(MONTH,hiredate,CURDATE())/12) avgyear FROM emp GROUP BY deptno) temp ON temp.deptno=e.deptno;

三、總結(jié)

?? 子查詢允許結(jié)構(gòu)化的查詢,這樣就可以把一個查詢語句的每個部分隔開。??子查詢提供了另一種方法來執(zhí)行有些需要復(fù)雜的join和union來實現(xiàn)的操作。??在許多人看來,子查詢可讀性較高。 而實際上,這也是子查詢的由來。

到此這篇關(guān)于一文了解MySQL的四大子查詢的文章就介紹到這了,更多相關(guān)MySQL 子查詢內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲一区二区手机在线观看| 男女激情视频一区| 日韩动漫一区| 国产精品地址| 国产精品对白久久久久粗| 久久激情五月婷婷| 久久精品五月| 视频二区不卡| 精品久久精品| 亚洲综合丁香| 悠悠资源网久久精品| 综合激情视频| 国产日韩欧美在线播放不卡| 久久精品一本| 久久精品免费一区二区三区| 麻豆精品网站| 国产精品亚洲欧美| 欧美日韩尤物久久| 西西人体一区二区| 综合一区在线| 精品视频国产| 一区在线视频观看| 国产免费av国片精品草莓男男| 国产一区三区在线播放| 91超碰国产精品| 欧美欧美黄在线二区| 成人精品亚洲| 欧美一区=区三区| 久久久久国产| 日韩精品一区二区三区av| 色综合五月天| 亚洲精选av| 日韩av二区| 蜜臀久久99精品久久久画质超高清| 日韩高清欧美激情| 久久精品高清| 青青国产精品| 久久国产日本精品| 97久久中文字幕| 伊人久久高清| 69堂精品视频在线播放| 久久久人人人| 日韩三级视频| 亚洲大片在线| 国产激情精品一区二区三区| 欧美成人亚洲| 国产成人精品福利| 在线看片日韩| 香蕉视频亚洲一级| 中文字幕日本一区| 亚洲一本视频| 精品欧美视频| 日韩欧美久久| 欧美不卡高清| 91青青国产在线观看精品| 日韩高清中文字幕一区| 婷婷色综合网| 日韩专区精品| 国产精品久久久久久久久久白浆 | 日韩国产91| 激情欧美一区| caoporn视频在线| 国产精品亚洲欧美日韩一区在线 | 精品一区二区三区中文字幕视频| 国产精品试看| 免费精品国产| 999精品一区| 激情国产在线| 美女久久久久久 | 免费一二一二在线视频| 久久影院一区二区三区| 日韩高清不卡一区| 日韩精品午夜视频| 蜜臀91精品一区二区三区| 激情综合自拍| 亚洲一级高清| 91精品综合| 婷婷激情久久| 久久精品高清| 欧美亚洲精品在线| 99精品综合| 六月婷婷综合| 日韩.com| 日韩精品电影| 亚洲91久久| 国产在线不卡| 伊人久久亚洲热| 伊人久久成人| 亚洲综合不卡| 蜜臀av一区二区在线免费观看| 国产视频一区欧美| 亚洲一卡久久| 午夜久久av| 日本午夜精品久久久久| 欧美精品福利| 精品五月天堂| 国产精品二区不卡| 肉色欧美久久久久久久免费看| 日韩国产一区二区三区| 久久国产中文字幕| 午夜国产精品视频| 美女被久久久| 日本va欧美va精品发布| 免费看一区二区三区| 麻豆免费精品视频| 欧美亚洲日本精品| 99精品综合| 久久婷婷国产| 日本欧美一区| 久久精品 人人爱| 里番精品3d一二三区| 国产精品99精品一区二区三区∴ | 巨乳诱惑日韩免费av| 国产亚洲欧洲| 91午夜精品| 国产夫妻在线| 亚洲精品成人| 免费在线观看视频一区| 日韩三级久久| 欧美国产另类| 欧产日产国产精品视频| 精品一区免费| 亚洲三级视频| 国产精品久久久一区二区| 国产精品久久久久久久久妇女| 超碰成人av| 在线综合视频| 国产高清亚洲| 亚洲a一区二区三区| 亚洲精品护士| 高清精品久久| 视频一区二区三区中文字幕| 国产欧美一区二区三区精品观看| 久久久久免费| 亚洲精品美女91| 麻豆精品在线视频| 在线亚洲欧美| 免费一级欧美在线观看视频 | 99精品美女| 亚洲激情黄色| 成人片免费看| 日韩毛片一区| 三上悠亚国产精品一区二区三区 | 亚洲我射av| 日本va欧美va瓶| 日韩中文影院| 奇米色欧美一区二区三区| 日韩精品专区| 青草久久视频| 激情欧美一区| 国产精品白浆| 在线视频精品| 水蜜桃精品av一区二区| 99热精品在线观看| 国产在线一区不卡| 日韩成人午夜精品| 91九色精品| 精品久久97| 奇米色欧美一区二区三区| 99久久夜色精品国产亚洲狼 | 91精品国产一区二区在线观看 | 成人国产精品一区二区网站| 亚洲aa在线| 亚洲日本欧美| 蜜桃精品在线| 蜜臀a∨国产成人精品| 久久精品国产999大香线蕉| 亚洲专区在线| 亚洲三级欧美| 国产精品观看| 日韩三级久久| 久热综合在线亚洲精品| 午夜精品成人av| 国产福利资源一区| 亚洲无线观看| 香蕉人人精品| 日韩.com| 麻豆视频一区二区| 日本aⅴ精品一区二区三区| 色88888久久久久久影院| 国产精品久久国产愉拍| 日本在线成人| 中文字幕日本一区| 香蕉成人久久| 99成人在线| 在线 亚洲欧美在线综合一区| 欧美日韩国产v| 国产激情在线播放| 久久精品欧洲| 国产精品久久久网站| 91精品国产一区二区在线观看| 视频在线在亚洲| 日韩一区二区免费看| 色8久久久久| 久久精品1区| 韩国三级一区| 日韩精品免费一区二区夜夜嗨 | 久久国产三级精品| 日韩高清在线观看一区二区| 亚洲综合图色|