期末数据库命令复习

  • 连接字符串

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 xo在x列表中
o not in xo不在x列表中
o between x and xxo在x到xx之间
o not between x and xxo 不在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 可以删除多余的记录

截屏2021-07-04 上午10.59.12

select distinct*from tb;

截屏2021-07-04 上午11.00.12

可以看到将重复删除

指定多个条件进行选择

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的值

截屏2021-07-04 上午11.19.42

使用多个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)]

但是如果只是这样的话,他人难以知道这个高、中等、低表示的含义,因此我们可以为其取一个别名截屏2021-07-04 上午11.52.57

排序

按照升序排序并显示

我们可以使用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对分组后的结果进行排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值