使用某个数据库
use <数据库名称>
查询当前使用的数据库
select database()
select version() //查询版本
//\c结束一条语句
//exit 退出mysql
查看创建表的语句
会显示对应表,创建时使用的sql
语句
show create table <表名称>
简单查询语句
sql
语句以分号结尾,不区分大小写
select <字段名1...> from <表名>;
select * from <表名>;//实际开发中不建议使用
给查询结果的列重命名
select <字段名..>,<字段名>*12 as <重命名名称> from <表名>;
其中*12
;在mysql
中,可以直接进行运算返回结果
如果是字符串的话,使用''
标记
条件查询
select <字段> from <表名> where <条件>
支持的运算符
=
<>或!=
<
<=
>
>=
between..and... //是闭区间
is null
and
or
in
not
like //模糊查询支持%或下划线匹配
模糊查询
找出名字中含有O的
%
代表任意多个字符,_
表示任意一个字符
select <字段名> from <表名> where <字段名> like '%O%'
排序
order by
<字段名>
//asc 升序
//desc 降序,跟在字段名后面
按照工资降序排列,当工资相同的时候再按照名字的升序排列
select <字段名> from <表名> by <字段名> desc, <字段名> asc
越靠前的字段,作用越大,只有当前面字段的内容相等时,后面条件才生效
分组函数
会自动忽略NULL
count //计数
sum //求和
avg //平均值
max //最大值
min //最小值
ifnull
处理空值
ifnull将NULL
替换为指定内容
select ename,ifnull(comm,0) as comm from emp
替换为0
group by 和having
group by
按照某个字段或者某些字段进行分组
having
对分组之后的数据进行在此过滤
找出每个工作岗位的最高薪资
select <字段名> from <表名> group by <字段名>
多个字段联合分组
找出每个部门不同工作岗位的最高薪资
select deptno,job,max(sal) from emp group by deptno,job;
找出每个部门的最高薪资,要求显示薪资大于2900的数据
select max(sal),deptno from emp group by deptno having max(sal) > 2900;
//where 更好
select max(sal),deptno from emp where sal> 2900 group by deptno ;
去除重复记录
select distinct job from emp;
连接查询
连接分类
内连接:
- 等值连接
- 非等值连接
- 自连接
外连接:
- 左外连接
- 右外连接
全连接
等值连接 inner
查询每个员工的部门名称,要求显示员工名和部门名
select e.name,d.dname from emp e join dept d on e.deptno = d.deptno
...join ... on ...
后面接连接条件
非等值连接
特点:连接条件中的关系是非等量关系
找出每个员工的工资等级,要求显示员工名,工资,工资等级
select e.name,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s. hisal;
自连接
找出每个员工的上级领导,要求显示员工名和对应领导名
select a.ename as '员工名' ,b.ename as '领导名'
from emp a
inner join emp b
on a.mgr = b.empno
外连接
内连接:假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的
外连接:假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带查询副表。
select a.ename '员工',b.ename '领导'
from emp a
left join emp b
on a.mgr = b.empno
特点:主表的数据,无条件的全部查找出来
三表连接查询,找出每个员工的部门名称以及工资等级。
select e.name,d.name,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;
嵌套子查询
找出每个部门平均薪水的薪资等级
select t.*,s.grade
from (select deptno,avg(sal) as avgsal from emp group by deptno) t
join salgrade s
on t.avgsal between s.losal and hisal;
找出每个员工所在的部门名称,要求显示员工名和部门名
select e.name
(select d.dname from dept d where e.deptno = d.deptno) as dname
from emp e;
union
可以将查询结果集相加
找出工作岗位是SALESMAN 和 MANAGER的员工
第一种:
select ename,job from emp where job = 'MANAGER' or job='SALESMAN';
第二种:
select ename,job from emp where join in('MANAGER','SALESMAN');
第三种:
select ename,job from emp where job = 'MANAGER'
union
select ename,job from emp where job='SALESMAN';
limit(分页查询)
mysql``特有的``,Orace
l中使用rownum
limit取结果中的部分数据
,这是他的作用
语法机制:
limit startIndex,length
//startIndex表示起始位置
//length表示取几个
案例:
取出工资前五名的员工
select ename,sal from emp order by sal desc limit 0,5;
找出工资排名第4到第9名的员工
select ename,sal from emp order by sal desc limit 3,6;
通用的标准分页sql
每页显示三条数据
第一页:0,3;
第二页:3,3;
第三页:6,3;
第四页:9,3;
第五页:12,3;
每页显示pagesize条记录:
第pageNo页:(pageNo-1)*pageSize,pageSize
pageSize是什么?是每页显示多少条记录
pageNo是什么?显示第几页
- 本文链接:https://archer-lan.github.io/2022/03/21/MySql%E5%AD%A6%E4%B9%A0-%E6%9F%A5%E8%AF%A2/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。