MySQL(二)——CRUD

news2024/11/25 3:05:08

文章目录

  • CRUD
    • 新增
      • 全列插入
      • 指定列插入
    • 查询
      • 全列查询
      • 指定列查询
      • 查询字段为表达式
        • 表达式不包含字段
        • 表达式包含一个字段
        • 表达式包含多个字段
    • 补充:别名
      • 去重查询
      • 排序
      • 条件查询
    • 补充:运算符
        • 区间查询
        • 模糊查询
        • NULL的查询
      • 分页查询
    • 修改
    • 删除

CRUD

CRUD是指创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)四个操作的首字母缩写(即增删查改),它是数据库或持久层在软件系统中执行的基本功能。这四个操作构成了大多数应用程序和服务中数据管理的基础。

接下来我们就介绍一数据库基本的增删改查。

新增

语法:

INSERT [INTO] tbl_name
 [(column [, column] ...)] 
 VALUES (value_list) [, (value_list)] ...;
 
value_list: value, [, value] ...
  • INSERTVALUES以及(value_list)是必须的,其余都被[]括起来,属于可选项
  • 选择不同的可选项,可以达到全列插入与指定列插入单行数据插入与多行数据插入以及这两组的组合。

我们先新建一个二维表,方便观察现象:

CREATE TABLE IF NOT EXISTS demo1 (
      id BIGINT,
      name VARCHAR(20),
      gender TINYINT
);

全列插入

语法:

INSERT [INTO] tbl_name VALUES (value_list) [, (value_list)] ...;
  • VALUES后可以跟多个小括号,每个小括号就是一行数据,多行数据的小括号之间用,(逗号)连接;

    只有一个小括号就是单行数据插入;多个小括号就是多行数据插入

  • 全列插入的VALUES后的每个小括号中的值要与列一一对应(数量、数据类型),否则会报错!

例如:

在这里插入图片描述

SELECT * FROM demo1;是全列查询语句。


指定列插入

语法:

INSERT [INTO] tbl_name
 [(column [, column] ...)] 
 VALUES (value_list) [, (value_list)] ...;
  • 在表名后、()里使用属性(字段)名指定列,如果要指定多个列,用,(逗号)分隔。注意:即使只插入一列,()也不能省略!
  • 一行中没有被指定插入的列,会用默认值填充,即NULL,表示缺失值
  • 显式地指定所有属性名,就是全列插入
  • 同样也可以多行数据插入

例如:

在这里插入图片描述


查询

为了方便举例,我们后续可能会用到下表:

在这里插入图片描述

语法:

SELECT
 [DISTINCT] {* | {column1 [, column2] ...} 
 [FROM tbl_name]
 [WHERE ...]
 [ORDER BY column [ASC | DESC], ...]
 LIMIT ...;

查询涉及到的关键字很多,分别有着不同的功能,但各个部分不是独立的。下面介绍时只是按照功能进行的分类,实际查询时一般不会只用到某个分类,比如,同时要求去重、条件查询、排序,这要求我们要依据需求编写合理的SQL查询语句

查询是不影响原表(永久表)的,每次返回的是一个临时表


全列查询

语法:

SELECT * FROM tbl_name;
  • *通配符,代表我要查询的结果中包含所有的字段(列)。
  • 当一张表中数据量很大时,建议不要使用全列查询,会有很大的磁盘开销和网络开销

例如:

在这里插入图片描述


指定列查询

语法:

SELECT column1 [, column2]... FROM tbl_name;
  • SELECT后面紧跟要查询的列,之间用,(逗号)分隔

例如:

在这里插入图片描述


查询字段为表达式

表达式不包含字段

语法:

SELECT column1, 常量 ... FROM tbl_name;

例如:

在这里插入图片描述

  • 查询结果中返回的临时表,会在指定位置生成一列,如上图

表达式包含一个字段

例如,将表中的某列的值全部加10

SELECT column1 + 10, column2... FROM tbl_name;

在这里插入图片描述


表达式包含多个字段

例如,使用考试表,查询总分:

在这里插入图片描述


补充:别名

在MySQL中,别名的使用包括列别名表别名两种类型

使用别名可以带来多个重要的好处,主要包括提高查询的可读性简化复杂查询、解决字段名冲突和提升性能等方面。

列别名的引入旨在提高查询结果的可读性,并允许在查询中使用更符合情境的标签来代表列。(也可以给表达式起别名)

表别名则主要用于简化查询中的表引用,特别是在多表查询的情况下。通过为每个表定义一个简短的别名,可以大大增强SQL语句的可读性和编写效率。

语法:

...列名 [AS] 别名...
...表名 [AS] 别名...
# 别名大多数情况下都是字符串,可以选择使用''引起来;不过,当别名中包含空格,必须使用''引起来

例如,优化查询考试总分:

在这里插入图片描述


去重查询

语法:

SELECT DISTINCT {* | {column1 [, column2] ...} FROM tbl_name;
  • 判断为重复的条件所有查询列的数值相等,例如全列去重查询,当两行数据的所有列的值相等,才判断为重复并去重

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


排序

语法:

SELECT
 [DISTINCT] {* | {column1 [, column2] ...} 
 FROM tbl_name
 [ORDER BY column1 [ASC | DESC], ...];
  • ASC为升序,DESC为降序,用于指定排序方式。可以不指定,此时按照MySQL默认的升序排序

  • 使用到ORDER BY,后面跟字段名(或查询列表的表达式)和排序方式,表示按照该字段的值进行升序/降序排序;

    ORDER BY后面可以跟多个字段。在SQL中,可以使用逗号分隔多个字段来指定排序顺序。

    当使用多个字段进行排序时,首先按照第一个字段进行排序,如果第一个字段的值相同,则按照第二个字段进行排序,以此类推。每个字段都可以指定升序(ASC)或降序(DESC)排序。(排序优先级取决于书写顺序)

  • 与查看表结构的关键字重名,但查看表结构的DESC是describe的缩写,排序的DESC是descend的缩写,这是SQL设计时的反例。

例如,根据总分对exam表排名:

在这里插入图片描述

  • 不能将ORDER BY后的别名用单引号引起来,否则排序就会失效

在这里插入图片描述

【注意】

  • NULL数据排序,视为比任何值都小,升序排在最上面,降序排在最下面
  • 没有ORDER BY子句的查询,返回的顺序是未定义的

条件查询

条件查询基于比较运算符和逻辑运算符,可以构成较为复杂的条件对数据进行过滤,从而达到需求。下面给出的区间查询、模糊查询和NULL的查询都是条件查询,只是将这些场景单独拿出来,具体的场景要具体分析采用什么条件进行过滤

语法:

SELECT
 {* | {column1 [, column2] ...} 
 FROM tbl_name
 [WHERE ...];

补充:运算符

【比较运算符】

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

【逻辑运算符】

运算符说明
ANDAND连接的多个条件必须都为TRUE,结果才是1(TRUE)
OROR连接的任意一个条件为TRUE,结果为1(TRUE)
NOT条件为TRUE,返回0(FALSE)

  • WHERE条件可以使用表达式,但不能使用别名,这与SQL语句的执行顺序有关:

    1. 先确定表,即执行FROM
    2. 根据条件过滤出合适的数据行,即执行WHERE
    3. 显示要查询的列,即执行SELECT

    我们的列别名一般会在SELECT声明,这使得执行WHERE时识别不出别名

  • 运算符是有优先级的,比如逻辑运算符NOT >AND > OR,不过不建议死记,建议使用小括号()来手动设置优先级,确保万无一失

  • MySQL不支持链式比较,如 a < column < b,必须改写为column > a AND column < b

  • NULL值不参与除了判断NULL之外的任何条件查询,它会被过滤掉。比如,找语文成绩高于60分的成绩,其中一位同学语文成绩一列为NULL,那么就会直接过滤掉,不参与。

  • 如果想知道某个表达式的值,写法:SELECT 表达式;。例如,SELECT NULL <=> NULL;,将返回1(TRUE)

  • 标准的比较运算符(如=, <>, <, >)在用于NULL值时会返回NULL,比如SELECT NULL > 10;结果为NULL;对NULL使用算术运算符将返回NULL。例如,任何数字与NULL进行加法运算的结果都将是NULL


区间查询

语法:

SELECT
 {* | {column1 [, column2] ...} 
 FROM tbl_name
 WHERE {column1 BETWEEN a AND b | column1 >= a AND column1 <= b};

例如,查询总分在200~300的学生:

在这里插入图片描述


模糊查询

语法:

SELECT
 {* | {column1 [, column2] ...} 
 FROM tbl_name
 WHERE column1 LIKE '[%][_...]值[_...][%]';

举例说明,查询姓刘的同学的成绩:

在这里插入图片描述

  • 刘%就代表刘的后面包含若干个(包括0个)字符,满足该条件的都会被选中。

查询姓名只有两个字的同学的成绩:

在这里插入图片描述

  • 上图两个_号连在了一起,表示两个字符,必须是两个字符的才会被选中。

比如,我要查询姓刘且名字只有两个字的同学,就得:LIKE '刘_';查询名字中包含玄的同学,就得:LIKE '%玄%'


NULL的查询

语法:

SELECT {* | {column1 [, column2] ...}  FROM tbl_name WHERE {column1 IS NULL | column1 IS NOT NULL};
  • 区分NULL值 与 字符串'NULL',采用LIKE 'NULL'实际上查询的时字符串NULL,而不是NULL

小结一下目前遇到的有关NULL的知识点:

  1. NULL的基本概念
    • 定义NULL在MySQL中代表一个未知的值。它是一种“没有类型”的特殊值,用于表示无值、未知值、缺失值等情况。
    • 默认值:在创建表结构时,如果某字段未指定默认值,则默认为NULL值。这意味着如果在插入数据时没有提供该字段的值,它将自动被设置为NULL
  2. NULL值的比较与操作
    • 比较运算符:标准的比较运算符(如=, <>, <, >)在用于NULL值时会返回NULL,这表明结果既不是TRUE也不是FALSE,而是不确定的。因此,要检查一个值是否为NULL,应使用IS NULLIS NOT NULL运算符。
    • 算术运算符:对NULL使用算术运算符将返回NULL。例如,任何数字与NULL进行加法运算的结果都将是NULL。
    • 排序行为:在ORDER BY子句中,NULL值在升序排序时默认位于最后,但在降序排序时则位于首位。

分页查询

语法:

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM tbl_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM tbl_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM tbl_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
  • 分页查询可以有效控制每次查询的的记录条数,可以减小数据库服务器的压力,可以有效提升数据处理的效率和用户体验。
  • 记录的序号从 0 开始,第一条记录是0,以此类推
  • 如果起始位置已经超出了整个结果集的范围,可以执行,但返回的是空结果集

例如,查询id编号前5的同学的成绩:

在这里插入图片描述

例如,查询总分排名前3的同学的成绩:

在这里插入图片描述
在这里插入图片描述


修改

语法:

UPDATE tbl_name SET column1 = expr [, column2 = expr ...]
 [WHERE ...] [ORDER BY ...] [LIMIT ...];
  • SET后指定列并修改值,WHERE条件用于过滤筛选出要修改指定列的数据行,ORDER BY用于排序,LIMIT用于控制修改的数据行数
  • 在标准的 SQL 中,UPDATE 语句本身并不直接支持 ORDER BY 子句(可以使用,不报错)。ORDER BY 通常用于 SELECT 语句中,以指定结果集的排序方式。并且,在 UPDATE 语句中,排序通常不是必要的。对于需要排序的场景,需要结合使用子查询或临时表,并在子查询中指定排序。
  • SELECT 语句中,LIMIT 可以接受两个参数,第一个参数是偏移量,第二个参数是要返回的记录数。但在 UPDATE 语句中,这种用法是不被支持的,仅支持一个参数的LIMIT子句。
  • UPDATE操作如果不加WHERE子句,将会修改表中的所有记录,十分危险!

例如,将孙悟空同学的英语成绩和语文成绩分别改为95,90分:

在这里插入图片描述

例如,将总分小于200分的同学的英语成绩减去5分:

在这里插入图片描述


删除

语法:

DELETE FROM  tbl_name [WHERE ...] [ORDER BY ...] [LIMIT ...];
  • 在标准的 SQL 中,DELETE 语句本身并不直接支持 ORDER BY 子句(可以使用,不报错)。ORDER BY 通常用于 SELECT 语句中,以指定结果集的排序方式。并且,在 DELETE 语句中,排序通常不是必要的。对于需要排序的场景,需要结合使用子查询或临时表,并在子查询中指定排序。

  • SELECT 语句中,LIMIT 可以接受两个参数,第一个参数是偏移量,第二个参数是要返回的记录数。但在 DELETE 语句中,这种用法是不被支持的,仅支持一个参数的LIMIT子句,与UPDATE语句一样。

  • DELETE操作如果不加WHERE子句,将会删除表中的所有记录,十分危险!

例如,删除孙悟空同学的成绩:

在这里插入图片描述


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

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

相关文章

【自动驾驶】ROS中的TF坐标变换(一):静态坐标变换

目录 引子ros中的右手坐标系补充&#xff1a;欧拉角及四元数理解旋转平移操作复合操作 运行坐标变换的例子坐标转换 静态坐标变换-发布坐标系信息创建功能包 静态坐标变换-订阅坐标系信息添加cpp订阅者主文件修改cmakelist文件编译报错的解决方案运行程序进行测试 引子 机器人…

设计模式---构建者模式(Builder Pattern)

构建者模式&#xff08;Builder Pattern&#xff09; 是一种创建型设计模式&#xff0c;旨在将复杂对象的构建过程与其表示分离。它允许使用相同的构建过程创建不同的表示。该模式通常用于构建复杂对象&#xff0c;这些对象由多个部分组成或具有多个可选属性。 构建者模式的核…

Labelme的安装与使用教程

文章目录 一、Labelme是什么&#xff1f;二、安装步骤1.新建虚拟环境2.安装Labelme3.Labelme的使用 三、json2yolo 一、Labelme是什么&#xff1f; Labelme是一个用于图像标注的开源工具&#xff0c;可以实现图像标注、语义分割、实例分割等。 本文记录一下labelme的安装与使…

【系统架构设计】系统性能评价(一)

【系统架构设计】系统性能评价&#xff08;一&#xff09; 性能指标对计算机对网络对操作系统对数据库管理系统对Web服务器 性能计算MIPS(百万条指令/秒)计算方法峰值计算等效指令速度 性能设计性能评估 性能指标 对计算机 时钟频率&#xff08;主频&#xff09; 指计算机处…

搜维尔科技:Varjo XR-4 功能详解:实现业界首个凝视驱动自动对焦系统

对可变焦光学元件的需求 目前&#xff0c;所有其他XR HMD都在视频直通摄像头中使用定焦光学元件&#xff0c;其焦距无法改变。人眼可以辨别高达约 60 像素/度 ( PPD ) 的细节&#xff0c;但定焦光学元件的问题在于&#xff0c;在实践中&#xff0c;它们的分辨率极限约为 30 PP…

ESP8266与阿里云物联网平台连接

前言 最近折腾项目&#xff0c;需要用到ESP8266模块对接阿里云物联网平台&#xff0c;网上感觉十分完善的教程少了一点点&#xff0c;比较折腾我哈哈哈&#xff0c;所以打算自己写一篇。 材料准备 1、ESP8266 WiFi模块 数据线 网上随便买一个就好&#xff0c;十块钱左右一个…

BERT:BidirectionalEncoderRepresentations fromTransformers代码及数据解读

论文地址 写在前面 由于官网给的是TensorFlow版本的&#xff0c;github也有pytorch版本&#xff0c;但是给出的pytorch的代码是需要根据实际情况进行修改的。 词表文件vocab.txt文件读取的问题 vocab.py代码的class WordVocab(Vocab)类中的def load_vocab(vocab_path)函数为…

看看人家都用树莓派5做了什么产品?

文章作者&#xff1a; Aleksandar Dakić 原文地址&#xff1a; https://magazinmehatronika.com/edatec-ed-hmi3020-070c-hmi-recenzija/ Aleksandar Dakić《机电一体化》的杂志主编&#xff0c;同时Aleksandar 也是《机电一体化》杂志的创始人。拥有电气工程背景&#x…

MySQL的安装及配置远程链接(WindowsLinux下安装)

一.Windows下安装 在Windows下安装MySQL需要先去官网下载一下安装包 1. 官网下载地址&#xff1a;www.mysql.com 2、选择下载 往下滑选择MySQL 社区 &#xff08;GPL&#xff09; 下载 3、选择社区版适配Windows系统 MySQL Installer for Windows 4、选择本地安装版本 my…

十五年以来 — 战略性云平台服务的演进路径之全面呈现(含亚马逊、微软和谷歌)

Gartner每年都发布对全球IaaS平台进行评估的魔力象限报告。2023年底&#xff0c;Gartner将此项评估的名称改为“战略性云平台服务”&#xff08;Strategic cloud platform services&#xff09;&#xff0c;尽管其核心仍为IaaS&#xff0c;但是&#xff0c;毫无疑问&#xff0c…

算法工程师必知必会的数学基础之微积分下篇

系列文章&#xff1a; 第一篇&#xff1a;算法工程师必知必会的数学基础之线性代数第二篇&#xff1a;算法工程师必知必会的数学基础之微积分上篇第三篇&#xff1a;算法工程师必知必会的数学基础之微积分下篇&#xff08;本文&#xff09; 文章目录 2. 微积分2.7 泰勒级数&am…

【大模型从入门到精通24】开源库框架LangChain Embedding的力量1

这里写目录标题 嵌入的力量什么是嵌入&#xff1f;创建嵌入的详细过程嵌入在语义搜索中的应用向量存储&#xff1a;相似向量的有效检索关键特性与操作选择向量存储的标准示例&#xff1a;Chroma 适用于快速原型开发和小型数据集结论 嵌入的力量 什么是嵌入&#xff1f; 嵌入是…

通过CLIP引导解码减轻大型视觉-语言模型中的幻觉问题

人工智能咨询培训老师叶梓 转载标明出处 大型视觉-语言模型&#xff08;LVLMs&#xff09;因其在视觉推理方面的能力而备受瞩目&#xff0c;被视为实现自主操作智能体的重要里程碑。但它在生成文本时容易出现对象幻觉问题&#xff0c;即描述中包含不存在的对象&#xff0c;这严…

一文带你入门大模型微调

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南&#xff08;附代码和数据&#xff…

MTK 相机功耗拆解方法

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、硬件功耗二、相机软件功耗三、参考文档 一、硬件功耗 1.1 硬件信息 以下硬件信息最好提前获取到 模块备注平台MTK or Qcom or sprdCPU频率大中小核…

【Qt开发】事件与信号/事件过滤器

事件与信号/事件过滤器 事件一、事件的产生二、事件的派发三、事件类和事件类型四、事件的处理 事件与信号事件过滤器 事件 Qt系统的图形化窗口是由事件驱动的。&#xff0c;点击鼠标、按键&#xff0c;改变窗口大小、最小化窗口、关闭窗口等都会产生相应的事件。 QWidget类的所…

shuashuashua

CVE-2023-2130 靶标介绍&#xff1a; 在SourceCodester采购订单管理系统1.0中发现了一项被分类为关键的漏洞。受影响的是组件GET参数处理器的文件/admin/suppliers/view_details.php中的一个未知函数。对参数id的操纵导致了SQL注入。可以远程发起攻击。 通过标靶介绍可以知道…

通过域名和HTTPS上线MSF

使用受信任证书的Meterpreter载荷 现在大多数安全解决方案还会通过分析进出目标机器的流量来进行网络入侵检测。在这种情况下&#xff0c;很可能即使使用编码器绕过了防病毒软件&#xff0c;但有效载荷也会在尝试连接到我们的侦听器时被捕获和拦截。 # 准备工作 首先需要准备…

FPGA开发——UART回环实现之接收模块的设计

一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端&#xff0c;所以在接收和发送模块中先编写接收模块&#xff0c;这样可以在后面更好的进行发送模块的验证。&#xff08;其实这里先编写哪个模块&#xff09;都不影响&#xff0c;这里看自己心情&#xff0c;反…

大语言模型微调框架Unsloth:简化模型微调流程,提升模型性能

Unsloth 将 Llama-3、Mistral、Phi-3 和 Gemma 等大型语言模型的微调速度提高了 2 倍&#xff0c;内存使用量减少了 70%&#xff0c;而且准确性不会降低&#xff01; 特点 通过手动派生所有计算繁重的数学步骤和手写 GPU 内核&#xff0c;unsloth 可以在不更改任何硬件的情况…