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

目录

表的增删查改

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.hqwc.cn/news/73955.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-table 多个表格切换多选框显示bug

今天写了个功能&#xff0c;点击左侧的树做判断&#xff0c;一级树节点显示系统页面&#xff0c;二级树节点显示数据库页面&#xff0c;三级树节点显示表页面。 数据库页面和表页面分别有2个el-table ,上面的没有多选框&#xff0c;下面的有多选框 现在出现bug&#xff0c;在…

fastapi发布web配置页面

fastapi发布web配置页面 FastAPI 是一个基于 Python 的快速 Web 开发框架&#xff0c;它提供了许多功能来简化 Web 开发过程。其中一个重要的功能是能够轻松地创建 API 文档页面。 在 FastAPI 中&#xff0c;可以使用 OpenAPI 和 Swagger 来创建 API 文档页面。下面是一个简单…

iMazing2.17.3免费版苹果传输电脑端文件数据工具

苹果手机在日常使用过程中可能会遇到iPhone内存不足的情况&#xff0c;遇到这种情况很多用户会选择删除照片来节省存储空间&#xff0c;大量删除照片可能会误删重要照片。另外iPhone可能会遇到自动重启、黑屏等故障。手机突然损坏&#xff0c;数据无法导出&#xff0c;此时备份…

el-table实现纯前端查询列表(不走后端接口)

2023.8.16今天我学习了如何使用前端进行数据的查询&#xff0c;有时候后端会直接返回全部的数据&#xff0c;这时候我们就需要用前端进行查找数据。 首先elementUI有自带el-table查询的组件&#xff1a; Element - The worlds most popular Vue UI framework 我们发现在这段代…

QGraphicsView 实例3地图浏览器

主要介绍Graphics View框架&#xff0c;实现地图的浏览、放大、缩小&#xff0c;以及显示各个位置的视图、场景和地图坐标 效果图: mapwidget.h #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QLabel> #include <QMouseEvent> #include <QGraphicsView&…

飞天使-k8s简单搭建

文章目录 k8s概念安装部署-第一版无密钥配置与hosts与关闭swap开启ipv4转发安装前启用脚本开启ip_vs安装指定版本docker 安装kubeadm kubectl kubelet,此部分为基础构建模版 k8s一主一worker节点部署k8s三个master部署,如果负载均衡keepalived 不可用&#xff0c;可以用单节点做…

React Native文本添加下划线

import { StyleSheet } from react-nativeconst styles StyleSheet.create({mExchangeCopyText: {fontWeight: bold, color: #1677ff, textDecorationLine: underline} })export default styles

【hive】hive中row_number() rank() dense_rank()的用法

hive中row_number() rank() dense_rank()的用法 一、函数说明 主要是配合over()窗口函数来使用的&#xff0c;通过over(partition by order by )来反映统计值的记录。 rank() over()是跳跃排序&#xff0c;有两个第二名时接下来就是第四名(同样是在各个分组内)dense_rank() …

RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景

作者&#xff1a;隆基 本文将从技术角度了解 RocketMQ 的云原生架构&#xff0c;了解 RocketMQ 如何基于一套统一的架构支撑多元化的场景。 文章主要包含三部分内容。首先介绍 RocketMQ 5.0 的核心概念和架构概览&#xff1b;然后从集群角度出发&#xff0c;从宏观视角学习 R…

图数据库_Neo4j中文版_Centos7.9安装Neo4j社区版3.5.9_基于jdk1.8---Neo4j图数据库工作笔记0012

由于我们在国内使用啊,具体还是要用中文版滴,找了好久这个neo4j,原来还是有中文版的, https://we-yun.com/doc/neo4j-chs/ 中文版下载地址在这里: 所有版本都在这里了,需要哪个自己去下载就可以了,要注意下载以后,参考: https://we-yun.com/blog/prod-56.html 在这个位置下载…

Hlang--用Python写个编程语言-函数与基本数据结构实现

文章目录 前言语法表述解析器修改词法解析函数节点函数节点解析List的解析实现解释器节点函数操作String和List处理总结前言 okey,经过一段时间的努力,接下来要实现的是函数。当然还有对应的基本数据结构,那么之后的话,我们的工作就开始进一步转换了。 那么在这块我们要实…

学习笔记230802---vue项目手写css样式二次悬浮状态问题

问题描述 今天在开发页面时&#xff0c;遇到一个很棘手的问题&#xff0c;需求页面做一个卡片效果&#xff0c;鼠标悬浮在卡片上&#xff0c;出现一个选项卡&#xff0c;鼠标悬浮每一项&#xff0c;文字和图标都要变成选中状态的颜色。选项卡的每一项都是通过数据循环渲染来的…