MySQL:基本查询操作

插入

  • 基本插入语法:
insert [into] 表名 (列1, 列2 ...) values (值1, 值2 ...);
create table students(
id int unsigned primary key auto_increment,
sn int not null unique comment '学号',
name varchar(20) not null,
tel varchar(20)
);

一次性指定所有值,那么省略(列1, 列2 ...)部分:

insert into students values (100, 20240001, '张三', NULL);

插入时只指定部分值,那么就需要通过(列1, 列2 ...)来指定:

insert into students (id, sn, name) values (101, 20240006, '小明');

也可以一次性插入多行,每一行的数据用(值1, 值2 ...)表示,不同行数据之间用逗号隔开:

insert into students (id, sn, name) values 
(105, 20240052, '小张'), 
(109, 20240096, '小李');

插入冲突

在插入数据时,有可能因为主键和唯一键的存在,导致冲突而插入失败。此时可以利用插入替换,或者直接替换。

插入替换

  • 插入替换语法:
insert ... on duplicate key update 列1=值1, 列2=值2 ...;

示例:

insert into students (id, sn, name) values (101, 20240066, '昊天') 
on duplicate key update sn=20240066;

其中insert ...表示一个完整的插入语句,该语句的作用是:insert语句如果冲突,则执行后面的列1=值1, 列2=值2 ...进行值替换。

插入替换的作用是:插入失败时,只替换部分指定的值,保留部分原先的值。 

直接替换

插入时,也可以直接替换,只需把insert改为replace即可:

replace [into] 表名 (列1, 列2 ...) values (值1, 值2 ...);

这种直接替换,如果插入时发生冲突,会直接删除原先的行,重新插入当前行。

replace into students (id,sn,name) values (109, 20240100, '小杨');

查询

示例表格:

create table exam_result (
id ind unsigned primary akey auto_increment,
name varchar(20) not null comment '同学姓名',
chinese float default 0.0 comment '语文成绩',
math float default 0.0 comment '数学成绩',
english float default 0.0 comment '英语成绩'
);

示例数据:

insert into exam_result (name, chinese, math, english) values
('小明', 67, 98, 56),
('小红', 87, 78, 77),
('小翠', 88, 98, 90),
('小朱', 82, 84, 67),
('小雨', 55, 85, 45),
('小鑫', 70, 73, 78),
('小彤', 75, 65, 30),
('小朵', NULL, NULL, NULL);
  • 基本查询语法
select 表达式1, 表达式2 ... from 表名;

此处的表达式含义非常广,它可以是列名,通配符*,或者基本字面量,计算式等。

1.通配符*做表达式,输出所有的列

在这里插入图片描述

测试表中,有id, name, chinses, math, english列,通过*全部都查询出来了

2.列名做表达式,输出指定的列

在这里插入图片描述

此处的表达式为name, chinese,所以只输出这两列。

3.基本字面量与计算式做表达式,输出计算结果

在这里插入图片描述

在计算表达式时,如果指定了表,那么这个表有几行,表达式就计算多少次。如果表达式中没有依赖表中的列,而是单纯的计算,那么可以不指定表名:

在这里插入图片描述

这次的查询中,没有指定表名,也没有使用表的列,那么表达式默认只计算一次,输出一行。

计算的意义在于:列与列之间同样可以计算!

第二列中,通过chinese + english + math计算出了总分。

但是这样看表的话,chinese + english + math这个整体作为列名有点长了,此时可以使用as来对列重命名。

  • 使用as对列重命名:
select 表达式1 as 新名1, 表达式2 as 新名2 ... from 表名;

as也可以省略:

select 表达式1 新名1, 表达式2 新名2 ... from 表名;


distinct

直接查询math列:

在这里插入图片描述

此处出现了两个98,能否对查询结果去重

  • 使用distinct对查询结果去重:
select distinct 表达式1, 表达式2 ... from 表名;


where

观察一下之前的查询,会发现我们一直在对列做限制,而每次查询出来的行数目是一样的。如果说我们想对数据的值做限制,比如“数学成绩大于等于60分”,那么就需要where子句。

  • 通过where子句来查询符合要求的数据:
select 表达式1, 表达式2 ... from 表名 where 表达式;

  • 查询英语小于60分的同学:
select name, english from exam_result where english < 60;
  • 查询数学成绩为临界值(58, 59, 98, 99)的学生:
select name, math from exam_result where math in (58, 59, 98, 99);
  • 查询数学成绩大于成绩的同学:
select name, math, english from exam_result where math > english;
  • 查询总分200以上的同学:
select name, math + english + chinese as total from exam_result 
where math + english + chinese > 200;


order by

如果想要对查询的结果进行排序,就需要order by子句。

  • 通过order by子句对查询结果排序:
select ... from 表名 where ... order by 列1 asc|desc, 列2 asc|desc ... ;

asc表示升序,desc表示降序,如果不指定那么默认为asc升序。

  • 以数学成绩升序展示所有成绩:
select name, math, chinese, english from exam_result order by math asc;

此处NULL被放在了第一列,在SQL中认为NULL比所有值都小。 

  • 以总分降序查询:
select name, chinese + math + english as total from exam_result
order by chinese + math + english desc;

limit

假设已经查询好数据,排序完成了,如果只需要取用前三条数据,这要如何完成?此时就需要limit,其用于展示查询到的数据的指定部分。

  • 输出前x条数据:
select ... from 表名 where ... order by ... limit x;
  • 输出下标为[x, y]的数据(下标从0开始):
select ... from 表名 where ... order by ... limit x, y;
select ... from 表名 where ... order by ... limit x offset y;

 

查询前三行:

select * from exam_result limit 3;

查询第2到5行:

select * from exam_result limit 1, 4;

[2, 5]的下标是[1, 4],注意不要搞错了。

limit的执行顺序非常靠后,在整个数据查询,排序完毕后,才执行limit


删除

MySQL中,有两种删除数据的方法,分别是deletetruncate,两者功能略有差别。

delete
  • 通过delete删除数据
delete from 表名 where ... order by ... limit ...;
  • 删除整张表的数据:
delete from exam_result;

执行select时查询不到任何数据,说明确实删除成功了。在show create table时,字段auto_increment=9说明delete是不会清空自增长的。 

  •  删除小朵所在行:
delete from exam_result where name = '小朵';

truncate

相比于deletetruncate有以下特点:

  1. truncate只能用于删除整个表
  2. truncate不经过事务,速度更快
  3. 会重置auto_increment
  • 使用truncate清空表的所有数据:
truncate table 表名;

truncate后,auto_increment字段的值就被重置了。


更新

  • 更新表中数据
update 表名 set 列1 = 值1, 列2 = 值2 where ... order by ... limit ...
  • 将小红的英语成绩改为100
update exam_result set english = 100 where name = '小红';
  • 将数学成绩倒数的三名同学,数学成绩加上10分:
update exam_result set math = math + 10 order by math asc limit 3;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

损耗金属件检测系统源码分享

损耗金属件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

25达能笔试测评秋招校招认知和行为偏好测评题型分析

达能认知和行为偏好测评笔试测评用的游戏化测评数字推理&#xff0c;具体有四类&#xff1a; 职业行为测试&#xff1a;从选项中选择你更偏向的那个&#xff0c;在选择的时候就可以往达能的企业文化相关方向靠。 motion challenge&#xff1a;类似华容道呢&#xff0c;要用最…

18063 圈中的游戏

### 思路 1. 创建一个循环链表表示围成一圈的 n 个人。 2. 从第一个人开始报数&#xff0c;每报到 3 的人退出圈子。 3. 重复上述过程&#xff0c;直到只剩下一个人。 4. 输出最后留下的人的编号。 ### 伪代码 1. 创建一个循环链表&#xff0c;节点表示每个人的编号。 2. 初始…

初识软件测试

目录 一、什么是测试 1. 生活中的测试场景 2. 为什么需要软件测试 3. 软件测试定义 二、测试的岗位有哪些 1. 软件测试开发工程师 2. 测试工程师 &#x1f334;高频面试题&#xff1a; 三、软件测试和开发的区别 1. 工作内容 2. 难易程度上 3. 工作环境 4. Money …

【WPF】桌面程序开发之xaml页面绑定数据模型详解

使用Visual Studio开发工具&#xff0c;我们可以编写在Windows系统上运行的桌面应用程序。其中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;项目是一种常见的选择。然而&#xff0c;对于初学者来说&#xff0c;WPF项目中xaml页面的布局设计可能是一…

java项目之在线考试与学习交流网页平台源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线考试与学习交流网页平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于JAVA语言…

C++数据结构-树的概念及分类介绍(基础篇)

1.什么是树 树是数据结构中的一种&#xff0c;其属于非线性数据结构结构的一种&#xff0c;我们前文所提到的数据结构多数都是线性的&#xff0c;这也是较为简单的数据结构&#xff0c;而接下来的树与图均属于非线性数据结构&#xff0c;也是概念极多的一类。 树是由结点或顶…

OSS对象资源管理

1、登录aliyun 1.1、什么是OSS&#xff1f;有什么用&#xff1f; OSS 是“Object Storage Service”的缩写&#xff0c;中文常称为“对象存储服务”。OSS 是一种互联网云存储服务&#xff0c;主要用于海量数据的存储与管理。 相较于nginx&#xff0c;OSS更灵活&#xff0c;不…

yolov8 pose姿态关键点识别动物姿态识别

导言 介绍了 Tiger数据集&#xff0c;这是一个专为姿势估计任务设计的多功能数据集。该数据集由来自YouTube 视频的 263 张图片组成&#xff0c;其中 210 张用于训练&#xff0c;53 张用于验证。它是测试姿势估计算法和排除故障的绝佳资源。 尽管虎姿态数据集只有 210 张图像…

AT89C51 Intel HEX手工结构分析 反汇编工具

在不查询格式情况下分析确定 Intel HEX 格式 Hex文件内容 :0300000002090BE7 :0C090B00787FE4F6D8FD7581080208F63C :01091700419E :1008F60078087C007D007BFF7A0979177E007F01EE :050906001208D080FE84 :10080000E709F608DFFA8046E709F208DFFA803EDA :1008100088828C83E709F0…

9.15 BFS中等 133 Clone Graph review 138 随机链表的复制

133 Clone Graph //错误代码class Solution { public:Node* cloneGraph(Node* node) {//邻接表、BFS---》类似于二叉树的层次遍历if(!node || !node->val) return node;//构造队列queue<Node*> prev;prev.push(node);//构造新的图结点列表vector<Node*> adjList…

用Spring Boot搭建的读书笔记分享平台

第1章 绪论 1.1课题背景 计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。用户可以通过计算机上的浏览器访问多个应用系统&#xff0c;从中获取一些可以满足用户需求的管理系统。网站系统有时更像是一个大型“展示平台”&#xff0c;用户可以选择所需的信息进入…

framework解决权限不足无法安装apk

文件浏览器中安装apk权限不足 源码位置 base/services/core/java/com/android/server/uri/UriGrantsManagerService.java

java数据结构----图

图的存储结构: 代码实现 public class Graph {// 标记顶点数目private int V;// 标记边数目private int E;// 邻接表private Queue<Integer>[] adj;public Graph(int v) {V v;this.E 0;this.adj new Queue[v];for (int i 0; i < adj.length; i) {adj[i] new Queu…

初中(7-9年级)数学-人教版视频全套

文章目录 一、紧贴教材&#xff0c;内容全面二、生动讲解&#xff0c;易于理解三、灵活学习&#xff0c;随时随地四、获取方式 初中数学人教版视频全套&#xff0c;专为使用人教版教材的学生打造。通过高清视频、生动讲解和精准辅导&#xff0c;帮助学生轻松掌握数学知识点&…

系统架构设计师教程 第5章 5.2 需求工程 笔记

5.2 需求工程 ★★★★★ 软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 软件需求包括3个不同的层次&#xff1a;业务需求、用户需求和功能需求(也包括非功能需求)。 (1)业务需求 (business requirement) 反映了组织机构或客户对系统、产品高层次的目标…

电信网络携手大模型:AI赋能网络运维的新范式

当电信网络用上大模型&#xff0c;会带来怎样的体验&#xff1f; 过去&#xff0c;网络出现问题时&#xff0c;运维人员需要依赖经验反复排查&#xff0c;找到“病根”后再“对症下药”。但在大模型的加持下&#xff0c;问题的解决方式发生了颠覆性的改变。 如今&#xff0c;…

java项目之基于工程教育认证的计算机课程管理平台(源码+论文)

项目简介 基于工程教育认证的计算机课程管理平台的主要管理员可以管理教师&#xff0c;可以对教师信息修改删除以及查询操作&#xff1b;可以对通知公告信息进行添加&#xff0c;修改&#xff0c;删除以及查询操作&#xff1b;可以对学生信息进行添加&#xff0c;修改&#xf…

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组、1143. 最长公共子序列

300. 最长递增子序列 1.dp定义&#xff1a;dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&#xff0c;而是我们要取dp[j] 1的最大值…

Linux操作系统入门(一)

Linux操作系统是开源的类Unix操作系统内核&#xff0c;由林纳斯托瓦兹在1991年创建。 Linux操作系统以其强大的性能、稳定性和开放性&#xff0c;赢得了全球用户的广泛认可&#xff0c;从服务器到个人电脑&#xff0c;从超级计算机到嵌入式设备&#xff0c;都有它的身影。作为…