美文网首页
mysql 的常用命令(DQL)

mysql 的常用命令(DQL)

作者: iMikasa_ | 来源:发表于2021-09-05 21:53 被阅读0次

总结一下mysql 的常用操作

注意:本篇文章主要是显示一些查询语句的写法,起备忘作用

1.查询

  • 普通的查询
//查部门编号和部门名称
select deptno,dname from dept;
  • 起别名
//查部门编号和部门名称并给部门名称起别名
 select deptno,dname as 部门名称 from dept;
  • 条件查询
//查询工资是800的员工信息
select empno,ename from emp where sal = 800;
//查询工资不是800的员工信息
select empno,ename from emp where sal != 800;
//查询工资大于等于2450小于等于3000的员工信息
select empno,ename from emp where sal >=2450 and sal <=3000;
select empno,ename,sal from emp where sal between 2450 and 3000;
//查询部门编号是10和部门编号是20的的员工信息
select * from emp where deptno =10 or deptno=20;
select * from emp where deptno in(10,20);
//查询部门编号不是10和部门编号不是20的的员工信息
select * from emp where deptno not in (10,20);
//查询部门编号是10,20的员工信息,并且工资大于等于2500
select empno,ename,sal,deptno from emp where sal>=2500 and (deptno =10 or deptno=20);
//查询空字段
select * from emp where comm is null;
select * from emp where comm is not null;

注:
1.and和or同时出现,and优先级比or高,若想or先执行加括号
2.in 查出的是具体值,不是区间,相当于多个or

  • 排序
select ename ,sal from emp order by sal;      //默认升序
select ename ,sal from emp order by sal desc; //降序
select ename ,sal from emp order by sal asc;  //升序
select ename ,sal from emp order by sal asc ,ename asc;

注:最后一种,当我们按sal升序排序,发现有的值相同,我们可以在设置根据别的字段排序

  • 分组查询
//查询每个部门的最高工资
select deptno,max(sal) from emp group by deptno;
//查询每个部门的,每个工作的最高工资
select deptno,job,max(sal) from emp group by deptno,job;

注:在查询语句中,如果有group by,select 后面只能跟参与分组的字段或者分组函数,添加其他的没有意义

//查询每个部门平均工资并且,平均工资超过2500的
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2500;

注:这里的条件 是使用的having,原因是根据执行顺序来说avg(sal) > 2500(分组函数)不能在where处,

  • 执行顺序
    from -> where -> group by -> having -> select -> order by

先从表中查询数据,经过where条件筛选出符合条件的数据,对这些有价值的数据进行分组,分组之后在使用having继续筛选

  • 连接查询
    内连接,inner 可省略
//查询每个员工对应的部门名称
select e.ename ,d.dname from emp e inner join dept d on e.deptno = d.deptno;
//查询员工的工资等级
select e.ename,e.sal ,s.grade 
from emp e inner join salgrade s on e.sal between s.losal and s.hisal;
//查询员工对应的领导名
select a.ename as '员工名',b.ename as '领导名' 
from emp a join emp b on a.mgr = b.empno;

外连接,outer可省略

//查询员工的部门名,第一句和第二句效果一样
select e.ename ,d.dname from emp e right join dept d on e.deptno = d.deptno;
select e.ename ,d.dname from dept d left join emp e on e.deptno = d.deptno;
//查询员工对应的领导名
select a.ename as '员工名',b.ename as '领导名' 
from emp a left join emp b on a.mgr = b.empno;

四张表连接!!!

//查员工信息,要求是员工姓明,领导姓名,部门名称,工资,工资等级
select e.ename as '员工名',l.ename as '领导名',d.dname,e.sal,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;
  • 子查询
    where后边的子查询
//查询工资不低于最低工资的员工姓名和工资
select ename,sal from emp where sal>(select min(sal) from emp);

from后边的子查询

//查询每个部门平均工资的工资等级
select t.*,s.grade 
from 
(select job,avg(sal) as avgsal from emp group by job) t 
join 
salgrade s 
on 
avgsal between s.losal and s.hisal;

一些题

//查询每个部门的最高工资的员工信息
select 
emp.ename,emp.job ,t.* 
from emp join 
(select dept.deptno,dept.dname,max(sal) as m from emp join dept 
where emp.deptno = dept.deptno group by deptno) t 
where emp.sal = t.m;

相关文章

网友评论

      本文标题:mysql 的常用命令(DQL)

      本文链接:https://www.haomeiwen.com/subject/qrqdwltx.html