目录
1:查询基本
2:起别名
3:条件查询
4:排序数据
5:单行处理函数
6:多行处理函数
7:分组查询
MySQL查询语句我们用到的主要是select。
假设我们这里有个表格名叫stu:
这个列的名字的名称就叫字段,如name,score,age,sex。
(1)查询基本
select *from stu;//列出所有的字段
select name from stu;//列出的是name的字段
select 字段名 from 表格;
select 字段1,字段2,字段3 from stu;//列出多个字段
(2)起别名
就是将列出的字段换个名称而已,但注意只是换个名字,并没有修改表内容。(记住这句话:select永远不会修改表格内容)
select 字段1 as 牛逼 from stu;//字段1名字修改成牛逼.(嘿嘿嘿)
如果起的别名里面有个空格的话,一定要加个单引号哦!!!
多个字段逗号隔开就行。
(3)条件查询
顾名思义,条件查询不再只是单纯地查询了,而是带有条件的查询。
这时候就需要where语句了。固定格式:
select 字段 from 表格名 where 条件 ;
运算符如下:
> 大于
< 小于
>= 大于等于
<= 小于等于
!= 不等于
between...and... 在两个值之间,等同于大于等于...小于等于
and 和运算
or 或运算
not 取非运算(注意用在is和in)
is null 为空
is not null 非空
in 包含
like 模糊查询,%匹配任意字符,_匹配一个字符
比如:找出女性同学:
select name as '名字',sex as '性别' from stu where sex='女';
要说in的用法,那我在创建个表格woker
假如,筛选job是wr或者是op的
select name,job from woker where job='op' or job='wr';//用or写的
select name,job from woker where job in('op','wr');//用in写的
但是注意in不是个区间,它是具体的值。
如:查找sal=1990和1890的name
select name,sal from woker where sal in(1990,1890);
相反not in就是不在那几个值之间了,就是不是那几个值的意思了
好,接下来是模糊查询,就要用到like了。
select 字段名 from 表名 where 字段 like 条件;
如查询woker表格中sal中有2的name。
select name,sal from woker where sal like '%2%';
如查询woker表格中sal第三位数字是9的name
select name,sal from woker where sal like '__9%';
(4)排序数据
还是使用woker表格,如果我们想把sal字段从小到大升序排好,该怎么做呢
select name,sal from woker order by sal;//默认是升序的
select name,sal from woker order by sal desc;//这个是降序
select name,sal from woker order by sal asc;//这个是升序
这只是单个字段的排序,那多个字段呢?
如:查找sal升序,如果sal相等,按照名字升序来,既然这样子,之前的woker表我有改了一下,如下图:
select name,sal from woker order by sal asc,name asc;
(5)单行处理函数
单行处理函数:一个输入一
lower 转换成小写
upper 转换成大写
substr 取子串,格式:substr(被截取的字符串名,起点位置,截取的长度),
注意,起始位置是1!!!!!!!!!
length 求长度
trim 去除空格
str_to_data 将字符串转换成日期
date_format 格式化日期
round 四舍五入,格式:round(数,保留几位)
rand 生成随机数
ifnull 将null具体转换成一个值
concat 将字符串进行拼接
个输出,一行一行地处理,一行处理完了,再继续处理下一行。
还是使用woker表格
如:查找name并全部大写
select upper(name) from woker;
如:查找name第二位是i
select name from woker where substr(name,2,1)='i';
如:将name首字母大写(用到了concat)
select concat(upper(substr(name,1,1)),substr(name,2,3)) from woker;
如:查询name中的长度(length)
select length(name) from woker;
举个trim的例子,查询name= ui
有空格差不多,用trim去除了空格,可查到。
ifnull处理空,为什么有这个函数呢,因为在数学运算中null参与的数学运算结果就是null
格式就是:
ifnull(数据,被当成哪个数);
(6)多行处理函数
特点:输入多行,输出一行
count 取得记录数
sum 求和
avg 求平均
max 取最大值
min 取最小值
多行处理函数又叫分组处理函数,所以在使用前一定要进行分组,分组之后才可以使用,如果没有分组,整张表默认为一组。
分组函数注意点:
1:分组函数,自动忽略null,所以不需要对null进行处理。
2:count(*)和count(字段)的区别。
count(*)统计的是总行数
count(某个字段)统计的是该字段下不为null的个数
3:分组函数不能用在where语句后面。
如查找比最低工资低的员工
不能写成:select name from woker where sal<min(sal);
4:分组可以组合一起使用。
(7)分组查询
在实际应用中可能需要进行分组之后对每一组的数据进行操作,这时候就需要分组了
select 字段
from 表格
grou by
...
;
关键字的顺序
select
....
from
....
where
.....
group by
.....
order by
.....
;
//执行顺序是
1:from
2:where
3:group by
4:select
5:order by
还是使用woker表格
如查询每个job工作岗位上的总薪水
select job,sum(sal) from woker group by job;
分组查询中查询的字段最好是group by后面的字段以及多行处理函数!!!
having:可以过滤分组过后进行查询,而且having必须与group by一起使用
如:查找每个性别中的最大薪资大于3000的
select sex,max(sal) from woker group by sex having max(sal)>3000;
如有错误,还请大佬指正!!!!!!