mysql -- CRUD

CRUD

MySQL是一个广泛使用的开源关系数据库管理系统(RDBMS),它支持通过SQL(Structured Query Language)语言进行数据的管理。在MySQL中,CRUD是一个常见的术语,代表了数据管理的四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。下面,我将逐一介绍这些操作及其在MySQL中的具体应用方式。

1. 创建(Create)

创建操作通常指的是向数据库中添加新数据。在MySQL中,这通常通过INSERT语句来实现。例如,如果你有一个名为students的表,其中包含idnameage三个字段,你可以使用以下语句来插入新的记录:

INSERT INTO students (id, name, age) VALUES (1, 'Alice', 21);

2. 读取(Read)

读取操作是指从数据库中查询数据。这在MySQL中通常通过SELECT语句实现。你可以使用不同的条件来过滤你需要的数据。继续使用上面的students表为例,如果你想查询所有记录,可以使用:

SELECT * FROM students;

如果只想查询特定条件的数据,比如年龄大于20岁的学生:

SELECT * FROM students WHERE age > 20;

3. 更新(Update)

更新操作用于修改数据库中的现有数据。在MySQL中,这通过UPDATE语句实现。例如,如果你想将名为Alice的学生的年龄改为22,可以使用以下语句:

UPDATE students SET age = 22 WHERE name = 'Alice';

4. 删除(Delete)

删除操作用于从数据库中移除数据。在MySQL中,这通常通过DELETE语句实现。如果你想删除所有名为Alice的学生记录,可以使用:

DELETE FROM students WHERE name = 'Alice';

WHERE

在数据库查询语言SQL中,WHERE子句是用来指定筛选条件的关键组成部分,它决定了哪些记录应该被包括在查询结果中。这个概念有时被称为“条件编译”,尽管这个术语在其他编程领域有不同的含义(如在C或C++中根据预处理指令编译代码)。在SQL中,可以视为根据指定的条件动态“编译”或构造查询结果。

基本使用

WHERE子句通常跟在SELECT, UPDATE, DELETE等SQL语句后面,用于限制这些语句作用的数据行。它后面可以跟一个或多个条件,这些条件可以使用逻辑运算符如AND, OR, 和NOT进行组合。

示例

假设有一个名为employees的表,包含id, name, age, 和department字段。以下是一些使用WHERE子句的示例:

选择特定部门的员工

SELECT * FROM employees WHERE department = 'Sales';

更新特定员工的年龄

UPDATE employees SET age = 30 WHERE id = 101;

删除某个年龄以下的员工

DELETE FROM employees WHERE age < 22;

复杂条件

WHERE子句可以通过使用逻辑运算符来处理更复杂的条件:

  • 组合条件(使用AND):

    SELECT * FROM employees WHERE age >= 25 AND department = 'HR';
    

  • 多重选择(使用OR):

    SELECT * FROM employees WHERE department = 'HR' OR department = 'Sales';
    

  • 排除条件(使用NOT):

    SELECT * FROM employees WHERE NOT department = 'Intern';
    

    使用通配符和LIKE

    WHERE子句中,LIKE运算符常被用来搜索模式匹配,尤其是当你不知道确切值时。可以结合通配符使用,如%(代表任意字符序列)和_(代表单个字符):

    SELECT * FROM employees WHERE name LIKE 'Sa%';
    

    这个例子找出所有名字以"Sa"开始的员工。

    BETWEEN、IN 和其他运算符

BETWEEN:用于范围搜索,包括边界值。

SELECT * FROM employees WHERE age BETWEEN 25 AND 35;

IN:允许在多个可能的值中选择。

SELECT * FROM employees WHERE department IN ('HR', 'Sales', 'Engineering');

LIMIT

在SQL中,LIMIT子句用于限制查询结果的数量,这在处理大型数据库时尤其有用,可以帮助控制数据的加载和处理量,从而提高效率。LIMIT常与SELECT语句一起使用,以限定返回的记录数。

基本使用

示例

假设有一个名为employees的表,你想要检索其中的一部分记录。你可以使用LIMIT子句来实现这一点:

SELECT * FROM employees LIMIT 10;

这条语句将返回employees表中的前10条记录。

结合 OFFSET 使用

LIMIT子句通常与OFFSET子句结合使用,OFFSET用于指定从哪条记录开始获取数据,这在实现分页功能时非常有用。

示例

如果你想跳过前10条记录,并从第11条记录开始获取接下来的10条记录,你可以这样写:

SELECT * FROM employees LIMIT 10 OFFSET 10;

用途

  • 性能优化:当数据集非常大时,限制查询结果的数量可以减少网络传输的数据量,减轻数据库服务器的负载,提高查询响应时间。
  • 数据分页LIMITOFFSET的组合非常适用于数据分页,这在Web应用和移动应用中非常常见,可以用户逐页浏览数据而不是一次性加载全部数据。
  • 抽样调查:当需要从大量数据中随机抽取样本进行分析时,LIMIT可以用来限制返回的记录数,虽然需要额外的方法来确保数据的随机性。

分组查询

在SQL中,分组查询是通过GROUP BY子句实现的,它允许你将结果集的行根据一个或多个列的值分组。这通常与聚合函数(如COUNT(), SUM(), AVG(), MAX(), MIN()等)一起使用,以对每个组进行计算或总结。

基本使用

GROUP BY子句跟在FROMWHERE子句之后(如果存在WHERE的话),并在ORDER BY子句之前。它可以对查询结果进行分组,然后对每个分组应用聚合函数。

示例

假设有一个名为sales的表,其中包含date, region, 和amount字段,你可以使用GROUP BY来计算每个地区的总销售额:

SELECT region, SUM(amount) AS total_sales
FROM sales
GROUP BY region;

这条语句将按region列的值对sales表中的行进行分组,并计算每个地区的销售总额。

多列分组

你可以根据多个列进行分组。例如,如果你想按年份和地区分组计算销售额,假设date字段包含日期信息:

SELECT YEAR(date) AS year, region, SUM(amount) AS total_sales
FROM sales
GROUP BY YEAR(date), region;

这里,结果将根据年份和地区分组,为每个组合计算销售总额。

使用HAVING子句

HAVING子句用于对GROUP BY生成的分组进行条件过滤,它是在分组和聚合完成后应用的。HAVING类似于WHERE子句,但WHERE过滤行,而HAVING过滤组。

示例

如果你只想显示销售额超过某个特定值的分组:

SELECT region, SUM(amount) AS total_sales
FROM sales
GROUP BY region
HAVING SUM(amount) > 10000;

这里,只有那些销售总额超过10,000的地区才会被显示。

常见用途

  • 业务洞察:通过分组查询,可以快速了解不同类别、地区或时间段内的业务表现。
  • 报告和汇总:为报告制作提供汇总数据,如月度销售、年度成本分析等。
  • 数据清洗:识别异常值或进行数据质量分析,例如分组后查找不符合预期的数据点。

*查询的执行顺序

在MySQL中,SQL查询命令的执行顺序是指数据库如何内部处理SQL语句的不同部分,从而生成最终的查询结果。理解这一执行顺序对于编写高效的SQL查询尤为重要,因为它帮助开发者理解如何优化查询以及为什么某些查询写法比其他方法更有效。

以下是MySQL处理SQL查询语句的典型逻辑执行顺序:

  1. FROM子句

    这是处理的第一步。MySQL从指定的表中读取数据。如果涉及多个表,将进行相应的联接操作。
  2. JOIN子句

    如果查询中包含多个表,将根据JOIN子句指定的条件执行联接。这一步发生在任何WHERE筛选之前,因此JOIN的处理会影响后续步骤中涉及的数据量。
  3. WHERE子句

    过滤步骤,此时会根据WHERE子句中指定的条件筛选从FROM和JOIN步骤获取的数据。只有满足条件的行才会被进一步处理。
  4. GROUP BY子句

    如果查询包含GROUP BY子句,MySQL此时会将之前的结果集按照指定的字段进行分组。
  5. HAVING子句

    类似于WHERE子句,但是它是在数据已经被分组后进行过滤。HAVING子句用于筛选那些满足指定条件的组。
  6. SELECT子句

    选择特定的列。这一步只处理那些在之前的步骤中没有被过滤掉的行,且只包括指定要返回的字段。
  7. DISTINCT子句

    如果使用了DISTINCT关键字,MySQL此时会去除重复的数据行,确保查询结果中的每行数据都是唯一的。
  8. ORDER BY子句

    结果排序。此步骤在所有行被选择和可能的去重之后进行,根据指定的字段对结果集进行排序。
  9. LIMIT / OFFSET子句

    最后阶段,限制返回的结果数或者跳过一定数量的行。这常用于分页显示结果。

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

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

相关文章

图片转图标(ICO)的工具软件

目前常用的ICO转换方式大多都是网页在线转换&#xff0c;没网就无法使用了。自己编写了一款小软件&#xff0c;可以将各种格式图片转为ICO图标。 目前支持PNG,BMP,JPG,JPEG,GIF等格式的图片转换成ICO&#xff0c;支持的尺寸有常用的16*16&#xff0c;24*24&#xff0c;32*32&am…

Linux 进程间通信 System V系列: 共享内存,信号量,简单介绍消息队列

进程间通信 System V系列: 共享内存,初识信号量 一.共享内存1.引入2.原理3.系统调用接口1.shmget2.shmat和shmdt3.shmctl 4.边写代码边了解共享内存的特性1.ftok形成key,shmget创建与获取共享内存2.shm相关指令3.shmat和shmdt挂接和取消挂接4.shmctl获取共享内存信息,释放共享内…

政务网离线安装python3及其依赖手册

文章目录 python安装及环境配置gcc安装make安装python3安装pip安装 测试测试python3报错:ModuleNotFoundError: No module named _ctypes’测试pip3报错“pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.” 依赖库…

springboot 日志详解

系统用户操作日志(记录用户操作并定时保存到表中) 客户需求: 要对几个关键的业务功能进行操作日志记录&#xff0c;即什么人在什么时间操作了哪个功能&#xff0c;操作前的数据报文是什么、操作后的数据报文是什么&#xff0c;必要的时候可以一键回退。 设计思路: ruoyi中使用S…

共享旅游革命:千益畅行卡的优势揭秘

在共享经济的快速发展中&#xff0c;共享旅游创业已成为许多创新者和投资者关注的重点。特别是千益畅行&#xff0c;作为共享旅游行业的新秀&#xff0c;其商业模型和经营策略引起了市场的高度讨论。然而&#xff0c;对于这个公司是否仅仅是新一轮的市场“收割者”&#xff0c;…

Kylin Server V10下FTP服务器安全加固

一、查看操作系统信息 [root@localhost ~]# cat /etc/.kyinfo [dist] name=Kylin milestone=Server-V10-GFB-Release-ZF9_01-2204-Build03 arch=arm64 beta=False time=2023-01-09 11:04:36 dist_id=Kylin-Server-V10-GFB-Release-ZF9_01-2204-Build03-arm64-2023-01-09 11:04…

大模型prompt实例:知识库信息质量校验模块

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式&#xff1a;向最临近值取整nearest。 10进制数的nearest nearest&#xff1a; 向最临近值方向取整。它的舍入方式和四舍五入非常类似&#xff0c;都是舍入到最近的整数…

【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用

预告 Unity开发AR系列 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境

计算机视觉与深度学习实战之以Python为工具:基于主成分分析的人脸二维码识别

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:计算机视觉与深度学习实战-以MATLAB和Python为工具_基于主成分分析的人脸二维码识别_项目开发案例教程.pdf 一、引言 随着科技的快速发展,计算机视觉…

单链表经典oj题(2)

前言 这次将要把剩下的oj题将以图解和自己的理解把它讲解完&#xff0c;希望对大家有所帮助&#xff0c;这次的讲解也是干货 第一题 21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; ok这次就简单点&#xff0c;大家自己去看题目了 将两个升序链表合并为一个…

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题&#xff1a; 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本&#xff1a; sed -i s/old_string/new_string/g /path/to/file然而&#xff0c;当我在Mac OS X上尝试时&#xff0c;我得到&#xff1a; command i expects \ followed by text我以为我的Mac运行的是…

未授权访问:Memcached 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章&#xff1a; 这里附上大…

如何在OpenWrt软路由中增加一个新功能

为了在OpenWrt中增加一个新的功能&#xff0c;并使其支持 UCI 配置&#xff0c;我们可以创建一个简单的C语言服务&#xff0c;例如一个简单的日志服务。此服务将记录到日志文件中&#xff0c;并支持通过 UCI 配置启用或禁用日志功能。以下是详细的步骤和代码示例。 1 创建服务…

K8S三 K8S部署微服务应用

一 用k8s部署微服务应用 以我们之前用docker部署过的eureka应用为例&#xff0c;首先添加配置文件eureka-app-deployment.yaml用于创建Deployment apiVersion: apps/v1 kind: Deployment metadata:name: eureka-app-deployment # deployment名字labels:app: eureka-app spec:…

【C++】CentOS环境搭建-升级CMAKE

【C】CentOS环境搭建-升级CMAKE CMAKE报错CMake 3.12 or higher is required. You are running version 2.8.12.2升级步骤1.移除当前的cmake2.安装必要的构建工具和库3.下载最新的cmake源码并解压5.编译和安装6.验证安装 CMAKE报错CMake 3.12 or higher is required. You are r…

oraclesql中删除表中重复行的方法

在Oracle SQL中&#xff0c;删除表中的重复行有几种常见的方法。以下是其中的三种&#xff1a; 使用ROWID: 通过比较ROWID&#xff0c;你可以找到并删除重复的行。这是因为ROWID是Oracle数据库为每一行数据分配的唯一标识符。 sql DELETE FROM persons p1 WHERE ROWID NOT…

MySQL存储引擎详解

存储引擎 MySQL体系结构 连接层&#xff1a;与客户端连接&#xff0c;权限校验、连接池服务层&#xff1a;SQL接口和解析、查询优化、缓存、函数引擎层&#xff1a;索引、存储引擎存储层&#xff1a;系统文件、日志&#xff08;Redo、Undo等&#xff09; 存储引擎介绍 不同的…

SSH:安全远程访问的基石

SSH&#xff1a;安全远程访问的基石 一、引言 在当今这个数字化、网络化的时代&#xff0c;远程访问和管理计算机资源已成为日常工作的重要组成部分。然而&#xff0c;如何在不安全的网络环境中确保数据传输的机密性、完整性和可靠性&#xff0c;成为了一个亟待解决的问题。S…

前端测试策略与实践:单元测试、E2E测试与可访问性审计

前端测试策略是确保Web应用程序质量、性能和用户体验的关键组成部分。有效的测试策略通常包括单元测试、端到端&#xff08;E2E&#xff09;测试以及可访问性审计等多个层面。以下是关于这三类测试的策略与实践建议&#xff1a; 单元测试 定义与目的&#xff1a; 单元测试是针…