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;