標簽:名稱 nio select 效率 臨時 manager 于平 sel art
多張表聯合起來查詢即爲連接查詢,可分爲:
內連接中的等值連接
// 从emp表中查询ename,从dept表中查询员工所在的部门名稱,即dname
mysql> select e.ename as employee,d.dname as department
-> from emp e
-> inner join dept d
-> on e.deptno=d.deptno;
其中inner可以省略
內連接中的非等值連接
// 从emp表中查询ename,从salgrade表中查询员工薪资等级
mysql> select e.ename employee,s.grade
-> from emp e
-> join salgrade s
-> on e.sal between s.losal and s.hisal;
內連接中的自連接,也就是自己相當于多張表
// 从emp表中查询ename和员工的领导的名字
mysql> select e.ename employee,l.ename leader
-> from emp e
-> join emp l
-> on e.mgr=l.empno;
在該查詢結果中,不包括沒有領導的員工
外連接中表有主次之分,而內連接中表沒有主次之分。主表就是查詢其中的全部數據,關聯查詢此表中的數據。右外連接表示join右側的表是主表,左外連接則join左側的是主表
// 从emp表中查询ename和员工领导的名字,没有领导的员工也要包括
mysql> select e.ename employee,l.ename leader
-> from emp e
-> left outer join emp l
-> on e.mgr=l.empno;
可以查詢到emp表中的全部員工,沒有領導的則leader字段顯示NULL,上述語句可以改寫爲右連接,其中的outer可以省略。
mysql> select e.ename employee,l.ename leader
-> from emp l
-> right join emp e
-> on e.mgr=l.empno;
可見,外連接查詢的結果的數量>=內連接的查詢結果的數量。一條SQL語句中內連接和外連接可以同時存在。
// 从emp表中查询全部员工名字、领导名字,所在部门名字、薪资等级
mysql> select e.ename as employee,l.ename as leader,d.dname as dept,s.grade
-> from emp e
-> join dept d
-> on e.deptno=d.deptno
-> join salgrade s
-> on e.sal between s.losal and s.hisal
-> left join emp l
-> on e.mgr=l.empno;
上述join...on..語句的順序不重要,也就是說
mysql> select e.ename as employee, l.ename as leader,d.dname as dept,s.grade
-> from emp e
-> left join emp l
-> on e.mgr=l.empno
-> join dept d
-> on e.deptno=d.deptno
-> join salgrade s
-> on e.sal between s.losal and s.hisal;
查詢出來的結果一樣,只是順序不一樣。
子查詢即查詢語句中嵌套查詢語句
where子句中嵌套select:
// 从emp表中查询薪资大于平均薪资的员工姓名和其薪资
mysql> select ename as name,sal as salary
-> from emp
-> where sal>(select avg(sal) from emp);
from子句中嵌套select,可以把子查询的结果当作一张臨時表
// 从emp和salgrade表中查询不同岗位的平均薪资和薪资等级
mysql> select t.job,t.avgsal,s.grade
-> from (select job,avg(sal) as avgsal from emp group by job) as t
-> join salgrade s
-> on t.avgsal between s.losal and s.hisal;
注意,这里最好给子查询的臨時表的查询字段都取个别名。
此外,union用于合並查詢結果集
mysql> select ename,job from emp where job=‘MANAGER‘
-> union
-> select ename,job from emp where job=‘SALESMAN‘;
與
mysql> select ename,job from emp where job=‘MANAGER‘ or job=‘SALESMAN‘;
查詢結果一樣,但是使用union的效率更高。
limit用于分頁查詢,即依照條件取出部分查詢結果
mysql> select ename,sal from emp order by sal desc limit 2,3;
其中2是起始位置,0時可以省略,3是取出的結果數量。
mysql> select ename,sal from emp order by sal desc limit 5;
limit (pageNo-1)*pageSize, pageSize;
標簽:名稱 nio select 效率 臨時 manager 于平 sel art
原文地址:https://www.cnblogs.com/larissa-0464/p/14924220.html