MySQL之基本查询(上)-表的增删查改

目录

Create(创建)

案例建表

插入

 单行数据 + 指定列插入

  单行数据 + 全列插入

多行数据 + 全列插入 

 插入是否更新

 插入时更新

 替换

 Retrieve(读取)

建表插入

select列

全列查询

指定列查询

查询字段为表达式

 为查询结果指定别名

结果去重

 where条件

比较运算符

 逻辑运算符

 案例

结果排序 

筛选分页结果 

表的增删查改:CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

Create(创建)

案例建表

mysql> create table if not exists students(
    -> id int unsigned primary key auto_increment,
    -> sn int not null unique key comment '学号',
    -> name varchar(20) not null,
    -> qq varchar(32)
    -> );

插入

语法:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...), (value1, value2, ...), ...;

  • INSERT INTO table_name: 指定要插入数据的目标表名。(INTO可省略)
  • (column1, column2, ...): 可选项,指定要插入数据的列名。如果省略列名,则假定将为所有列提供值。
  • VALUES (value1, value2, ...), (value1, value2, ...), ...: 指定要插入的值列表。每个 value_list 都对应一个要插入的行,每个值按照与列的顺序匹配。(几个小括号就是几行插入)

可以理解为values左边是列属性,右边是列属性的内容 ;相当于扁担

 单行数据 + 指定列插入

指定列单行插入:insert into students (sn,name,qq) values (123,'张飞','123456')

  单行数据 + 全列插入

因为忽略了列属性所以不知道向哪里插入所以要每个列都插入即全列插入;

单行全列:insert into students  values (2,124,'关于','123457');

多行数据 + 全列插入 

多行插入:你可以单行重复多次插入,也可以直接多行插入;

多行全列插入 :insert into students  values (3,125,'刘备','123458'),(4,126,'许褚','123459'),(5,127,'曹操','1234560');//用逗号分开表示多行

 如果多行指定列插入的话:那么忽略的列必须要有默认值(default值)或者它是自增长;

 插入是否更新

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

主键冲突mysql> insert into students  values (1,128,'关于','123457');

报错ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

唯一键冲突:mysql> insert into students  values (6,124,'关于','123457');

报错ERROR 1062 (23000): Duplicate entry '124' for key 'sn'

 插入时更新

可以选择性的进行同步更新操作

插入:insert into students  values (4,127,'xuyou','123123123') on duplicate key update sn=127,name='xuyou',qq='123123123';//如果碰到冲突了就执行update后面的语句

报错:ERROR 1062 (23000): Duplicate entry '127' for key 'sn'//因为sn唯一键冲突了

正确插入更新:insert into students  values (4,128,'xuyou','123123123') on duplicate key update sn=128,name='xuyou',qq='123123123';

//on duplicate key update可以理解为如果冲突了就执行后续更新操作否则就不执行


如果遇到冲突了,那么执行update的数据,前提是update的值也不能冲突;

当然也可以修改冲突的值:

mysql> insert into students  values (4,128,'xuyou','123123123') on duplicate key update id=6,sn=128,name='xuyou',qq='123123123';

那么冲突的也修改了;


但是这条操作就不行,因为更新语句主键不冲突但是唯一键冲突:

mysql> insert into students  values (6,128,'xuyou','123123123') on duplicate key update id=4,sn=123,name='xuyou',qq='123123123';//sn与id=1的sn数据冲突

正确:mysql> insert into students  values (6,128,'xuyou','123123123') on duplicate key update id=4,sn=128,name='xuyou',qq='123123123';

所以更新的唯一键要么不变要么不与其他冲突;


当然也可以这样:


老数据与新数据一样,虽然冲突了但是没变;也是可以的;

 插入成功后有提示:

当然也可以用函数查找受影响的行数(是上一个语句执行后受影响的行数) row_count()

 错误语句:没有受影响(-1)


查数据:没有行受影响(-1)


插入冲突数据:显示影响行数

 替换

对于replace:主键或者唯一键没有冲突,则直接插入;主键或者唯一键如果冲突,则删除后再插入;

插入不冲突的:replace into students  (sn,name,qq) values (129,'霸王','123');

插入冲突:replace into students  (sn,name,qq) values (131,'霸王2','123');

可以看到是先删除冲突的数据后再添加,由id的自增长可以看到;原来的10没了

 Retrieve(读取)

建表插入

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 '英语成绩' 
    -> );


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);

select列

全列查询

通 常 情 况 下 不 建 议 使 用 * 进 行 全 列 查 询:

- - 1 . 查 询 的 列 越 多 , 意 味 着 需 要 传 输 的 数 据 量 越 大 ;

- - 2 . 可 能 会 影 响 到 索 引 的 使 用 。

未来我们的数据库服务是在远端的服务器上的;

 select * from exam_result;//默认整张表的信息

指定列查询

select id from exam_result;//指定id列


select id,math,english from exam_result;//指定多个列

查询字段为表达式

mysql> select 1+1;

mysql> select 7*9;

mysql> select id,math,english,10 from exam_result;

mysql> select id,math+english,10 from exam_result;

 为查询结果指定别名

mysql> select id,math+english as total from exam_result;


mysql> select id,math+english  total from exam_result;//省略as也是可以的,一样结果
mysql> select name 姓名,math+english  总分 from exam_result;//多个别名,用逗号分隔


mysql> select 1+1 假发;

 对哪一列起别名就在哪一列后面加别名;

结果去重

distinct:只能进行单列的去重挑选唯一值;

mysql> select distinct math from exam_result;//对那一列去重就在那一列前加distinct

错误多列去重:select distinct math,distinct english from exam_result;//不能多列去重

 where条件

比较运算符

在MySQL中比较两个数字或者字符串是否相等用的是一个等号 ;

在使用=时,不能使用NULL=NULL;不安全

 

正常情况下比较后是true(1)或者false(0),但是NULL=NULL不是而是NULL

当然你可以这样:mysql>  select NULL<=>NULL;//这样安全

<=>也可以使用数字或者字符串比较;


 !=和<>同样无法比较NULL,可以比较数字与字符串


NULL不参与任何计算 ,任何数与null计算都是null

 IS NULL


IS NOT NULL

 逻辑运算符

 案例

英语不及格的同学及英语成绩 ( < 60 ):

mysql> select english from exam_result where english<60;//使用比较运算符

 语文成绩在 [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;

使用between x and xx;本身就是闭区域

 数学成绩是 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);//使用in

只要满足in里面任意一个就为真;

 姓孙的同学及孙某同学:模糊匹配      (姓孙可以是孙某也可以是孙某某或者孙某某某等)

% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

姓孙:mysql> select name from exam_result where name like '孙%';
孙某:mysql> select name from exam_result where name like '孙_';

 语文成绩好于英语成绩的同学

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

 总分在 200 分以下的同学

错误:mysql> select name,chinese+math+english total from exam_result where total <200;
ERROR 1054 (42S22): Unknown column 'total' in 'where clause'/
/别名不能用在 WHERE 条件中

是先执行from exam_result然后执行where total <200语句最后执行select name,chinese+math+english total;但是在第二步就错了因为表中没有total列
正确:mysql> select name,chinese+math+english total from exam_result where chinese+math+english <200;

 语文成绩 > 80 并且不姓孙的同学

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

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

mysql> select name,chinese,math,english,chinese+math+english total from exam_result where name like '孙_' or (chinese+math+english>200 and chinese<math and english>80);加小括号更准确

 看name中是否有NULL

mysql> select name from exam_result where name is null;

 where可以理解为条件

结果排序 

--ASC 为升序(从小到大)

-- DESC 为降序(从大到小)

-- 默认为 ASC

SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

 降序:mysql> select name,math from exam_result order by math desc;

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

NULL 视为比任何值都小,升序出现在最上面 ;

NULL 视为比任何值都小,降序出现在最下面;

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

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

mysql> select name,math,english,chinese from exam_result order by math desc,english,chinese;//不写的话默认asc

如果数学成绩每个人都相等,那么就按照英语成绩的升序来完成,以此类推;


就比如唐三藏和猪悟能的数学成绩一样,那么就按照英语的升序排序比较;

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

ORDER BY 中可以使用表达式

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


mysql> select name,math+english+chinese total from exam_result order by total desc;//可以使用别名

为什么这里可以使用呢?因为先from exam_result然后条件where再选出select name,math+english+chinese total最后比较order by     四步操作顺序进行,所以能用别名

 查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示

mysql> select name,math from exam_result where name like '孙%' or name like '曹%' order by math desc;

order by是有数据才能排序,先把数据按照条件筛选出来我才拍; 

筛选分页结果 

起始下标为 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;

 n相当于步长;

 从 0 开始,筛选 n 条结果:

mysql> select * from exam_result limit 5;//下标是0的位置是id=1,连续5个

mysql> select * from exam_result limit 3;//下标是0的位置是id=1,连续3个

从表开始(0)连续n行

 从 s 开始,筛选n条结果:s指的是下标,这里id=1的下标是0

mysql> select * from exam_result limit 1,3;//下标是1的位置是id=2,连续3个


mysql> select * from exam_result limit 2,3;//下标是2的位置是id=3,连续3个

 从 s 开始,筛选 n 条结果:

mysql> select * from exam_result limit 5 offset 0;

相当于mysql> select * from exam_result limit 5;

 建议:对未知表进行查询时,最好加一条 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;

当然也可以结合where:

 mysql> select id,name,math+english+chinese total from exam_result where math+english+chinese>200 order by total  limit 3 offset 0;

limit 就是你把数据准备好,按照条件筛选出再排序给我,我在"显示",limit执行靠后;

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

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

相关文章

嵌入式代码升级——IAP

目录 IAP的特点 实现 IAP 功能 STM32 正常的程序运行流程 STM32 加入IAP后的运行流程 程序执行流程 BootLoader程序 APP1程序 APP2程序 验证操作步骤 IAP&#xff08;In-Application Programming&#xff09;指的是在应用程序运行时对其自身的Flash存储器进行编程的操作…

招投标信息采集系统:让您的企业始终站在行业前沿

一、为何招投标信息如此关键&#xff1f; 在经济全球化的大背景下&#xff0c;招投标活动日益频繁&#xff0c;成为企业获取项目、拓展市场的主流方式之一。招投标信息采集&#xff0c;作为企业战略决策的前置环节&#xff0c;其重要性不言而喻。它不仅关乎企业能否第一时间发…

如何网页在线编辑微软Office Word,并导出为PDF格式。

随着互联网技术的不断发展&#xff0c;越来越多的企业开始采用在线办公模式&#xff0c;微软Office Word 是最好用的文档编辑工具&#xff0c;然而doc、docx、xls、xlsx、ppt、pptx等格式的Office文档是无法直接在浏览器中直接打开的&#xff0c;如果可以实现Web在线预览编辑Of…

git只列出本地分支

git只列出本地分支 git branch --list git强制删除本地分支 git branch -D_error: the branch dlx-test is not fully merged. -CSDN博客文章浏览阅读648次。git branch -d 可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删除特定分支。git删除远程remote分支…

互联网医院系统,开发互联网医院设计哪些功能?

随着科技的进步和数字化转型的推动&#xff0c;互联网医院系统已成为现代医疗服务的重要组成部分。这一系统通过整合信息技术与医疗资源&#xff0c;为用户提供便捷、高效的医疗服务。以下是互联网医院系统的主要功能介绍。 1、在线咨询与诊断 互联网医院系统允许患者通过网络平…

IEC62056标准体系简介-2.IEC62056标准体系及对象标识系统(OBIS)

1. IEC 62056标准体系 IEC 62056标准体系目前共包括六部分&#xff0c;见图1&#xff1a; 第61部分&#xff1a;对象标识系统第62部分&#xff1a;接口类第53部分&#xff1a;COSEM应用层第46部分&#xff1a;使用HDLC&#xff08;High Level Data Link Control&#xff09;协…

54、一维和二维自组织映射(matlab)

1、一维和二维自组织映射原理 一维和二维自组织映射&#xff08;Self-Organizing Maps, SOM&#xff09;是一种无监督的机器学习算法&#xff0c;通过学习输入数据的拓扑结构&#xff0c;将高维输入数据映射到低维的网格结构中&#xff0c;使得相似的输入数据点在映射空间中也…

阿尔泰科技与西安交通大学陕西省某技术重点实验室共谋未来!

近日&#xff0c;阿尔泰科技的电子工程师&#xff08;熊工&#xff09;应邀前往西安交通大学陕西省某技术重点实验室&#xff0c;参与课题组项目的测试与调试工作。此次合作不仅成功推动了项目的进展&#xff0c;还为未来的深入合作奠定了坚实基础。 阿尔泰科技作为领先的测控技…

刷题之删除有序数组中的重复项(leetcode)

删除有序数组中的重复项 这题简单题&#xff0c;双指针&#xff0c;一个指针记录未重复的数的个数&#xff0c;另一个记录遍历的位置。 以下是简单模拟&#xff0c;可以优化&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int l0…

Debezium报错处理系列之第114篇:No TableMapEventData has been found for table id:256.

Debezium报错处理系列之第114篇:Caused by: com.github.shyiko.mysql.binlog.event.deserialization.MissingTableMapEventException: No TableMapEventData has been found for table id:256. Usually that means that you have started reading binary log within the logic…

博美犬插画:成都亚恒丰创教育科技有限公司

​博美犬插画&#xff1a;萌动心灵的细腻笔触 在浩瀚的艺术海洋中&#xff0c;有一种艺术形式总能以它独有的温柔与细腻&#xff0c;触动人心最柔软的部分——那便是插画。而当插画遇上博美犬这一萌宠界的明星&#xff0c;便诞生了一幅幅令人爱不释手的作品&#xff0c;成都亚…

代码随想录打卡第十八天

代码随想录–二叉树部分 day 17 休息日 day 18 二叉树第五天 文章目录 代码随想录--二叉树部分一、力扣654--最大二叉树二、力扣617--合并二叉树三、力扣700--二乘树中的搜素四、力扣98--验证二叉搜索树 一、力扣654–最大二叉树 代码随想录题目链接&#xff1a;代码随想录 给…

美容师有什么话术技巧?美业人如何提升自己的销售技巧?博弈美业门店管理系统分享经验

作为一名美容师&#xff0c;有一些话术和销售技巧可以帮助你提升服务质量和销售业绩。以下是博弈美业收银系统分享的一些建议&#xff1a; 1.建立信任&#xff1a; 在与客户交流时&#xff0c;表现出真诚、友好和专业的态度。倾听客户的需求&#xff0c;并给予针对性的建议&a…

随笔(一)

1.即时通信软件原理&#xff08;发展&#xff09; 即时通信软件实现原理_即时通讯原理-CSDN博客 笔记&#xff1a; 2.泛洪算法&#xff1a; 算法介绍 | 泛洪算法&#xff08;Flood fill Algorithm&#xff09;-CSDN博客 漫水填充算法实现最常见有四邻域像素填充法&#xf…

Redis代替Session实现共享

集群的session共享问题 session共享问题&#xff1a;多台tomcat并不共享session存储空间&#xff0c;当请求切换到不同的tomcat服务时导致数据丢失的问题。 session的替代方案&#xff1a; 数据共享内存存储key、value结构 将redis替换session可以解决session共享问题

Day65 代码随想录打卡|回溯算法篇---组合总和II

题目&#xff08;leecode T40&#xff09;&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含…

第十八节 LLaVA如何按需构建LORA训练(视觉、语言、映射多个组合训练)

文章目录 前言一、基于llava源码构建新的参数1、添加lora_vit参数2、训练命令脚本设置二、修改源码,构建lora训练1、修改源码-lora训练2、LLM模型lora加载3、VIT模型加载4、权重冻结操作5、结果显示三、实验结果前言 如果看了我前面文章,想必你基本对整个代码有了更深认识。…

DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案

一.系统环境 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解决方案架构图:CI/CD解决方案架构图描述:程序员写好代码之…

学习数据库2

在数据库中创建一个表student&#xff0c;用于存储学生信息 查看建表结果 向student表中添加一条新记录 记录中id字段的值为1&#xff0c;name字段的值为"monkey"&#xff0c;grade字段的值为98.5 并查看结果 向student表中添加多条新记录 2,"bob"…

算法之工程化内容(2)—— Git常用命令

目录 1. git初始化配置 2. 新建仓库 3. 工作区——>暂存区——>本地仓库 4. git reset回退版本 5. 查看差异 git diff 6. 删除文件git rm 7. .gitignore 8. vscode操作git 9. git分支、合并和删除 10. 解决合并冲突 11. 回退和rebase 12. 添加远程仓库 参考链接&#xff…