DQL:数据查询语言(单表)
2018-09-28 本文已影响6人
别动我名字呀
1.查询一张表的所有字段:
select * from 表名;
2.查询指定字段:
select 字段1,字段2,字段3….from 表名;
3.like(模糊查询)
select 字段1,字段2…
% :任意字符
_ :单个字符
例:
select * frome t_student where stuName like ‘%张三%”;
4.where(条件查询)
1.limit (分页查询)
指定从哪个位置开始,一共查询多少条
SELECT * FROM p_operation_log limit 0,10
2.and(并且)
查询性别为男,并且年龄为20的学生记录
select * from students where gender='男' and age=20;
3.or(或者)
查询性别为男,或者年龄为20的学生记录
select * from students where gender='男' or age=20;
4.in(包含)
查询学号为 1001,1008,10010的记录
select * from students where id=1001 or id=1008, or id=10010;
select * from students where id in(1001,1008,10010);
5.is null(为空)
查询年龄为null的值
select * from students where age is null;
6. is not null(不为空)
查询年龄不为null的值
select * from students where age is not null;
7.!= (不等于)
查询性别不为男的记录
select * from students where gender != '男'
8. between … and
查询年龄在18~20之间的学生记录
select * from students where age>=18 and age<=20;
select * from students where gae between 18 and 20;
5.字段控制查询
1.distinct(去重)
按照名字去重
select distinct name form students;
2. AS …(别名)
将字段name 改为resName
select name as resName from students
6.order by(排序)
ASC(从小到大 默认)
desc (从大到小)
按照年龄从小到大排序,有相同的则按照学号从大到小
select * from students order by age, id desc;
7.聚合函数
1.count() :(统计指定列不问null的行数)
查询工资加绩效大于5000的总人数
select count(id) from emp where ifnull(salary,0)+ ifnull(perfromance,0)>5000;
查询有绩效的人数和有管理费的人数
select count(perfromance),count(manage) form emp;
2.max():(计算指定列的最大值,如果列是字符串类型,那么使用字符串排序运算)
查询员工的最高工资:
select max(salary) from emp
3.min():(计算指定列的最小值,如果列是字符串类型,那么使用字符串排序运算)
查询员工的最低工资:
select min(salary) from emp
4.sum():(计算指定列的数值和,如果指定列是字符串类型,计算结果为0)
查询员工薪水总和
select sum(salary) from emp
5.avg():(计算指定列的平均值,如果指定列是字符串类型,计算结果为0)
查询所有员工的平均工资:
select avg(salary) from emp
8.group by(分组)
1.group by
select gender from emp group by gender;
当group by 单独使用时只展示每组的第一条记录
2.group_concat()
将所有员工分为男女两组,并显示所有名字:
select gender, group_concat(name) from emp group by gender;
3.group by() 结合聚合函数
将所有员工按照部门分组,并显示最高工资:
select dep, group_concat(salary) ,max(salary) from emp group by dep;
注:使用分组时,select 后面的字字段一般都会出现在group by后面
9.group by() +having
用来分组查询后指定一些条件输出结果;
1.查询工资总大于9000的部门名称以及工资总和
select dep sum(salsry) from emp
group by dep
having sum(salary) >= 9000;
having是对分组后过滤,可以使用聚合函数
where是对分组前过滤,不可以使用聚合函数
2.查询工资大于2000,工资总和大于9000的部门名称和工资总和
select salary dep sum(salary) from emp
where salary > 2000
group by dep
having sum(salary)>9000