文章目录
- 连接字符串
concat(a,b,c)
例如:员工号+姓名+先生
- select concat(empid,name,“先生”)from tb1;
字符串操作中常用的函数
- 从右取出:select right(empid,2) from tb1;
显示列empid最右边的两个字符
-
从左取出:select left(empid,2)from tb1;
-
从第X哥字符开始截取n个字符:substring函数:
例如:select from substring (empid ,2,3)from tb1;
从列empid 中的第二个字符开始连续显示3个字符
- 重复函数:repeat函数
select repeat(’.’,age)
其重复次数为列age的值
- 反转显示
reverse函数:
select reverse(name)from tb1;
日期和时间函数
now函数:用于返回当前日期和时间函数。
确定记录数并显示
可以使用limit来限制显示的记录数
select 列名 from 表名 limit 显示的记录数;
例如:select * from tb limit 3;
这样只会显示三条记录
使用where提取记录
·如果单纯的执行表示删除的delete 或者表示更新的update,所有的记录都会被删除或者更新,如果使用where设置条件,就可以将需要用到的记录作为删除或者更新的对象
要想将提取的内容限定为符合某一条件的记录,就需要使用where
select 列名 from 表名 where 条件;
比较运算符
常见的比较运算符
比较运算符 | 含义 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
<= | 小于等于 |
>= | 大于等于 |
<> | 不等于 |
o in x | o在x列表中 |
o not in x | o不在x列表中 |
o between x and xx | o在x到xx之间 |
o not between x and xx | o 不在x到xx之间 |
使用字符串作为条件
假设在表tb中,列empid是字符串类型,如果想显示empid为A101的记录,和数值一样使用“ =”设置条件即可
select*from tb where empid=‘A101’;
这种情况下,列empid的内容必须与"A101"完全匹配
like模糊匹配
如果想使用“包含xx字符”这种含糊不清的条件执行查询,就需要用到like。
例如包含“啊”这个字符的条件要写成like ‘啊’
select *from tb where empid like ‘A101’;
设置条件时,“%”代表任意字符串,“_ "表示任意一个字符
通配符 | 含义 |
---|---|
% | 任意字符串 |
_ | 任意一个字符 |
指定字符串 | 符合的例子 |
---|---|
%县 | 非常好的县,埼玉县 |
福% | 福井县、福岛、福 |
长_县 | 长野县、长崎县、长海县 |
%县% | 包含县的就可以,县,县名,长海县 |
举个例子
select*from tb1 where name like ‘%川%’;
这个表示表中有“川”“川田”或者“小副川”也会一并提取出来
进行前方一致检索,可以通过name like “川%”
进行后方一致检索,可以通过name like “%川”
进行部分一致检索,可以通过name like “%川%”
提取不包含指定字符串的记录
提取不包含某字符串的记录时需要使用not like 命令
举个例子
select*from tb1 where name not like “左%”;
提取表tb1的列name中不以字符左开头的记录
使用null作为条件
null表示为空值,没有向表中传入数据,就会输入null
举例:
insert into tb(name) values(“姓名”);
这表示仅向姓名列name中输入数据,其他列中就会输入null
当列值为null时
提取列值为null的记录时需要使用is null
例如:
select*from tb where age is null
从表tb中提取列age为null的记录
当列值非null时
提取列值不是null的记录时需要使用is not null
select*from tb where age is not null;
注意:当提取值为null的记录时,即使使用where age=null,也无法提取相应的记录
删除多余的记录
当表格中有多个重复的数字时,命令加上distinct 可以删除多余的记录
select distinct*from tb;
可以看到将重复删除
指定多个条件进行选择
and运算和or运算在编程语言逻辑表达中都是常见的一种形式
使用and
如果使用and运算符就表示同时满足多个条件
比如从列sales的值大于等于50、小于等于100的示例
select*from tb where sales between 50 and 100;
select*from tb where sales>=50 and sales <=100;
示例:查询满足列empid 的值最后为1且列month的值
使用多个and或者or
and和or可以同时使用,不限制使用次数
查询empid为1结尾且month是4或者sales大于等于200
在员工号码为1结尾是4月份的营业额的基础上添加销售量大于等于200
select*from tb where empid like'%1' and month=4 or sales>=200;
运行规则:
当有and和or时候,优先处理and运算
思考题:如果要在表中查询销售大于等于200,或者员工ID为1结尾且是4月份 ,该如何处理?
这个处理表明了应该先提取满足销售额大于等于200万元,或者员工号为1结尾的记录,然后再从这个结果中提取满足4月份这个条件的记录,可以考虑一下()优先级处理
select*from tb where (sales>=200 or empid like '%1') and month=4;
使用case when
根据条件变化输入值
格式 根据条件改变并显示值
case
when 条件1 then 显示的值
when 条件2 then 显示的值
else 不满足的值
end
练习题:
当销售额(sales)大于等于100时为‘高’,大于等于50小于100时为‘中等’,否则为‘低’
用上述内容写出相关的sql语句
select
case
when sales>=100 then '高'
when sales>=50 then '中等'
else '低'
end
from tb;
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsFYmR2h-1625408248585)(/Users/wcj/Desktop/截屏2021-07-04 上午11.40.25.png)]
但是如果只是这样的话,他人难以知道这个高、中等、低表示的含义,因此我们可以为其取一个别名
排序
按照升序排序并显示
我们可以使用order by按照指定的列值顺序显示
格式 按照升序显示记录
select 列名 from 表名 order by 作为键的列
默认情况下记录是为升序(作用与ASC一样)
select*from tb order by sales;
select*from tb order by sales asc;
按照降序排序
按照降序排序的时候,需要给命令加上DESC
DESC和ASC需要写在order by 列名的后面
指定记录的显示范围
指定记录范围能够使得我们查找变得更加方便
在MySQL中,我们使用limit来限制显示的记录数
格式。指定范围并显示
select 列名from 表名 limit 现实的记录数 offset 移动多少位后开始显示记录
如果设置为offset 3,则表示从第一条记录开始移动3位后,从第四条记录开始显示
练习题:对于销售信息表tb,按照销售额(sales)从高到低的顺序将派在第四位和第五位的记录显示出来
select *from tb order by sales desc limit 2 offset 3
分组显示
分组时需要使用group by 命令
格式。 分组显示
select 列名 from 表名 group by 用于分组的列名;
select*from tb group by empid;
计算各组的记录数
计算个数需要使用count函数
count 用于计算除null以外列x的值的个数
显示各组的总和以及平均值
计算总和的函数为sum()
设置条件分组显示
按组处理
使用having为分组的结果值设置提取条件
分组并设置记录的提取条件 select 统计列 from 表名 group by 分组列 having 条件;
问题:按照员工号(empid)分组计算总销售额,但仅显示小组总销售额大于等于200万元的记录
select empid sum (sales) from tb group by empid; having sum(sales) >=200;
提取记录后分组
问题:提取销售额大于等于50万元的交易记录,并以该记录为对象计算各员工的平均销售额
select
empid ,avg(sales)
from tb
where sales>=50
group by empid;
分组后排序
记述时先写group by 在写order by
问题:将表(tb)员工的平均销售量按照从高到低的顺序显示
select empid ,avg(sales) from tb group by empid order by avg(sales) desc;
分组方法总结
两种类型:
a. 提取记录后分组
需要使用where设置条件并提取记录,然后通过group by进行分组
b.分组后提取记录
需要先进行group by进行分组,然后使用having提取记录。我们使用order by对分组后的结果进行排序