MySQL数据库基本操作(二)

 

DQL:数据查询语言

基础查询

查询所有列

Select *from 表名;

查询指定列

Select 列名1,列名2…… from 表名;

条件查询where

常见运算符

关系运算符:=、!=、<>(不等于)、>=、<=

区间:between A and B  ->[A,B]

And:并且,和

Or:或者

Is null:空

Not:否,非

Is not null:非空

In:在……里面

 

并且and 或者or

查询性别女,并且年龄65的学生记录

select * from stu where gender='female' and age=65;



查询学号S_1001或者名字为xxx的记录

select * from stu where sid='S_1001' or sname='xxx';

 

在什么里面in

查询学号是S_1001,S_1002,S_1003的记录

写法一:

select * from stu where sid in('S_1001','S_1002','S_1003');

写法二:

select * from stu where sid='S_1001' or sid='S_1002' or sid='S_1003';

 

是否为空is (not)null

查询年龄为null的记录

select * from stu where age is null;



查询名字不为空的学生信息

select * from stu where sname is not null;

区间between and

查询年龄为20~40岁之间的

方式一:select * from stu where age >=20 and age<=40;

方式二:select * from stu where age between 20 and 40;

非!=  <>  not

查询性别:非男的 学生记录

select * from stu where gender !='male';

select * from stu where gender <>'male';

select * from stu where not gender='male';

模糊查询

介绍

(1)当想查询学生名字中包含字符a,就需要使用到模糊查询,用关键字是like(像)。

(2)通配符

_:任意一个字符

张_:张三,张三丰

张__:张三,张三丰

%:表示0或则和多个字符串

张%

通配符:_

#查询名字由5个字符组成的学生记录

select * from stu where sname like '_____';



#查询名字由5个字符组成的,并且第五个字符是i的学生记录

select * from stu where sname like '____i';

通配符:%

#查询名字是z开头的学生记录

select * from stu where sname like 'z%';



#查询名字中第二个字符是i的学生记录

select * from stu where sname like '_i%';



#查询名字中包含a字符的学生记录

select * from stu where sname like '%a%';

 

字段控制查询

去除重复数据(distinct去重)

查询员工部门信息

select distinct deptno from emp;

ifnull处理

#查询员工薪资(工资+奖金)

select ename,sal,comm,(sal+comm) from emp;

#问题:任何数据+null=null

#ifnull(A,B):如果A是null,使用B的值,如果A不是null,就使用B的值

select ename,sal,comm,sal+ifnull(comm,0) from emp;

别名(as)

给这个列换一个新的名字

select ename,sal,comm,sal+ifnull(comm,0) as money from emp;

#as:关键字可以省略

select ename name,sal,comm,sal+ifnull(comm,0) as money from emp;

排序 order by

升序:asc

查询所有学生信息,根据年龄进行升序排序

select * from stu order by age asc;

降序:desc

查询所有学生信息,根据名字进行降序排序

select * from stu order by sname desc;

升序且降序

查询所有学生信息,根据工资进行排序,如果工资相同按照员工号升序

select * from emp order by sal desc,empno asc;

聚合函数

MySQL系统提供了很多的函数

Count:统计个数,次数,null不统计

Max:最大值

Min:最小值

Sum:求和

Avg:平均值

Round:四舍五入

 

有使用聚合函数时,都会有别名

count函数

#查询emp表中记录数

#count(*):不会忽略null的值

select count(*) from emp;

 

总和sum  平均值avg  四舍五入round

总和

查询所有员工工资总和

select sum(sal) from emp;

 

平均值avg

计算员工的平均工资

select avg(sal),avg(comm) from emp;

 

四舍五入round

平均工资,保留2位小数

select round(avg(sal),2),avg(comm) from emp;

最大值max 最小值min

#查询员工表中,工资最高的,最低的

select max(sal) max_sal,min(sal) min_sal from emp;

分段函数case

#员工表中,根据薪资不一样,给不一样的评论

>4000  ---NB666

>3000  ---NB66

>2000  ---NB6

<2000  ---zz

select

 ename,sal,

 case

      when sal >4000 then 'NB666'

  when sal >3000 then 'NB66'

  when sal >2000 then 'NB6'

  else 'zz'

 end as 'pj'

from

 emp;

字符串的截取

Left(A,4)从左边开始截取A中前四个字符

Right(A,4)从右边开始截取A中前四个字符

1987-04-19 ---》1987

#(1)获取员工的入职年份

select left('1987-04-19',4);

#(2)获取员工的入职工龄

select ename,hiredate,2021-left(hiredate,4) from emp;

 

分组查询 group by

场景

统计各个部门的人数情况

按照性别统计人数

按照班级统计参加比赛的人数

  1. 分组之后的结果,和具体一条数据没有关系
  2. 分组会和聚合函数一起使用
  3. 需求中包含:“每”,“各”这种,group by

group by 分组

1.1统计各个部门的人数情况

1.2统计各个部门的平均工资

Deptnp  count  avg(sal)

10       3     2916.66667

20       5     2175

30       6     1566.66667



select deptno,count(*),avg(sal) from emp group by deptno;

1.3各个部门各个岗位人数

select deptno,job,count(*) from emp group by deptno,job;

 

having

需求一:算出平均工资超过2000的部门

算出各个部门的平均工资
过滤,只留下超过2000的部门
select

    deptno,avg(sal) as avg_sal

from

    emp

group by

    deptno

having

avg_sal>2000;



需求二:部门30中,平均工资超过1000的岗位

select

    deptno,job,avg(sal) as avg_sal

from

    emp

where

    deptno=30

group by

    job

having

    avg_sal>1000;

where和having的区别

Where:过滤;分组之前的过滤

Having:过滤;分组之后的过滤

limit限制

limit限制查询结果的条目数

1.1查询前五条数据

select * from emp limit 5;

1.2从第二条开始查到第五条-------下标从0开始

select * from emp limit 2,5;

使用场景:分页查询

如果一个页面显示10条数据,获取数据

第一次:limit 0,10

第二次:limit 10,10

第三次:limit 20,10

语法:limit , start len ; 从start开始,查len条

1.3查询各个部门平均工资前二

(1)各个部门平均工资

(2)对平均工资进行排序

(3)取前两位

select deptno,avg(sal) from emp group by deptno order by avg(sal) desc limit 2;

关键字执行顺序:

from -> where -> group by ->select -> having -> order by -> limit

你可能感兴趣的:(mysql)