为方便查询语句的学习,首先创建一个示例表:
表的结构:
表里的数据:
基本的数据查询:
1. 显示表的数据 select * from emp;
显示某些列的数据 select id,name,sex from emp;
显示满足某些条件的某些列的数据: select id,name,sex from emp where id = 101;
显示的时候更改列的显示名称:select id as '编号',name as '姓名' from emp where id = 102;
where条件子句的扩展说明:
在MySQL中有许多比较运算符:
(1)> >= < <=
(2) IS NULL IS NOT NULL
(3)BETWEEN value1 AND value2 NOT BETWEEN value1 AND value2
(4) IN(value1,value2,value3) NOT IN (value1,value2,value3)
(5)模糊查询匹配like ,not like
% 匹配任意个字符,包括零个
_ 匹配一个字符
\% 匹配字符%
\_ 匹配字符_
实例: where id like 12_; 当id是三个字符且开头是12时匹配到。
where name like '刘%'; 匹配所有姓刘的记录。
where name not like'刘%' 查找所有不姓刘的记录。
MySQL中还可以使用正则表达式实现更复杂的模糊查询,格式是 where expr REGEXP 正则表达式字符串。
系统将会对字段expr执行正则表达式检查,返回符合要求的行。
2.使用MySQL函数实现统计查询
查询公司总的人数: select count(*) from emp; 或者 select count(id) from emp;
查询公司总的部门数:1.显示部门字段,select dep from emp;这时会有很多重复数据,去除重复数据,使用distinct
2.显示部门,select distinct dep from emp;
3.显示部门的数目:select count(distinct dep) from emp;
查询开发部的总人数:select count(id) from emp where dep='开发部'; 或者开发部门的名称不十分统一,但都有开发2字:select count(id) from emp where dep like '%开发%';
查询总薪水:select sum(salary) from emp
查询开发部门的总薪水:select sum(salary) from emp where dep like '%开发%';
查询平均薪水:select avg(salary) from emp;
查询开发部门的平均薪水:select avg(salary) from emp where dep like '%开发%';
除此之外,还有求最大值,最小值的函数max , min ;
3.对查询结果的处理--分组和排序
排序:select id,name,salary from emp order by salary desc; asc表示升序排列,desc表示降序排列
分组 group by 分组的作用是限定sum,avg,max.min等函数的作用范围,使得可以分别求对应的数据:
查询各个部门的总薪水:select dep,sum(salary) from emp group by dep;
查询各个部门的最高最低薪水:select dep,max(salary),min(salary) from emp group by dep;
4.日期查询相关技术
查询在某天过生日的人:select name,birth from emp where birth like '%11-11%'; 11月11号过生日的人
查询今天过生日的人:select name,birth from emp where birth like (select concat('%',(select date_format(now(),'%m-%d'))));
查询年龄: select name,date_format(from_days(to_days(now())-to_days(birth)),'%y') as age from emp;其中求年龄的语句date_format(from_days(to_days(now())-to_days(birth)),'%y')。就是用现在的时间减去出生日期然后取年份。