MySQL基本查询 -- 表的增删改查CRUD

news2024/11/26 10:49:31

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

文章目录

  • 1.Create
    • a.insert
      • 语法:
      • 插入指定列:
      • 全列插入:
      • 一次插入多行数据:
    • b. on duplicate key update ~ 插入否则更新
      • 语法:
      • Query OK, 'N' rows affected ('N' sec)
    • c. replace 插入替换
      • 语法:
  • 2.Retrieve
    • a.select
      • 语法:
      • 查找指定列:
      • 查询字段为表达式:
      • 为查询结果指定别名:
        • 语法:
      • 结果去重:
    • b. where 条件
      • 【 比较运算符 】
      • 对于null安全:
      • 例子:
      • IN (option, ...)
      • LIKE 模糊匹配 %
      • ※ as 指定别名后,后面的 where 可以直接使用别名吗?
      • 【 逻辑运算符 】
    • c. order by
      • 语法:
        • NULL 视为比任何值都小,升序出现在最上面:
      • 能用别名:
      • limit
        • 可以实现分页显示:
    • 三者顺序:
  • 3. Update
      • 语法:
      • 一次改多列:
      • **不支持 +=**
      • 整表更新:
  • 4. Delete
      • 语法:
    • truncate
      • 语法:
      • 慎用:
    • 插入查询结果
      • 语法:
      • 案例 --- 去重表数据
  • 5. 聚合统计
    • 统计有多少人:
      • 去重:
      • 求和,平均值:
      • sum:
      • avg
      • min
  • 6. group by
      • 语法:
    • having
      • having vs where
  • 7.OJ推荐:

1.Create

a.insert

语法:

INSERT [INTO] table_name
	[(column [, column] ...)]
	VALUES (value_list) [, (value_list)] ...

value_list: value, [, value] ...

insert (into) 表名 (指定列) values 对应列内容

  • into 可以省略
  • 指定列如果省略,则为全列插入
  • 对应列内容即 value_list 可以是多项,用 ’ , ’ 隔开

插入指定列:

在这里插入图片描述

全列插入:

在这里插入图片描述

一次插入多行数据:

在这里插入图片描述

b. on duplicate key update ~ 插入否则更新

主键 或者 唯一键 对应的值已经存在时会导致插入失败

ERROR 1062 (23000): Duplicate entry '  ' for key '  '

可以选择性的进行同步更新操作

语法:

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

正常写 insert ,最后面加上 on duplicate key update 值a = ' ' , 值b = ' ' ;

Query OK, ‘N’ rows affected (‘N’ sec)

  • 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
  • 1 row affected: 表中没有冲突数据,数据被插入
  • 2 row affected: 表中有冲突数据,并且数据已经被更新

通过 MySQL 函数获取受到影响的数据行数:
SELECT ROW_COUNT();

+-------------+
| ROW_COUNT() |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

在这里插入图片描述

c. replace 插入替换

语法:

replace + 正常写 into

示例:

(这里 sn 和 qq 是唯一键,发生冲突,同时 name 不一样)
在这里插入图片描述


2.Retrieve

a.select

语法:

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

查找指定列:

– 通常情况下不建议使用 * 进行全列查询
– 1. 查询的列越多,意味着需要传输的数据量越大;
– 2. 可能会影响到索引的使用。(索引待后面讲解)

在这里插入图片描述

查询字段为表达式:

在这里插入图片描述

为查询结果指定别名:

语法:

列名后加 as '新名称'

在这里插入图片描述

as 也可以不写:

在这里插入图片描述

结果去重:

select 后加 distinct 即可

在这里插入图片描述

b. where 条件

【 比较运算符 】

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

对于null安全:

(一般用 is null 和 is not null 即可。)

在这里插入图片描述

结果为 null 即 空 ,意为无法参与比较。

在这里插入图片描述

例子:

在这里插入图片描述

IN (option, …)

在这里插入图片描述

LIKE 模糊匹配 %

  • % 匹配任意多个(包括 0 个)任意字符
  • _ 匹配严格的一个任意字符

在这里插入图片描述

※ as 指定别名后,后面的 where 可以直接使用别名吗?

在这里插入图片描述

不可以。

SQL的执行顺序决定了别名只能在SELECT语句的输出结果中使用,而WHERE子句的执行是在别名定义之前

其实可能我不要这一列,但是我的where里面在这列上有一些限制。所以只能where过滤后,再进行展示。

如果先把要的列拿出来,那么不要的列上面的限制就不方便找了。
比如老师要考试不及格的学生名单,但是不要具体分数。
或者老师要迟到同学名单,迟到为true这一列就不用打印出来了。

如这个:

在这里插入图片描述

【 逻辑运算符 】

运算符说明
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT条件为 TRUE(1),结果为 FALSE(0)

() 也是可以使用的

在这里插入图片描述

c. order by

ascending 上升的
descending 下降的

order by 默认升序排序 (asc可以直接省略)

语法:

SELECT ... FROM table_name [WHERE ...]
	ORDER BY column [ASC|DESC], [...];
NULL 视为比任何值都小,升序出现在最上面:

在这里插入图片描述

在这里插入图片描述

能用别名:

排序肯定是where过滤后,再进行的。

limit

在这里插入图片描述

可以实现分页显示:

在这里插入图片描述

三者顺序:

在这里插入图片描述


3. Update

语法:

UPDATE table_name SET column = expr [, column = expr ...]
	[WHERE ...] [ORDER BY ...] [LIMIT ...]

在这里插入图片描述

一次改多列:

在这里插入图片描述

给倒数三名同学加30分:

不支持 +=

在这里插入图片描述

整表更新:

在这里插入图片描述


4. Delete

- 删除表内的数据

语法:

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

后面什么限制都不加,就直接删除了。

就算删除所有数据,表的一些内容还是不会变的。比如auto_increment :

在这里插入图片描述

在这里插入图片描述

truncate

截断表

语法:

TRUNCATE [TABLE] table_name

慎用:

    1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
    1. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚

          即不会把本次行为存到 bin log 当中

    1. 会重置 AUTO_INCREMENT 项

在这里插入图片描述

插入查询结果

语法:

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

案例 — 去重表数据

先创建个类型一样的表,然后将原表数据插入,进行去重后,rename 操作’‘偷天换日’’

在这里插入图片描述


5. 聚合统计

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

统计有多少人:

一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的,
假如表没有主键(Primary key), 那么count(1)比count(*)快,
如果有主键的话,那主键作为count的条件时候count(主键)最快,
如果你的表只有一个字段的话那count(*)就是最快的。

在这里插入图片描述

按列也是统计数目:

在这里插入图片描述

去重:

在这里插入图片描述

求和,平均值:

手动求:求和再除以数目:

sum:

在这里插入图片描述

在这里插入图片描述

avg

在这里插入图片描述

在这里插入图片描述

min

在这里插入图片描述


6. group by

语法:

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

如何显示每个部门的平均工资和最高工资:
(分组的目的是方便进行聚合统计)
在这里插入图片描述

在这里插入图片描述

having

having 是对聚合后的数据进行统计

having vs where

其实区别就是本文 2.b. 里面提及的,where可以选择没有select的列进行限制。

条件筛选的阶段是不同的

在这里插入图片描述

不要单纯的认为,只有磁盘上表结构导入到mysql,真实存在的表,才叫做表。
中间筛选出来的,包括最终结果,全部都是逻辑上的表!“MySQL一切皆表”。
未来只要我们能够处理好单表的CURD,所有sql场景,我们全部都能用统一的方式进行…

7.OJ推荐:

leetcode: duplicate-emails

leetcode: big-countries

leetcode: nth-highest-salary

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】文件上传框架plupload使用(前后端交互)

这个框架是用来给前端设置文件上传的按钮的。 首先要明白&#xff0c;前端向后端发送请求的方式有get和post&#xff0c;两者的区别在于&#xff0c;前者只能在网址中携带参数&#xff0c;后者是在请求体body中携带参数。 Plupload向后端发送请求是post请求方式&#xff0c;发送…

Axios介绍;前后端分离开发的介绍;YAPI的使用;Vue项目简介、入门;Elementui的使用;nginx介绍

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…

基于 Dots + GPU Instance 的大规模物体渲染

之前写的两篇开放世界技术栈都是公司其他同事做的&#xff0c;所以很多细节了解不详细。但这次是全程我自己搭建的轮子&#xff0c;可以讲得稍微详细些。 之前写的大规模物件渲染的 GPU 版本&#xff0c;虽然渲染量大效率高&#xff0c;但是有个很致命的缺陷&#xff1a;无法与…

Azure OpenAI citations with message correlation

题意&#xff1a;“Azure OpenAI 引用与消息关联” 问题背景&#xff1a; I am trying out Azure OpenAI with my own data. The data is uploaded to Azure Blob Storage and indexed for use with Azure AI search “我正在尝试使用自己的数据进行 Azure OpenAI。数据已上传…

行业应用 | 桥田MMC磁力换模系统-冲压场景案例分享

随着市场竞争的日益加剧&#xff0c;制造形态从单品种大批量转变为多品种小批量&#xff0c;品种的多样化对模具的多样化产生了需求&#xff0c;在更换产品品类时&#xff0c;首先需要更换加工模具。冲压是金属加工中的典型场景&#xff0c;如何缩短冲压模具的更换时间&#xf…

【Hot100】LeetCode—23. 合并 K 个升序链表

目录 1- 思路优先队列 2- 实现⭐23. 合并 K 个升序链表——题解思路 3- ACM 实现 原题连接&#xff1a;23. 合并 K 个升序链表 1- 思路 优先队列 1- 提供的数据结构&#xff1a;ListNode[] lists2- 由于提供的数据结构已经是有序的&#xff0c;不能通过指针实现是因为不知道一…

基于I2S和esp-now协议制作esp32对讲机

基于I2S和esp-now协议制作esp32对讲机 1.概述 这篇文章介绍基于I2S和esp-now协议制作对讲机&#xff0c;他的实现需要在ESP32开发环境的2.0.10版本号下才能成功&#xff0c;高版本号的源码有改动会导致编译失败。 安装ESP32 2.0.10版本&#xff1a; https://brucelong.blog.c…

2 nestjs 设计模式

回顾 MVC MVC&#xff08;Model-View-Controller&#xff09;设计模式是一种常用于软件开发的架构模式&#xff0c;旨在分离应用程序的不同部分&#xff0c;使得它们可以独立地开发、测试和维护。它将应用程序分为三个主要组件&#xff1a; Model&#xff08;模型&#xff09;…

什么牌子的开放式耳机性价比高?五款高口碑精品推荐!

由于传统入耳式耳机可能对耳道健康造成长期影响&#xff0c;许多人开始偏好选择开放式耳机的非侵入式设计。这种耳机有助于减少耳内湿润、细菌增长&#xff0c;以及耳道闷热的不适感。为了帮助大家在众多产品中挑选合适的开放式耳机&#xff0c;我将列举一些市场反馈良好的款式…

C#中的WebClient与XPath:实现精准高效的Screen Scraping

在现代互联网中&#xff0c;Screen Scraping&#xff08;屏幕抓取&#xff09;已成为从网页中提取信息的重要技术。对于C#开发者来说&#xff0c;WebClient和XPath是实现高效抓取的重要工具。本文将概述如何使用C#中的WebClient类结合XPath技术&#xff0c;实现精准高效的Scree…

探索科技潮流新领地厦门凯酷全科技有限公司抖音小店

在这个日新月异的数字时代&#xff0c;科技不仅深刻改变了我们的生活方式&#xff0c;更成为连接消费者与未来生活的桥梁。今天&#xff0c;就让我们一起走进厦门凯酷全科技有限公司的抖音小店&#xff0c;感受一场科技与时尚的完美碰撞&#xff0c;体验未来生活触手可及的魅力…

Python 和 PyCharm 安装(傻瓜式)

为什么要安装Python&#xff1f; 当我们写 python 代码的时候&#xff0c;需要有环境的支持&#xff0c;才可以运行代码。而 python 的安装支持了两个主要部分&#xff0c;分别是解释器和标准库。当我们安装完成&#xff0c;就可以使用python里面的标准库来写代码&#xff0c;而…

Linux 内核源码分析---netfilter 框架

iptables是用户用来管理和配置防火墙规则的一种策略&#xff0c;但是实际解析规则并按照规则实施产生作用的是Netfilter。 iptables 与协议栈内有包过滤功能的 hook 交互来完成工作&#xff0c;这些内核 hook 构成了 netfilter 框架。每个进入网络系统的包&#xff08;接收和发…

Java Web —— 第七天(Mybatis案例 员工管理2)

新增员工 EmpController类 PostMappingpublic Result save(RequestBody Emp emp){log.info("新增员工操作,emp:{}",emp);empService.save(emp);return Result.success();} EmpServiceImpl实现类 //新增员工Overridepublic void save(Emp emp) {//补充基础属性 创…

jmeter中添加ip欺骗

1、首先在本机电脑中通过配置文件创建添加ip的配置文件&#xff0c;先创建一个txt格式的&#xff0c;直接修改文件名以及后缀为ips.bat 2、编辑该ips.bat文件&#xff0c;在文件中输入如下内容&#xff0c;用于快速给本机添加ip地址&#xff0c;&#xff08;2&#xff0c;1&…

今年奥运会的场馆设计,竟然藏着这样的黑科技!

随着奥运会的盛大开幕&#xff0c;全球观众不仅关注运动员的精彩表现&#xff0c;也被奥运场馆的壮丽设计所吸引。这些场馆不仅外观炫酷&#xff0c;功能齐全&#xff0c;更重要的是背后应用了一系列先进的技术和材料&#xff0c;其中最为亮眼的就是巴黎奥运会永久性体育场馆之…

“救命快刊”:升到2区,IF3.1,水平低也无俱,专家意见中肯不难为人

1、期刊简介&#xff1a; International Journal of Green Energy • 出版社&#xff1a;Taylor and Francis • 影响因子&#xff1a;3.1 • 期刊分区&#xff1a;JCR2/3区&#xff0c;中科院4区 • 检索数据库&#xff1a;SCI&EI 2、研究领域&#xff1a; 分享了能源…

开源好用的堡垒机工具Jumpserver

Jumpserver是一个由杭州飞致云信息科技有限公司&#xff08;FIT2CLOUD飞致云&#xff09;开发的开源堡垒机系统&#xff0c;旨在帮助企业构建和强化运维安全审计能力。 以下是关于Jumpserver的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Jumpserver是一个开源的堡垒…

CTFshow之RCE代码命令远程执行第53关到第64关详细讲解。可私信!

手眼通天和大人。 --真锅和 引言&#xff1a;今天继续ctf之旅&#xff01;&#xff01;解决53关到64关 ps&#xff1a;今天是8.22&#xff0c;重新回归开始填坑&#xff0c;先发个废品 一、实验准备 1、ctf网址&#xff1a;ctf.show 2、工具&#xff1a;fi…

cmd发送邮件:如何通过命令提示符发邮件?

cmd发送邮件的安全性考量&#xff1f;如何设置cmd发送邮件&#xff1f; 通过命令提示符发送邮件则提供了一种便捷且高效的方法&#xff0c;特别是在自动化任务和脚本化工作流程中。AokSend将介绍如何通过命令提示符实现发送邮件&#xff0c;并讨论其应用场景和注意事项。 cmd…