子查詢就是指的在一個完整的查詢語句之中,嵌套若干個不同功能的小查詢,從而一起完成複雜查詢的一種編寫形式,為了讓讀者更清楚子查詢的概念。
子查詢傳回結果
子查詢可以傳回的資料類型一共分為四種:
單行單列:傳回的是一個具體列的內容,可以理解為一個單值資料;
#單行多列:傳回一行資料中多個列的內容;
多行單列:傳回多行記錄之中同一列的內容,相當於給了一個操作範圍;
在WHERE子句之中處理單行單列子查詢、多行單列子查詢、單行多列子查詢。
單行單列子查詢**範例一、**查詢公司之中薪資最低的僱員的完整資訊--查询公司之中工资最低的雇员的完整信息 SELECT * FROM emp e WHERE e.sal=( SELECT MIN(sal) FROM emp);
-- 查询出基本工资比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从事同一工作,并且基本工资高于雇员编号为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);
SELECT * FROM emp e WHERE (e.job,e.sal) = ( SELECT job,sal FROM emp WHERE ename='SCOTT') AND ename<>'SCOTT';
--查询与雇员7566从事同一工作且领导相同的全部雇员信息 SELECT * FROM emp e WHERE (e.job,e.mgr) =( SELECT job,mgr FROM emp WHERE empno=7566 );
--查询与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操作
**範例八、**查詢出與每個部門中最低工資相同的全部僱員資訊--查询出与每个部门中最低工资相同的全部雇员信息 SELECT * FROM emp e WHERE e.sal IN( SELECT MIN(sal) FROM emp GROUP BY deptno );
--查询出不与每个部门中最低工资相同的全部雇员信息 SELECT * FROM emp e WHERE e.sal NOT IN( SELECT MIN(sal) FROM emp GROUP BY deptno );
FROM字句以後跟上的資料來源不只是資料表,還能夠是一個查詢結果,這就是FROM子查詢
通常FROM子查詢的傳回類型的多行多列的結果集javascript
第一种方式:能够使用HAVING字句实现 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;
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;
select後面的子查詢使用,只能是標量查詢
#案例:查詢每個部門的員工數量SELECT d.*,( SELECT COUNT(*) FROM employees WHERE employees.`department_id`=d.department_id ) FROM departments d;
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 );
以上是怎麼分析Mysql中的巢狀子查詢問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!