MySQL之表的增删查改(1)

news2024/10/7 6:49:13

目录

一、插入数据

1、单行数据 + 全列插入

2、多行数据 + 指定列插入

3、插入否则更新

4、替换

二、读取

1、select列

2、where条件

3、结果排序

4、筛选分页结果

一、插入数据

首先创建一张表

mysql> CREATE TABLE students(
    -> id int unsigned primary key auto_increment,
    -> sn int not null unique comment '学号',
    -> name varchar(20) not null,
    -> qq varchar(20) unique
    -> );

1、单行数据 + 全列插入

插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致

mysql> insert into students values(100,10000,'唐三',null);
Query OK, 1 row affected (0.00 sec)

mysql> insert into students values(101,10001,'唐三藏','12345');
Query OK, 1 row affected (0.01 sec)

2、多行数据 + 指定列插入

插入两条记录,value_list 数量必须和指定列数量及顺序一致
mysql> insert into students (id,sn,name) values (102,10002,'孙悟空'),
(103,10003,'孙仲谋');

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

3、插入否则更新

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

mysql> insert into students (id,sn,name) values (100,10010,'唐唐');
ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'

mysql> insert into students (id,sn,name) values (104,10001,'曹阿瞒');
ERROR 1062 (23000): Duplicate entry '10001' for key 'sn'

此时我们可以选择性的进行更新操作,

语法:

INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
//ON DUPLICATE KEY 当发生重复key的时候
mysql> insert into students (id,sn,name) values (100,10010,'唐唐') 
on duplicate key update sn=10010,name='唐唐';

Query OK, 2 rows affected (0.00 sec)
说明:
0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等;
1 row affected: 表中没有冲突数据,数据被插入;
2 row affected: 表中有冲突数据,并且数据已经被更新;
注意不要和其他行的主键或者唯一键冲突;

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

4、替换

主键 或者 唯一键 没有冲突,则直接插入; 主键 或者 唯一键 如果冲突,则删除后再插入
mysql> replace into students (sn,name) values(10010,'曹阿瞒');
Query OK, 2 rows affected (0.00 sec)
 说明: 
1 row affected: 表中没有冲突数据,数据被插入
 2 row affected: 表中有冲突数据,删除后重新插入

二、读取

创建表

mysql> CREATE TABLE exam_result (
    -> id INT UNSIGNED PRIMARY KEY 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 '英语成绩'
    -> );
Query OK, 0 rows affected (0.03 sec)

插入数据

mysql> 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);
Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0

1、select列

(1)全列查询

说明:

通常情况下不建议使用 * 进行全列查询
——查询的列越多,意味着需要传输的数据量越大;
——可能会影响到索引的使用。(索引待后面课程讲解)
SELECT * FROM exam_result;

(2)指定列查询

 select id,name from exam_result;

(3)查询字段为表达式

select id,name, 100 from exam_result;

select id,name, english+10 from exam_result;

select id,name,chinese+math+english from exam_result;

(4)为查询结果指定别名

SELECT column [AS] alias_name [...] FROM table_name;
mysql> select id,name 名字,chinese+math+english 总分 from exam_result;

5(结果去重)

mysql> select distinct math from exam_result;

2、where条件

比较运算符:

(1)英语不及格的同学及英语成绩

mysql> select name,english from exam_result where  english<60;

(2)语文成绩在 [80, 90] 分的同学及语文成绩

mysql> select name,chinese from exam_result where chinese>=80 and chinese<=90;

mysql> select name,chinese from exam_result where chinese between 80 and 90;

(3) 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

mysql> select name,math from exam_result where
    -> math=58
    -> or math=59
    -> or math=98
    -> or math=99;

mysql> select name,math from exam_result where math in(58,59,98,99);

(4)找出琪某某和凯某

mysql> select name,math from exam_result where name like '琪%';
% 匹配任意多个(包括0个)任意字符

mysql> select name,math from exam_result where name like '凯_';
_ 匹配严格的一个任意字符

(5)找出语文成绩好于英语成绩的同学

mysql> select name,chinese,english from exam_result where chinese>english;

(6)总分在200以下的同学

mysql> select name, (math+chinese+english) from exam_result 
where (math+chinese+english)<200;

mysql> select name, (math+chinese+english) 总分  from exam_result where (math+chinese+english)<200;


select name, (math+chinese+english) 总分  from exam_result where 总分<200;
ERROR 1054 (42S22): Unknown column '总分' in 'where clause'

分析:在 SQL 语言中,where 和 select 的执行顺序是这样的:

  • 首先,根据 from 子句确定要查询的表或视图。
  • 其次,根据 where 子句过滤出满足条件的记录。
  • 最后,根据 select 子句选择要显示的字段和计算的结果。

因此,where 子句是在 select 子句之前执行的,这意味着 where 子句中不能使用 select 子句中定义的别名或计算字段。

(7)语文成绩好于80,并且不是琪某某和芽某

mysql> select name,chinese from exam_result where chinese>80 
and name not like '琪%' and name not like '芽%';

(8)某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

mysql> select name,math,chinese,english, math+english+chinese 总分
    -> from exam_result where
    -> name like '温_' or(
    -> chinese+math+english>200 and chinese<math and english>80
    -> );

(9)null的查询


mysql> select name,qq from students where qq is not null;

mysql> SELECT NULL <=> NULL, NULL <=> 1, NULL <=> 0;
1 row in set (0.00 sec)

mysql> select null<=>null,null<=>1,null<=>0;
1 row in set (0.00 sec)

3、结果排序

语法:

ASC 为升序(从小到大)
DESC 为降序(从大到小)
默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

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

mysql> select name ,math from exam_result order by math asc;

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

        多字段排序,排序优先级随书写顺序

mysql> select name,math,english,chinese from exam_result 
    -> order by math desc,english,chinese;

(3)查询同学及总分,由高到低

mysql> select name ,math+english+chinese from exam_result
    -> order by math+english+chinese desc;

(4)查询姓琪亚娜,芽衣和板鸭的数学成绩,结果按数学成绩由高到低显示

mysql> select name,math from exam_result where name like '琪%' 
or name like '芽%' or name like '板%' order by math desc;

4、筛选分页结果

-- 起始下标为 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 ,避免因为表中数据过大,查询全表数据导致数据库卡死
示例: id 进行分页,每页 3 条记录,分别显示 第 1 2 3
mysql> select id,name,math+english+chinese 总分 
from exam_result order by id limit 3 offset 0;

mysql> select id,name,math+english+chinese 总分 
from exam_result order by id limit 3 offset 3;

mysql> select id,name,math+english+chinese 总分 
from exam_result order by id limit 3 offset 6;

如果结果不足 3 个,不会有影响。


                

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

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

相关文章

背靠背 HVDC-MMC模块化多电平转换器输电系统-用于无源网络系统的电能质量调节MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; MATLAB2021版本 模型简介&#xff1a; MMC-HVDC模拟背靠背HVDC模块化多电平换流器&#xff08;MMC&#xff09;作为为整个电网供电的电能质量调节系统。因此&#xff0c;模块化多电平逆变器作为远程端转换器…

PyTorch 深度学习之用PyTorch实现线性回归Linear Regression with PyTorch(四)

0. Revision 1. PyTorch Fashion 2 Prepare dataset 广播机制 loss 3 Design model 文档 callable 4 Construct Loss and Optimizer 5 Training Cycle 总结 Test model

知识图谱:知识融合

知识融合简介 知识融合&#xff0c;即合并两个知识图谱(本体)&#xff0c;基本的问题都是研究怎样将来自多个来源的关于同一个实体或概念的描述信息融合起来。需要确认的是&#xff1a;等价实例、等价类/子类、等价属性/子属性。 一个例子如上图所示&#xff0c;图中不同颜色的…

【unity2023打包安卓工程】踩坑记录

这里写自定义目录标题 踩坑记录使用环境Unity的准备工作Windows10 SDKAndroidstudio第一个需要注意的地方第二个需要注意的地方第三个需要注意的地方第四个需要注意的地方第五个需要注意的地方 踩坑记录 踩了快一个星期的坑&#xff0c;希望能帮助到有需要的人 项目使用的是uni…

WorkPlus私有化部署IM即时通讯平台,构建高效安全的局域网办公环境

随着数字化转型的加速&#xff0c;政府机构与企业对高效、安全的即时通讯和协作工具的需求日益增长。企业微信和钉钉作为当前市场上较为常见的通讯工具&#xff0c;虽然在一定程度上满足了企业内部协作的需求&#xff0c;但仍存在一些问题&#xff0c;如数据安全性、私有化部署…

OpenCV实现图像的礼帽和黑帽

礼帽运算 黑帽运算 参数 cv.morphologyEx(img,op,kernel)参数&#xff1a; img : 要处理的图像op: 处理方式 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei]#读取图像img1 …

【Linux】系统编程基于阻塞队列生产者消费者模型(C++)

目录 【1】生产消费模型 【1.1】为何要使用生产者消费者模型 【1.2】生产者消费者模型优点 【2】基于阻塞队列的生产消费者模型 【2.1】生产消费模型打印模型 【2.2】生产消费模型计算公式模型 【2.3】生产消费模型计算公式加保存任务模型 【2.3】生产消费模型多生产多…

指针笔试题讲解

文章目录 题目答案与解析1、234、5、6、7、8、 题目 int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }//由于还没学习结构体&#xff0c;这里告知结构体的大小是20个字节 //由于还没学习结…

解答嵌入式和单片机的关系

嵌入式系统是一种特殊的计算机系统&#xff0c;用于特定任务或功能。而单片机则是嵌入式系统的核心部件之一&#xff0c;是一种在单个芯片上集成了处理器、内存、输入输出接口等功能的微控制器。刚刚好我这里有一套单片机保姆式教学&#xff0c;里面有编程教学、问题讲解、语言…

试图一文彻底讲清 “精准测试”

在软件测试中&#xff0c;我们常常碰到两个基本问题&#xff08;困难&#xff09;&#xff1a; 很难保障无漏测&#xff1a;我们做了大量测试&#xff0c;但不清楚测得怎样&#xff0c;对软件上线后会不会出问题&#xff0c;没有信心&#xff1b; 选择待执行的测试用例&#…

百胜中国,全面进击

“未来三年&#xff0c;每年净增约1800家新店。” 美股研究社关注到&#xff0c;2023年投资者日活动上&#xff0c;百胜中国根据2024至2026年的发展规划&#xff0c;启动了集团RGM2.0战略。 三年时间&#xff0c;门店数要达到20000家&#xff0c;平均每年新增门店约1800家&am…

【【萌新的SOC大学习之hello_world】】

萌新的SOC大学习之hello_world zynq本次hello world 实验需要 PS-PL Configuration 页面能够配置 PS-PL 接口&#xff0c;包括 AXI、HP 和 ACP 总线接口。 Peripheral IO Pins 页面可以为不同的 I/O 外设选择 MIO/EMIO 配置。 MIO Configuration 页面可以为不同的 I/O 外设具…

蓝牙核心规范(V5.4)11.2-LE Audio 笔记之LE Auido架构

专栏汇总网址&#xff1a;蓝牙篇之蓝牙核心规范学习笔记&#xff08;V5.4&#xff09;汇总_蓝牙核心规范中文版_心跳包的博客-CSDN博客 爬虫网站无德&#xff0c;任何非CSDN看到的这篇文章都是盗版网站&#xff0c;你也看不全。认准原始网址。&#xff01;&#xff01;&#x…

event.stopPropagation()

现在有如下 当点击子按钮的时候会触发子事件&#xff0c;同时也会触发父事件&#xff0c; 如何阻止呢 handleDownload(event) { event.stopPropagation(); 。。。。。。。。。。 },

积跬步致千里 || 可视化动图展示

可视化动图展示 目前只能在 jupyter notebook 中测试成功 %matplotlib notebook import numpy as np import matplotlib.pyplot as plt import timen 500 data np.random.normal(0,1,n)fig plt.figure() ax fig.add_subplot(111)fig.show() fig.canvas.draw()for i in ra…

【新版】系统架构设计师 - 案例分析 - 信息安全

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 案例分析 - 信息安全安全架构安全模型分类BLP模型Biba模型Chinese Wall模型 信息安全整体架构设计WPDRRC模型各模型安全防范功能 网络安全体系架构设计开放系统互联安全体系结构安全服务与安全机制…

LRU、LFU 内存淘汰算法的设计与实现

1、背景介绍 LRU、LFU都是内存管理淘汰算法&#xff0c;内存管理是计算机技术中重要的一环&#xff0c;也是多数操作系统中必备的模块。应用场景&#xff1a;假设 给定你一定内存空间&#xff0c;需要你维护一些缓存数据&#xff0c;LRU、LFU就是在内存已经满了的情况下&#…

go语言 rune 类型

ASCII 码只需要 7 bit 就能完整地表示&#xff0c;但只能表示英文字母在内的 128 个字符&#xff0c;为了表示世界上大部分的文字系统&#xff0c;发明了 Unicode &#xff0c;它是 ASCII 的超集&#xff0c;包含世界上书写系统中存在的所有字符&#xff0c;并且为每个代码分配…

排队工会模式:电商营销的新趋势,让你的平台月流水过亿

排队工会模式是一种新型的电商营销模式&#xff0c;它利用产品利润分红的方式来吸引用户购买和推广&#xff0c;从而实现平台的流量和销量的增长。这种模式的核心是建立一个分红池&#xff0c;平台从每个产品的利润中拿出一定比例来充值分红池&#xff0c;然后按照用户的购买顺…

【yolov5】原理

Focus操作 anchors 先验框 其它 Yolov5的模型主要由Backbone、Neck和Head三部分组成。 Backbone&#xff1a;负责提取输入图像的特征。在Yolov5中&#xff0c;常见的Backbone网络包括CSPDarknet53或ResNet。这些网络都是相对轻量级的&#xff0c;能够在保证较高检测精度的同…