MySQL——高级数据操作

一    高级查询

1 去重复查询 distinct(字段名):distinct要放在要查询的字段的最前面。

  select distinct(sage) , sname from student;

2  限定行数的查询 limit  limit后面的参数是一个或两个

    limit  n 表示从第一行开始返回n行结果

    limit m,n表示从第m+1行开始返回n行结果,所以limit是可以实现数据分页的效果

3条件过滤

    1  单条件过滤:select  字段1,字段2  from  表名  where  字段3=值;

       这里最后面的关系运算符有:>  >= < <=   =   !=

     2  多条件过滤:select  字段1,字段2  from  表名  where  条件1  and或者or  条件2;

4  选择范围

    select *from  表名  where  字段  between m  and n;

    betweem后面的是一个闭区间即[ m, n ]

5  定义集合(这里的关键字是in/not in

    select *from  表名  where  字段  in( l,m ,n);

    select *from  表名  where  字段  in( 22,24 ,25);查看年龄为22,24,25的学生的信息。

6模糊查询

select *from  表名  where  sname  like'_';

select *from  表名  where  sname  like'd%';所有以d开头 的

select *from  表名  where  sname  like'%a';所有以a结尾的

select *from  表名  where  sname  like'%a%';只要名字中有a的数据

select *from  表名  where  sname  like'_a%';查询名字中第二个字母是a的数据

关于like模糊查询,有两个关键字需要记住:

                                       _(下划线):代表任一一个字符,可能代表a也可能代表b...

                                       %(百分号):代表任意的n个字符,可能代表ab也可能代表abcd...

7处理空值数据

select *from  表名  where  sagel  is null;

    判断条件不能是字段=null,要写为字段 is null // is  not null;

8排序操作

使用order by排序时字段后面加上asc或desc     asc表示正序desc表示倒序

select *from  表名  order by sage asc;

select *from  表名  order by sage desc;

多次排序

select *from  表名  order by sage asc,sexx desc;

sql执行顺序:1执行from选表 2where条件过滤 3select选字段 4order by排序

二  聚合分组

2.1 聚合函数

SQL中提供的聚合函数可以用来求值,统计等

count():统计行数量(可以是某一个字段,也可以是某一个表)

sum():求某个列的和             如果指定列是字符串类型,那么使用字符串排序运算;

avg():求某个列的均值          如果指定列是字符串类型,那么使用字符串排序运算;

max():求某个列的最大值     如果指定列类型不是数值类型,那么计算结果为0;

min():求某个列的最小值      如果指定列类型不是数值类型,那么计算结果为0;

1,select count(计数对象) from  表名  where   条件;

count(*) 计数表的所有行,包括null值 :select count(*) as  con  from  表名  ;计算表的所有行记录,con是新起的别名

count(*) 加where条件计数表的记录:select count(*) from  表名  where   sexx=0;计算有多少女生

count(字段) 计算有多少不重名女生  select count(distinct sname) as '人数' from  表名  where  sexx=0;//修饰的字段为参

2,计算年龄和 select  sum(sage) from student;

3,  计算平均年龄select  avg(sage) from student;

4,返回年龄最大最小的学生信息select  max(sage) , min(sage) from student;

2.2 分组 group by  

1,查询每个部门编号和每个部门的工资和:

    select deptno, sum(sal) from emp group by (deptno);

2, 查询每个部门的编号以及每个部门工资大于1500的人数:

   select deptno, count(*) from emp where sal>1500 group by deptno;

加入where条件执行顺序:where过滤——分组——聚合

后面也可以用having过滤如下:

2.3   聚合过滤 (实现在进行聚合后再执行过滤)

  • 查询工资总和大于9000的部门编号以及工资总和:
  • select deptno, sum(sal) from emp group by deptno having sum(sal)>9000;
  • 查询平均年龄大于22岁的不同学生
  • select sname, avg(sage) as  averege from student   group by (sname) having avg(sage)>22;

SQL顺序:执行from—where条件过滤—group by—执行select选择列—having条件过滤—order by排序—limit限定行数(分页)

注意: 

1. having是在分组聚合后对数据进行过滤,而where是在分组前对数据进行过滤 
2. having后面可以使用聚合函数(统计函数),where后面不可以使用聚合函数
凡是和聚合函数同时出现的列名,一定要写在group by 之后 即这里的sal   sname
group by 一般会合聚合函数配合使用,单独使用的时候意义不大

三 子查询

1在where中嵌套

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值