[ MySQL ] — 基础增删查改的使用

news2024/10/6 22:31:09

目录

表的增删查改

Create

单行数据 全列插入

多行数据 全列插入

多行数据 指定列插入

不存在插入存在则更新

替换 

Retrieve

SELECT 列 

 全列查询

指定列查询

查询字段为表达式 

为查询结果指定别名

结果去重

WHERE 条件 

结果排序

筛选结果分页

Update 

Delete

 删除数据

截断表 

插入查询结果

 聚合函数

group by子句的使用


 

表的增删查改

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

Create

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

value_list: value, [, value] ...
[ ]表示里面的内容可以省略

创建一张学生信息表

单行数据 全列插入

全列插入时,values 的右边的数量必须和定义表时列的数量及顺序一致。

如果有自增属性可以不写,但是就需要明确把数据插入到哪些列中。这个就属于指定列插入了。

多行数据 全列插入

        多条记录用 “,” 分割即可,每条记录的数量必须和定义表时列数量及顺序一致。

多行数据 指定列插入

要保证每条记录的数量必须和指定列数量及顺序一致。

不存在插入存在则更新

由于 主键 或者 唯一键 对应的值已经存在而导致插入失败。

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

语法:

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

 

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

替换 

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

仅需及将 insert 改为 replace

Retrieve

语法:

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

使用:

创建一个学生成绩表,插入一批数据。

SELECT 列 

 全列查询

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

指定列查询

查询字段为表达式 

select比较特殊,他后面可以跟表达式。

 

为查询结果指定别名

语法:

SELECT column [AS] alias_name [...] FROM table_name;

结果去重

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 个)任意字符;_ 表示任意一个字符

逻辑运算符:

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

使用:

查找显示数学成绩低于80分的同学以及他的成绩,看看是哪些同学在拖后腿。

 查找显示英语成绩在 80~90分范围内的同学以及他的成绩。

查找显示英语成绩在 58或59 或98或99的同学以及他的成绩。注:中途插入了一些例子,只看演示不要在意细节。

查找姓A的同学以及A某同学。

 查找语文成绩好于英语成绩的同学

查找总分低于200分的同学 

 查找语文成绩 > 80,但是不姓A的同学

查找孙某同学成绩 或者 总成绩超过250 并且 语文<数学,英语>80的同学。

NULL的查询

NULL 和 NULL 的比较,= 和 <=> 的区别

结果排序

语法:

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

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

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。

使用:

同学及数学成绩,按数学成绩升序显示

显示名字及年龄,对年龄进行排序

查询同学各门成绩,依次按 数学降序,语文升序,英语升序的方式显示

查询同学及总分,由高到低 降序排列

 查询姓A的同学或者姓B的同学数学成绩,结果按数学成绩由高到低降序显示

筛选结果分页

语法:

-- 起始下标为 0

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;


-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;

-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

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

使用:

查找显示总分为第一名和前三名的同学及成绩

Update 

语法:

对查询到的结果进行列值更新

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

更新数据时也要查询到某条记录再进行列值更新,否则更新的就是整表的列记录。

使用:

将F同学的数学成绩改为85分

将B同学的数学成绩变更为60分,语文成绩变更为70分

 将总分倒数前三的 3 位同学的数学成绩都加上 30 分

 将所有同学的语文成绩更新为原来的 2 倍。注意:更新全表的语句慎用!

Delete

 删除数据

语法:

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

使用:

删除A同学的成绩

 删除总分为倒数第一的同学的成绩

删除整张表数据。        注意:删除整表操作要慎用!

 这里删除整张表的数据并不会对表的结构有影响,比如id自增,删除所有数据后这个自增信息并不会归零,还是会根据之前插入的信息继续自增。

截断表 

语法:

TRUNCATE [TABLE] table_name

注意:这个操作慎用!

  • 1. TRUNCATE 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  • 2. TRUNCATE 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚;(TRUNCATE 操作记录不会记录在日志里,而DELETE 会记录)
  • 3. TRUNCATE 会重置 AUTO_INCREMENT 项。

使用: 

插入查询结果

语法:

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

使用:

要删除表内的重复记录,保证任意一条记录只有一份。

 聚合函数

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

使用:

统计有多少个同学

 统计记录

 统计英语成绩的个数

 统计英语成绩总分

统计平均分,我们可以统计某一科的平均分

 也可以统计总分的平均分

查找数学最高分

 查找英语高于75分的最低分

group by子句的使用

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

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

我们要知道分组的目的是分组之后可以方便聚合统计,而group by column 是根据该列的不同的数据来进行分组的,那么也就意味着分组后,组内该列的条件是相同的,也就代表组内数据可以被聚合压缩。分组的含义是根据条件把一列分为多个组,然后进行组内的统计,而我们也可以把分组理解为“分表”,什么意思呢?就是把一张表按照条件在逻辑上划分成多个子表,然后各自对各自的子表进行聚合统计。

使用:

准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)
EMP员工表
DEPT部门表
SALGRADE工资等级表
 

如何显示每个部门的平均工资和最高工资

显示每个部门的每种岗位的平均工资和最低工资 

显示平均工资低于2000的部门和它的平均工资

首先对问题进行拆分:1.先统计每个部门的平均工资,2.再对统计出的结果进行判断

 那么 having 和 where 的的区别是什么呢?

1.执行顺序不同,它们两个条件筛选的阶段不同,where是对具体的任意列进行条件筛选,having是对分组聚合后的结果进行条件筛选。

如:还是上一个问题,但是由于某个人快离职了,所以他不参与统计。

 2. 不要单纯的认为,只有磁盘上的表结构导入到mysql,真实存在的表才叫做的表。我们在操作时中间筛选出来的,包括最终结果,在我看来全部都是逻辑的表,可以这么认为“MySQL下一切皆为表”。也就是说未来只要我们能处理好单表的CRUD,所有的sql我们全部都能用统一的方式进行。

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

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

相关文章

GPT系列总结

1.GPT1 无监督预训练有监督的子任务finetuning https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf 1.1 Unsupervised pre-training &#xff08;1&#xff09;通过一个窗口的输入得到下一个token在目标token上的一个概率分布…

all in one之安装pve(第一章)

第一章 安装PVE PVE安装 pverufusultraISO下载地址下载地址下载地址 因为我使用的是SD卡存储&#xff0c;尝试rufus安装失败&#xff0c;建议使用 ultraISO进行镜像写入。 U盘推荐4G往上。 下载pve 我下载的pve版本是7.4 ultraISO 把镜像写入u盘 下载完成后需要把镜像文件…

小米分享 | 解密面试题:网易面试如何回答“创建线程有哪几种方式?”

大家好&#xff0c;我是你们的小米&#xff01;今天要和大家一起探讨一个在技术面试中常见的问题&#xff1a;创建线程有哪几种方式&#xff1f;这可是个经典面试题哦&#xff01;不过别担心&#xff0c;小米在这里为你详细解析&#xff0c;帮你轻松应对&#xff0c;让你在面试…

【Unity每日一记】关于五种范围检测方法的总结

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

Hlang--用Python写个编程语言-变量的实现

文章目录 前言语法规则表示次幂实现变量实现优先级实现步骤解析关键字语法解析解释器总结前言 先前的话,我们终于是把我们整个架子搭起来了,这里重复一下我们的流程,那就是,首先,我们通过解析文本,然后呢遍历文本当中的我们定义的合法关键字,然后呢,把他们封装为一个T…

基于Redis的Geo实现附近商铺搜索(含源码)

微信公众号访问地址&#xff1a;基于Redis的Geo实现附近商铺搜索(含源码) 推荐文章&#xff1a; 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis的Geo实现附近商铺搜索…

34.Netty源码之Netty如何处理网络请求

highlight: arduino-light 通过前面两节源码课程的学习&#xff0c;我们知道 Netty 在服务端启动时会为创建 NioServerSocketChannel&#xff0c;当客户端新连接接入时又会创建 NioSocketChannel&#xff0c;不管是服务端还是客户端 Channel&#xff0c;在创建时都会初始化自己…

Azure文件共享

什么是Azure文件共享 Azure文件共享是一种在云中存储和访问文件的服务。它允许用户在不同的计算机、虚拟机和服务之间共享数据&#xff0c;并在应用程序中进行访问、修改和管理。 Azure文件共享可以用于各种用途&#xff0c;例如&#xff1a; 共享文件资源给多个虚拟机或服务…

P6685 可持久化动态仙人掌的直径问题

思路1&#xff1a;二分快速幂 #include<bits/stdc.h> using namespace std; #define int long long int n,m; bool check(int a,int b){int ans1;while(b){if(a>n)return false;if(b&1)ans*a;if(ans>n)return false;aa*a;b>>1;}return ans<n; } voi…

STM32CubeMx之freeRTOS定时器使用

需要修改定时器时钟 xTimerChangePeriod(tim1Handle,500,200);//发送队列等待时间 第二个参数为修改的ms xTimerStart(tim1Handle,100);//开启定时器 xTimerStop(tim1Handle,100);//关闭定时器 一定注意定时器任务优先级 要大一点 不然会使用不了

【GaussDB】 SQL 篇

建表语句 表的分类 普通的建表语句 复制表内容 只复制表结构 create table 新表名(like 源表名 including all); 如果希望注释被复制的话要指定including comments 复制索引、主键约束和唯一约束&#xff0c;那么需要指定including indexes including constraints &#xf…

AI 媒人:为什么图形神经网络比 MLP 更好?

一、说明 G拉夫神经网络&#xff08;GNN&#xff09;&#xff01;想象他们是人工智能世界的媒人&#xff0c;通过探索他们的联系&#xff0c;不知疲倦地帮助数据点找到朋友和人气。数字派对上的终极僚机。 现在&#xff0c;为什么这些GNN如此重要&#xff0c;你问&#xff1f;好…

铺设道路(c++题解)

题目背景 NOIP2018 提高组 D1T1 题目描述 春春是一名道路工程师&#xff0c;负责铺设一条长度为 n 的道路。 铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 n 块首尾相连的区域&#xff0c;一开始&#xff0c;第 i 块区域下陷的深度为 di​ 。 春春每天可以选择…

没有父母“托底”的人生,到底有多累?

提起著名的心理学家和人际关系学家戴尔卡耐基。 多数人都不会太陌生&#xff0c;他的《人性的弱点》一书更是家喻户晓的程度。 这本书里总是能用一些接近我们生活的实例&#xff0c;去说明一些与人交往的方法和结论&#xff0c;实用性非常强大。 不管是做人还是处事&#xf…

实验一 VMware 17 虚拟机下安装Ubuntu16.04

系列文章目录 文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 古人云&#xff1a;“工欲善其事&#xff0c;必先利其器。” 我们在学习分布式数据库原理知识同时少不了实操&#xff0c;在做实验之前&#xff0c;把相关实验…

【图像分类】理论篇(2)经典卷积神经网络 Lenet~Resenet

目录 1、卷积运算 2、经典卷积神经网络 2.1 Lenet 网络构架 代码实现 2.2 Alexnet 网络构架 代码实现 2.3 VGG VGG16网络构架 代码实现 2.4 ResNet ResNet50网络构架 代码实现 1、卷积运算 在二维卷积运算中&#xff0c;卷积窗口从输入张量的左上角开始&#xff…

Python系统学习1-9-类三之特征

一、封装 数据角度&#xff1a;将一些基本数据类型复合成一个自定义类型。 优势&#xff1a;将数据与对数据的操作相关联。 代码可读性更高&#xff08;类是对象的模板&#xff09;。 行为角度&#xff1a;向类外提供必要的功能&#xff0c;隐藏实现的细节。 优势&#xff…

工具推荐:Chat2DB一款开源免费的多数据库客户端工具

文章首发地址 Chat2DB是一款开源免费的多数据库客户端工具&#xff0c;适用于Windows和Mac操作系统&#xff0c;可在本地安装使用&#xff0c;也可以部署到服务器端并通过Web页面进行访问。 相较于传统的数据库客户端软件如Navicat、DBeaver&#xff0c;Chat2DB具备了与AIGC…

第58步 深度学习图像识别:Transformer可视化(Pytorch)

一、写在前面 &#xff08;1&#xff09;pytorch_grad_cam库 这一期补上基于基于Transformer框架可视化的教程和代码&#xff0c;使用的是pytorch_grad_cam库&#xff0c;以Bottleneck Transformer模型为例。 &#xff08;2&#xff09;算法分类 pytorch_grad_cam库中包含的…

在变暖的北极,冰冻的河岸可能会被更快地侵蚀

冷冻水槽实验揭示了多年冻土河岸侵蚀对水温、河岸粗糙度和孔隙冰含量的敏感性。 阿拉斯加胡斯利亚社区附近科尤库克河沿岸 1.5 米高的河岸照片。河流横向侵蚀永久冻土层&#xff0c;使冻土和沉积物暴露在相对温暖的水和气温下&#xff0c;导致其解冻。这张银行暴露显示了一层棕…