整理了一些Mysql的查询语句,希望对大家有帮助,祝大家心想事成万事如意!
基本查询
select 字段 from 表名 where 条件;
排序查询 select 字段 from 表名 order by 排序字段 [asc升序|desc降序] limit 前几行/中间几行;
去重 select distinct 字段 from 表名;
组合查询(结果合并返回单个结果集) select 字段 from 表 union select 字段 from 表;
注意:必须查相同数量的列,列的数据类型要相似,union自动去重,union all不去重
分组查询(可用于统计数量) select 字段,count(*) from 表 group by 字段 order by count(*);
过滤分组 select 字段,count(*) from 表 group by 字段 having count(*)>10 order by count(*) limit 3,5;
注意:having必须和group by联用;where是分组前过滤,having是分组后过滤
连接查询:
内连接:
(1)等值连接(两个表) select * from 表1 join 表2 on 表1.字段=表2.字段;
(2)非等值连接(一般用于判断等级,范围,区间)select e.ename , e.sal , s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;查询员工薪水等级
(3)自连接(一个表自己连自己)select e1.ename , e2.ename mgr_name from emp e1 join emp e2 on e1.mgr=e2.mgr;
外连接:
左连接:查表1的全部信息与表1和表2的交集;
右连接:查表2的全部和表1与表2的交集
Select e1.ename , e2.ename mgr_name from emp e1 left/right outer join emp e2 on e1.mgr=e2.empno
子查询/嵌套查询(在括号内的select):
(1)子查询用于过滤
Select 字段1 from 表1 where 字段1 [not] in (select 字段1 from 表2 where ….) 子查询一般与not in/in连用
Select * from emp where sal > all/any/some(select infull(comm,0) from emp); 与all联用一般用于比较,代表需要满足条件的所有值; 而some和any含义相同,代表满足其一就可以
(2)子查询用于计算
Select dname,(select count(*) from emp where dept.deptno=emp.deptno) as emps from dept; 查询部门名和部门人数