MySQL基本查询

1.条件查询

1.1条件查询介绍

条件查询就是在查询时给出where语句,在where语句中可以使用如下如下运算符和关键字

  • =、!=、<>(不等于)、<、<=、>、>=;
  • between…and;相当于 >= and <=
  • IN(set):in查询包含记录的数据
  • is null :是空的 is not null :不是空的
  • and:并且 用来连接多个条件
  • or:或者
  • not:取反

1.查询性别为女,并且年龄小于50的记录

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

2.查询学号为S_1001,或者姓名为liSi的记录

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

3.查询学号为S_1001,S_1002,S_1003的记录

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

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

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

5.查询年龄为null的记录

select * from stu
where age is null;

6.查询年龄在20到40之间的学生记录

select * from stu
where age>=20 and age<=40;
select * from stu
where age between 20 and 40;

7.查询性别非男的学生记录

select * from stu
where gender!='male';
select * from stu
where gender<>'male';
select * from stu
where not gender='male';

8.查询姓名不为null的学生记录

select * from stu
where not sname is null;
select * from stu
where sname is not null;

2.模糊查询

2.1概述

关键字:like
语法:like ‘xxx’;
like一般和通配符一起使用

2.2通配符

%:表示匹配一个或者多个字符
_:表示匹配一个字符
[a-z]:表示匹配范围内任意一个字符

2.3范例

1.查询姓名由5个字母构成的学生记录

select * from stu
where sname like '_____';

2.查询姓名由5个字母构成,并且第5个字母为“i”的学生记录

select * from stu
where sname like '____i';

3.查询姓名以“z”开头的学生记录

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

4.查询姓名中第2个字母为“i”的学生记录

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

5.查询姓名中包含“a”字母的学生记录

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

3.字段控制查询

3.1去除重复记录

去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT。

select distinct sal from emp;

3.2查看雇员的月薪与佣金之和

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

3.3给列名添加别名

select sal+ifnull(comm,0) 
as 总工资,ename as 姓名 from emp;
select sal+ifnull(comm,0) 
总工资,ename 姓名 from emp;

3.4拼接字段

concat()函数:连接字段,形成字符串

select concat(ename,'的工资是:',sal+ifnull(comm,0))
from emp;

4.排序

关键字:order by;排序
语法:
order by 字段 asc : 升序排序,默认升序:如果不写,默认升序。
order by 字段 desc: 降序排序,desc必须写。
如果有多个排序条件:order by 字段1 desc,字段2 asc,…
1.查询所有学生记录,按年龄升序排序

select * from stu order by age asc;

2.查询所有学生记录,按年龄降序排序

select * from stu order by age desc;

3.查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序

select * from stu 
order by sal+ifnull(comm,0) desc,empno asc;

5.聚合函数

聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

5.1COUNT

1.当需要纵向统计时可以使用COUNT()。
查询emp表总记录数:

select count(*) as cnt from emp;

查询emp表中有佣金的人数:

select count(comm) cnt from emp;

查询emp表中月薪大于2500的人数:

select count(*) from emp
where sal>2500;

统计月薪与佣金之和大于2500元的人数

select count(*) from emp 
where sal+ifnull(comm,0)>2500;

查询有佣金的人数,以及有领导的人数:

select count(comm),count(mgr) from emp;

5.2SUM和AVG

查询所有雇员月薪和:

select sum(sal) from emp;

查询所有雇员月薪和,以及所有雇员佣金和

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

查询所有雇员月薪+佣金和

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

统计所有员工平均工资

select avg(sal) from emp;

6.MAX和MIN

查询最高工资和最低工资

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

7. 分组查询

分组查询:就是数据统计,一般都能聚合函数一起使用!group by :分组查询
语法:group by 要分组的字段
执行顺序:
from 表名
where 条件
group by 分组
having 过滤聚合函数的条件
order by 排序
1.查询每个部门的部门编号和每个部门的工资和

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

2.查询每个部门的部门编号以及每个部门的人数

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

3.查询每个部门的部门编号以及每个部门工资大于1500的人数

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

4.查询工资总和大于9000的部门以及工资和

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

8.LIMIT

LIMIT用来限定查询结果的起始行start,以及总行数size。
1.查询5行记录,起始行从0开始

select * from emp limit 0,5;

2.查询10行记录,起始行从3开始

select * from emp limit 3,10;
发布了28 篇原创文章 · 获赞 16 · 访问量 597

猜你喜欢

转载自blog.csdn.net/qq_37881565/article/details/102665802