MySQL表的增删查改


CRUD:Create(创建),Retrieve(读取),Update(更新),Delete(删除)。

Create

语法:

insert [into] talbe_name [(column [, column]...)] values (value_list) [,(value_list)]...

创建一张学生表
在这里插入图片描述

单行数据
在这里插入图片描述

多行数据
在这里插入图片描述
插入否则更新

INSERT ...ON DUPLICATE KEY UPDATE
	column = value [,column = value]

在这里插入图片描述

也可以通过MySQL函数获取受到影响的数据行数

SELECT ROW_COUNT();

替换

主键或者唯一键没有冲突,则直接插入
主键或者唯一键如果冲突,则删除后重修插入

在这里插入图片描述

Retrieve

SELECT
	[DISINCNT] {* | {column [,column]...}
	[FORM table_name]
	[WHERE...]
	[ORDER BY column [ASC | DESC], ...]
	LIMIT...

创建表结构
在这里插入图片描述
插入测试数据
在这里插入图片描述

全列查询

在这里插入图片描述
通常不建议使用*进行全列查询:
1.查询的列越多,意味着需要进行传输的数据量越大
2.可能会影响到索引的使用

指定列查询
在这里插入图片描述

查询字段位表达式

表达式不包含字段
在这里插入图片描述
表达式包含一个字段
在这里插入图片描述
表达式包含多个字段
在这里插入图片描述

为查询结果指定别名
语法:

select column [AS] alias_name [...] FROM table_name

在这里插入图片描述
as可以省略
在这里插入图片描述

结果去重

98分有俩
这里是引用
去重结果
在这里插入图片描述

where 条件
比较运算符:

运算符说明
>,>=,<,<=大于,大于等于,小于小于等于
=等于;NULL不安全,eg.NULL=NULL的结果是NULL
<=>等于;NULL安全,eg.NULL<=>NULL的结果是TRUE(1)
!=,<>不等于
BETWEEN a0 AND a1范围匹配,[a0, a1],ruguo1 a0<= value <= a1,返回TRUE(1)
IN(option,…)如果是option中的任意一个,返回TRUE(1)
IS NULL是NULL
IS NOT NULL不是NULL
LIKE模糊匹配。%表示任意多个(包括0个)任意字符;_表示任意一个字符
逻辑运算符:
运算符说明
AND多个条件必须都为TRUE(1),结果才是TRUE(1)
OR任意一个条件为TRUE(1),结果为TRUE(1)
NOT条件为TRUE(1),结果为FALSE(0)

select可以设置比较条件,使用where子句。>, <, <=,>=不能直接用来比较NULL,但是可以比较int或者string
语文成绩小于七十分
在这里插入图片描述
在mysql中用一个等号判断相等
在这里插入图片描述
在mysql中‘ ’与null不一样:前者是存在,但是为空串;后者一般不参与计算
在这里插入图片描述
筛选null
在这里插入图片描述
筛选不为null
在这里插入图片描述

查询语文成绩在[70,85]的同学
使用and进行条件的连接
在这里插入图片描述
使用between……and……条件(这个区间是左闭右闭)
在这里插入图片描述

查询数学成绩是58或者59或者98或者99分的同学
使用or进行条件连接
在这里插入图片描述
使用IN条件
在这里插入图片描述

查询亚姓同学和亚某同学
%匹配任意多个(保罗0个)任意字符
在这里插入图片描述
_匹配严格的一个任意字符
在这里插入图片描述

查询语文成绩比英语成绩好的同学
在这里插入图片描述
并不是不需要查询的数据就不能在where后比较
在这里插入图片描述

查询语文成绩>80并且不姓亚的同学
AND与NOT的使用
在这里插入图片描述

查询亚某同学,否则要求总成绩>200并且语文成绩<数学成绩并且英语成绩>80在这里插入图片描述
在select语句中,以from为界,是先执行后半段语句,找到对应的表,根据条件筛选。所以不能在where语句中使用前面定义的重命名,即下面语句不行
在这里插入图片描述

结果排序
语法:

--ASC 为升序(从小到大)
--DESC为降序(从大到小)
--默认为ASC

SELECT ... FROM table_name[WHERE...]
	ORDER BY column[ASC|DESC],[...];

MySQL默认是升序
在这里插入图片描述
改为降序
在这里插入图片描述

按升序排序qq号
null随不参与比较,但一般会视其比任何值都小
在这里插入图片描述

查询各门成绩,数学降序,英语升序,语文升序
在这里插入图片描述

查询总分,按降序排列
order by 中可以使用表达式
在这里插入图片描述
order by子句中也可以使用列别名
相较于where子句中不能使用列别名:
排序基本是在select的最后才做
而where子句执行时,可能还没有进行列的重命名
在这里插入图片描述

查询亚姓或者卡姓同学的数学成绩,按降序排列
结合WHERE子句和ORDER BY子句
在这里插入图片描述

筛选分页结果
语法:

起始下标为00开始筛选n条结果:
SELECT ... FROM table_name[WHERE...][ORDER BY...] LIMIT n;
从s开始筛选n条结果(1:
SELECT ... FROM table_name[WHERE...][ORDER BY...] LIMIT s,n;
从s开始筛选n条结果(2:
SELECT ... FROM table_name[WHERE...][ORDER BY...] LIMIT n OFFSET s;

ps:对未知表进行查询时,最好加一条LIMIT1,避免因为表中数据过大,查询全表数据导致数据库卡死

取总分前三
第1页
在这里插入图片描述
这样写也行
在这里插入图片描述
取总分第四到第六
第2页
在这里插入图片描述
取总分第七到第九
第3页,如果结果不足3个,不会有影响
在这里插入图片描述

Update

语法:

UPDATE table_name SET column

将德莱厄斯的数学成绩由78改为80
在这里插入图片描述
将马尔扎哈的数学成绩更改为60,语文成绩更改为70
在这里插入图片描述

将所有同学语文成绩更改为原来的2倍
在这里插入图片描述

Delete

删除数据
语法:

DELETE FROM table_name[WHERE ...] [ORDER BY ...] [LIMIT ...]

删除德莱厄斯同学的考试成绩
在这里插入图片描述

删除整张表数据

准备测试表
在这里插入图片描述
插入测试数据
在这里插入图片描述
删除整表数据
在这里插入图片描述
再插入一条数据,自增id在原值上增长
在这里插入图片描述
在查看表结构时,会有AUTO_INCREMENT = n项
在这里插入图片描述

截断表
语法:

TRUNCATE [TABLE] table_name
  • 这个操作慎用
    1.只能对整表操作,不能像DELETE一样针对部分数据操作
    2.实际上MySQL不对数据操作,所以比DELETE更快
    3.会重置AUTO_INCREMENT项

准备测试表并插入测试数据
在这里插入图片描述
截断整表数据
影响行数是0,所以实际上没有对数据真正操作
在这里插入图片描述

插入查询结果

语法:

INSERT INTO table_name[(column [, column...])] SELECT...

删除表中重复的数据(即重复的数据只能有一份)
创建原数据库并插入测试数据
在这里插入图片描述
创建一张列属性和duplicate_table一样的表,名为:duplicate_table_backup
为表duplicate_table_backup添加属性时,可以用like,不用挨个敲
在这里插入图片描述
把duplicate_table中的数据插入duplicate_table_backup中(也就是备份)
在这里插入图片描述
将去重的数据放入duplicate_table_backup中
在这里插入图片描述
重命名表
alter table duplicate_table rename to old_duplicate_table这样改也行
在这里插入图片描述

聚合函数

聚合统计一定是直接或者借鉴统计列方向的某些数据

函数说明
COUNT(DISTINCT)expr返回查询到的数据的 数量
SUM([DISTINCT]expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT]expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT]expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT]expr)返回查询到的数据的 最小值,不是数字没有意义

统计班级多少同学
使用 * 做统计,不受NULL影响
在这里插入图片描述
使用表达式做统计
在这里插入图片描述

统计本场考试的数学成绩的分数个数
COUNT(math) 统计的是全部成绩
在这里插入图片描述
COUNT(DISTINCT math) 统计的是去重成绩数量
在这里插入图片描述

统计数学成绩总分
在这里插入图片描述
统计数学成绩小于30分的总分,没有结果返回NULL
在这里插入图片描述

统计平均分
在这里插入图片描述

返回英语最高分
在这里插入图片描述

返回大于70分以上的数学成绩中的最低分
在这里插入图片描述

group by子句的使用

在select中使用group by子句可以对指定列进行分组查询

select column1, column2,。。。from table group by column;

创建一张雇员信息表
EMP员工表、DEPT部门表、SALGRADE工资等级表
在这里插入图片描述
显示整个公司的平均工资和最高工资
在这里插入图片描述
显示每个部门的平均工资和最高工资
在这里插入图片描述
显示每个部门的每种岗位的平均工资和最低工资
group by后面跟的是分组的依据,只有分组的依据才有可能要显示出来
在这里插入图片描述
显示平均工资低于2000的部门和它的平均工资
聚合函数是先有数据再进行聚合统计
而where的操作是比较靠前的,但是聚合统计需要先有数据,然后再做聚合
在这里插入图片描述
聚合函数是先有数据再进行聚合统计
而where的操作是比较靠前的,但是聚合统计需要先有数据,然后再做聚合
在下图中,是先找到emp这个表(from emp),其次是做对应的分组(group by),再做聚合统计,最后才做筛选(having)
having:对聚合统计之后的结果进行筛选(having的执行顺序是特别靠后的)
在这里插入图片描述
下图,证明了where 和 having是可以共存的(1=1是必定成立的)
在这里插入图片描述
显示工资大于1000的员工对应的部门中 平均工资低于2000的部门的平均工资
下图的第二局sql语句中,首先执行的是(from)确定从哪个表中取数据
其次是where,where不参与任何聚合,它只是在原始的表中进行粗略的第一次的筛选
再根据分组条件进行分组(group by是通过分组这样的手段,为未来进行聚合统计提供基本的功能支持 ),分组之后再做聚合
最后再对聚合之后的数据进行筛选
在这里插入图片描述

SQL查询中各个关键字的执行先后顺序:from > on > join > where > group by > with > having > select > distinct > order by > limit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值