Mysql中的嵌套子查詢問(wèn)題
Mysql嵌套子查詢
子查詢就是指的在一個(gè)完整的查詢語(yǔ)句之中,嵌套若干個(gè)不同功能的小查詢,從而一起完成復(fù)雜查詢的一種編寫形式,為了讓讀者更加清楚子查詢的概念。
子查詢返回結(jié)果
子查詢可以返回的數(shù)據(jù)類型一共分為四種:
- 單行單列:返回的是一個(gè)具體列的內(nèi)容,可以理解為一個(gè)單值數(shù)據(jù);
- 單行多列:返回一行數(shù)據(jù)中多個(gè)列的內(nèi)容;
- 多行單列:返回多行記錄之中同一列的內(nèi)容,相當(dāng)于給出了一個(gè)操作范圍;
- 多行多列:查詢返回的結(jié)果是一張臨時(shí)表;
在WHERE子句中使用子查詢
在WHERE子句之中處理單行單列子查詢、多行單列子查詢、單行多列子查詢。
單行單列子查詢
**示例一、**查詢公司之中工資最低的雇員的完整信息
--查詢公司之中工資最低的雇員的完整信息 SELECT * FROM emp e WHERE e.sal=( SELECT MIN(sal) FROM emp);
**示例二、**查詢出基本工資比ALLEN低的全部雇員信息
-- 查詢出基本工資比ALLEN低的全部雇員信息 SELECT * FROM emp e WHERE e.sal<( SELECT sal FROM emp WHERE ename='ALLEN' );
**示例三、**查詢基本工資高于公司平均薪金的全部雇員信息
--查詢基本工資高于公司平均薪金的全部雇員信息 SELECT * FROM emp e WHERE e.sal>( SELECT AVG(sal) FROM emp);
單行多列子查詢。
**示例四、**查找出與ALLEN從事同一工作,并且基本工資高于雇員編號(hào)為7521的全部雇員信息,
--查找出與ALLEN從事同一工作,并且基本工資高于雇員編號(hào)為7521的全部雇員信息, SELECT * FROM emp e WHERE e.job=( SELECT job FROM emp WHERE ename='ALLEN') AND e.sal>( SELECT sal FROM emp WHERE empno=7521);
**示例五、**查詢與SCOTT從事同一工作且工資相同的雇員信息
SELECT * FROM emp e WHERE (e.job,e.sal) = ( SELECT job,sal FROM emp WHERE ename='SCOTT') AND ename<>'SCOTT';
**示例六、**查詢與雇員7566從事同一工作且領(lǐng)導(dǎo)相同的全部雇員信息
--查詢與雇員7566從事同一工作且領(lǐng)導(dǎo)相同的全部雇員信息
SELECT *
FROM emp e
WHERE (e.job,e.mgr) =(
SELECT job,mgr
FROM emp
WHERE empno=7566
);**示例七、**查詢與ALLEN從事同一工作且在同一年雇傭的全部雇員信息(包括ALLEN)
--查詢與ALLEN從事同一工作且在同一年雇傭的全部雇員信息(包括ALLEN)
SELECT *
FROM emp e
WHERE (e.job,to_char(e.hiredate,'yyyy'))=(
SELECT job,to_char(hiredate,'YYYY')
FROM emp
WHERE ename='ALLEN'
);多行單列子查詢
主要使用三種操作符:IN、ANY、ALL
IN操作
**示例八、**查詢出與每個(gè)部門中最低工資相同的全部雇員信息
--查詢出與每個(gè)部門中最低工資相同的全部雇員信息
SELECT *
FROM emp e
WHERE e.sal IN(
SELECT MIN(sal)
FROM emp
GROUP BY deptno
);**示例九、**查詢出不與每個(gè)部門中最低工資相同的全部雇員信息
--查詢出不與每個(gè)部門中最低工資相同的全部雇員信息
SELECT *
FROM emp e
WHERE e.sal NOT IN(
SELECT MIN(sal)
FROM emp
GROUP BY deptno
);FROM子查詢:
FROM字句以后跟上的數(shù)據(jù)來(lái)源不僅是數(shù)據(jù)表,還能夠是一個(gè)查詢結(jié)果,這就是FROM子查詢
通常FROM子查詢的返回類型的多行多列的結(jié)果集javascript
查詢出平均工資高于2000的職位名稱以及該職位的平均工資java
第一種方式:能夠使用HAVING字句實(shí)現(xiàn)
SELECT job,AVG(sal)
FROM emp
GROUP BY job
HAVING AVG(sal)>2000;
第二種方式:使用FROM子查詢
SELECT job,avgsal
FROM (
SELECT job,AVG(sal) AS avgsal
FROM emp
GROUP BY job) temp
WHERE temp.avgsal>2000;查詢出有傭金的而且工資高于傭金的員工信息:web
SELECT e1.empno,e1.ename,e1.comm,e2.sal FROM emp e1,emp e2 WHERE e1.comm IS NOT NULL AND e1.comm<e2.sal AND e1.empno=e2.empno;
總結(jié):
1.FROM 子查詢的數(shù)據(jù)來(lái)源是另一個(gè)查詢的結(jié)果,這個(gè)子查詢的結(jié)果至關(guān)于一張臨時(shí)數(shù)據(jù)表
2.必須為子查詢定義別名
3.若是要使用子查詢中的字段,則應(yīng)該使用"別名.字段名"的方式進(jìn)行引用
select子查詢
select后面的子查詢使用,只能是標(biāo)量查詢
#案例:查詢每個(gè)部門的員工個(gè)數(shù)
SELECT d.*,(
SELECT COUNT(*)
FROM employees
WHERE employees.`department_id`=d.department_id
)
FROM
departments d;#案例:查詢員工號(hào)=102的部門名
SELECT department_name
FROM
employees e
INNER JOIN
departments d
ON
e.`department_id`=d.`department_id`
WHERE
e.`employee_id`=102;用子查詢
SELECT (
SELECT department_name
FROM
employees e
INNER JOIN
departments d
ON
e.`department_id`=d.`department_id`
WHERE
e.`employee_id`=102
);
`department_id`=d.`department_id`
WHERE
e.`employee_id`=102;用子查詢
SELECT (
SELECT department_name
FROM
employees e
INNER JOIN
departments d
ON
e.`department_id`=d.`department_id`
WHERE
e.`employee_id`=102
);到此這篇關(guān)于Mysql嵌套子查詢的文章就介紹到這了,更多相關(guān)Mysql子查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
M1芯片安裝mysql8.0數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟(圖文)
這篇文章主要介紹了M1芯片安裝mysql8.0數(shù)據(jù)庫(kù)的實(shí)現(xiàn)實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
mysql簡(jiǎn)單實(shí)現(xiàn)查詢結(jié)果添加序列號(hào)的方法
這篇文章主要介紹了mysql簡(jiǎn)單實(shí)現(xiàn)查詢結(jié)果添加序列號(hào)的方法,結(jié)合實(shí)例形式演示了2種查詢結(jié)果添加序列號(hào)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
MySQL實(shí)現(xiàn)類似Oracle序列的方案
今天小編就為大家分享一篇關(guān)于MySQL實(shí)現(xiàn)類似Oracle序列的方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
mysql?DISTINCT選取多個(gè)字段,獲取distinct后的行信息方式
這篇文章主要介紹了mysql?DISTINCT選取多個(gè)字段,獲取distinct后的行信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
在sql中對(duì)兩列數(shù)據(jù)進(jìn)行運(yùn)算作為新的列操作
這篇文章主要介紹了在sql中對(duì)兩列數(shù)據(jù)進(jìn)行運(yùn)算作為新的列操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10

