mysql--基本查询

目录

搞定mysql--CURD操作,细节比较多,不难,贵在多多练

1、Create--创建

(1)单行插入 / 全列插入

(2)插入否则替换

(3)替换

2、Retuieve--select

1)全列查询

2)指定列查询

3)重命名列名

4)进行计算

5)去重

3、where条件

4、比较运算符

5、逻辑运算符

and关键字

or关键字

in 关键字

模糊匹配like

列与列比较

6、order by

7、limit关键字

8、Update(更新)

9、Delete(删除)

1)删除清空表

2)截断表

10、插入查询结果

11、聚合函数

(1)count函数

(2)sum函数

 (3)avg函数

(4)max函数

(5)min函数

12、分组聚合函数--group by

13、having关键字

having 和 where的区别?

14、实战链接


表的增删查改:CURD:Create(创建)、Retieve(读取)、Update(更新)、Delete(删除)

1、Create--创建

(1)单行插入 / 全列插入

create table stu(
id int,
name varchar(32),
gender char(2) 
);

单行插入

​​insert into stu (id, name) values (1,'张三');

多行插入

​
insert into stu  (id, nmae, gender) values (2,'李四', '男'),(3,'王五', '女');

values前的括号() 可有可无

没有括号,表示全部插入;有括号,表示插入对应列

(2)插入否则替换

注意:如果主键冲突 / 唯一键冲突则不能插入
插入一条数据:
如果数据原先不存在 ,插入
如果存在,修改更新数据
有三种情况:
原先存在,更新数据和原先数据一样,影响0行
原先存在,更新数据和原先数据不一样,需更新,影响2行
原先不存在,插入数据,影响一行

insert into stu (id, name, gender)
values(1, '李四', '男')
on duplivate key update
name = '蔡坤';
​

在 MySQL 中,当主键或唯一索引冲突时,on duplicate key子句会被触发:如果在插入过程中遇到主键冲突(即 id 列的值为 1 的记录已经存在),则执行后面的更新操作,即将 name 列的值更新为 '蔡坤'。

(3)替换

如果主键 / 唯一键有冲突,删除原来一整行,插入新数据;影响2行
如果主键 / 唯一键不冲突,插入新数据;影响1行

replace into stu(id, name, gender) values (1, '李四', '男');

如果 id = 1 的记录不存在:

replace into  将插入一条新记录:(1, '李四', '男')。


如果 id = 1 的记录已经存在:

原有的记录会被删除,然后插入新的记录:(1, '李四', '男')。
这意味着,如果存在其他字段的值,它们将被丢失,因为整行被删除再插入。

2、Retuieve--select

1)全列查询

select * from stu;

不建议*进行查询,因为传输数据量巨大

2)指定列查询

将指定列所有数据取出
select 属性列名... from table_name;#可带多个列

select id, name from stu;

3)重命名列名

select lod_name1 as new_name1 , lod_name2 as new_name2... from table_name;#as可以省略

​select id as 学号, name as 名字 from stu;

4)进行计算

select 常数表达式 from table_name;

会将计算结果加入到所查询表中
也可以很灵活的使用:(例如所有的成绩之和,高数、线代、概率论的总分)
select 高数+线代+概率论 as 总分 from table_name;

select math + english as 总分 from stu;

5)去重

#对列的所有数据进行去重,可以同时去重多列
select distinct 列名.... from table_name;

示例:

select distinct id distinct name from table_name;

3、where条件

跟在查询后面,作为查询的筛选条件

​select * from students where gender = '男' and age > 18;

where后跟计算表达式:计算总分小于200分的人

​​select id, name, (math + science + english) as total from stu
where total_score < 200;#此语句是错误的!

mysql语句执行顺序:将数据已经拿出来了,再对该数据列重命名

如果在查询的同时,对属性列语文 + 数学 + 英语进行重命名 为总分
然后此时再去where条件查询 总分列 是不对的
因为表中没有总分这个列

改名并没有在实际的表中增加一个总分的列,只是展示的时候进行了格式化

4、比较运算符

注意:null不可比较,null不是0,不可比较
一般判断null,使用is null / is not null

null不参与比较,如果参与比较,结果都是null

null也不参与计算,如果参与计算,结果都是null

运算符符号说明
等于运算符=判断两个值是否相等。
不等于运算符!= 或 <>判断两个值是否不相等。
大于运算符>判断左侧的值是否大于右侧的值。
小于运算符<判断左侧的值是否小于右侧的值。
大于或等于运算符>=判断左侧的值是否大于或等于右侧的值。
小于或等于运算符<=判断左侧的值是否小于或等于右侧的值。
IS NULLIS NULL判断值是否为 NULL。
IS NOT NULLIS NOT NULL判断值是否不为 NULL。

示例:18岁以上的男学生

select * from students where gender = '男' and age > 18;

5、逻辑运算符

运算符符号说明
与运算符AND当且仅当两个条件都为真时,结果为真。
或运算符OR只要至少有一个条件为真,结果就为真。
非运算符NOT取反运算符,条件为真则结果为假,条件为假则结果为真。
逻辑异或运算符XOR当两个条件不同时,结果为真;当两个条件相同时,结果为假。

示例:

and关键字

语文成绩在[80,90]之间的所有学生

​select Chinese from stu where Chinese >=80 and Chinese <=90;

or关键字

数学成绩是59 或者 89的同学

select * from stu where math=59 or math=89;

in 关键字

数学成绩在58 或 78 或 88 或98的同学

​select * from stu where math in (58,78,88,98);

模糊匹配like

%匹配任意多个字符
_匹配一个字符

现在有一个人,你只记得他姓孙,但是具体并不知道是孙什么,于是:

selelct * from people where name like‘孙%’;

现在有一个人,你记得他姓孙,而且,是两个字,于是:

select * from stu where name like “sun_”;

列与列比较

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

select * from stu where math > english;

6、order by

升序、降序表格(null比任何值都小)

同学按照数学成绩升序排序

select math from stu order by math asc;

同学按照数学成绩降序排序

​select math from stu order by math desc;

重命名之后,可以查询
为什么?
因为排序,首先是得有了数据,才可以查询
本质是因为语句的执行顺序的不同
这里的执行顺序是,先执行重命名再排序

7、limit关键字

limit n;#从表开始,连续读n行

limit m,n;#下标从m开始读取,读到n行

limit n offset m;#下标从m开始,读取n行

有什么用?方便查看资料
limit本质是一种显示。

select * from stu limit 5, 10;#从第5个开始,往后查找10个

8、Update(更新)

对查询到的结果进行列值更新
一般来说,要和where条件判断一起用
否则就会将整个列的值更新,这是不符合逻辑的
因此update一定要慎用慎用!

示例:
将孙悟空的语文成绩更新成80分

update stu set chinese=80 where name=‘孙悟空;

将总成绩倒数前三的同学数学成绩+30

update  stu set math=math+30 order by chinese+english+math asc limit 3;
#拿到前三个总分(默认升序)
#对前三个进行数学=30分

9、Delete(删除)

删除是对表的内容处理,表的结构不受影响

delete from stu where name='李四';#删除对应行delete from stu;#删除所有内容

删除孙悟空的考试成绩

delete from students where name = '孙悟空';

1)删除清空表

不会影响自增设定

示例:

delete  from stu;

2)截断表

会直接清空表的内容,
同时自增值会变为0
不走事务,直接清空
也就是不做日志备份

truncate table stu;

10、插入查询结果

查询一个表的结果,并将结果插入到一个新的表当中

int into table_name [列名] select [列名] from table_name` where ...;ser

示例:只插入语文成绩及格的学生

insert into stu(id, name, chinese_score, english_score)
select id, name, chinese_score, english_score
from stu
where chinese_score >= 60; 
#只插入语文成绩及格的学生

重命名表名:

rename table old_table_name to new_table_name;

创建一个表B
表B的结构和表A的结构一样

cereate table table_B like table_A;

11、聚合函数

函数名功能语法示例
count()计算行数或非 null 值的数量count(column_name) 或 count(*)select count(*) from students;
sum()计算某列值的总和sum(column_name)select sum(salary) from employees;
avg()计算某列值的平均值avg(column_name)select avg(score) from tests;
min()返回某列的最小值min(column_name)select min(age) from persons;
max()返回某列的最大值max(column_name)select max(price) from products;
group_concat()将分组中的多个值连接成一个字符串group_concat(column_name separator 'separator')select group_concat(name) from students group by class;
count(distinct)计算不同值的数量count(distinct column_name)select count(distinct department) from employees;

(1)count函数

1)统计一个表有多少行,null不影响

select count(*) from table_name;

2)统计某一个列多少行

select count(某列)  from table_name;

示例:

统计数学成绩,不重复:

select count(distinct math) from stu;

和where组合:查询英语成绩不及格的人数

select count(*) from exam_result where English<60;

(2)sum函数

select sum(某列) from table_name;

示例:查询数学品均分

select sum(math) / count(math) from stu;

清屏:
system clear;

 (3)avg函数

求平均函数
示例:求成绩平均分

select avg(math+english+chinese) as 平均分 from stu;

(4)max函数

求最大函数
示例:求数学最高分

select max(math) from stu;

(5)min函数

 求最小函数
示例:求数学最低分

​select min(math) from stu;

12、分组聚合函数--group by

在 select 中使用 group by 字句可以对指定列进行分组查询

select column1,Column2,... from table_name group by column;

举个例子:

将表从文件系统中导入到数据库系统中:
source 文件路径;
该数据库下有三个1表:
员工、部门、薪资等级

如何显示每个部门的最高工资和平均工资?根据部门分组

select deptno,max(sal) as 最高工资,avg(sal)as 平均 from emp group by deptno;

分组,如何理解?
1、指定列名,就是用单列的不同行的数据进行分组
(例如以性别进行分组,就会被分成男 和 女两组)

(以code进行分组,就会被分成A、B、C、D四组)
2、每一个组内的条件都是一样的
3、分组就是把一张表在逻辑上拆成了多个子表,然后对各自的子表进行聚合统计
很简单,就是把表分开了,成一个一个组,然后一个个组自己统计

示例:

1、显示每一个部门的每种岗位的平均工资和最低工资

select deptno, job ,avg(sal)avg_sal, min(sal)min_sal from group by deptno,job;
#先分组,再聚合

 group by deptno,job;#先按deptno分组,再按job分组
选择的分组列,必须是大家都有共同的属性,或者属性不同,无法进行聚合
一般只有再group by后面具体出现的列,才可以在前面出现,跟在select后面,聚合展示

2、统计每一个部门的平均工资

select avg(sal) as avg_sal, deptno from emp group by deptno;

3、低于2000的部门抽取出来

​select avg(sal) deptno_avg from emp group by deptno having  deptnoavg <2000;


13、having关键字

是对数据聚合后的数据进行条件筛选
类似于where
只是场景用于聚合后的数据

having 和 where的区别?

having可以使用在where的地方
但是where不能使用在having的地方
如何理解?
可以理解为:
整张表可以理解为就是一个组
只是这个组比较大
因此,我们对于having的理解就是:将一个大的表分成多个小的表
但是where是具体的对某一个列做条件筛选

因此:where和having条件筛选的阶段不同 / 时机不同

对表的理解:不要单纯的认为,只有磁盘上表结构导入到mysql的表才叫做表
而是:在mysql中中间筛选出来的表、最终结果,都可以逻辑上视为一个表
于是,在这样“MYSQL一切皆表”统一视角的观点下,
只要我们能够处理好一张表的CURD,
所有的MYSQL场景,我们全部都能用统一的方式进行处理

下面举一个例子:

select deptno, job. avg(sal) avg——sal from empwhere ename != 'xxx' 
group by deptno, job 
having myavg < 2000;

14、实战链接


 

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

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

相关文章

FreeRTOS - 软件定时器

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 1. 软件定时器 软件定时器也可以完成两类事情…

JDK-23与JavaFX的安装

一、JDK-23的安装 1.下载 JDK-23 官网直接下载&#xff0c;页面下如图&#xff1a; 2.安装 JDK-23 2.1、解压下载的文件 找到下载的 ZIP 文件&#xff0c;右键点击并选择“解压到指定文件夹”&#xff0c;将其解压缩到您希望的目录&#xff0c;例如 C:\Program Files\Java\…

多进程思维导图

1> 思维导图 2> 使用父子进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;两个进程同时进行&#xff08;君子作业&#xff09; #include <myhead.h> typedef struct sockaddr_in addr_in_t; typedef struct sockaddr…

毕业设计选题:基于django+vue的个人博客系统设计与开发

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 博主管理 博客文章管理 博文排行管理 博文打赏管理 博文…

Spring 的依赖注入的最常见方式

在 Spring 中&#xff0c;依赖注入的方式有多种选择。下面我们来逐一分析它们的特点、适用场景和注意事项&#xff1a; 1. 构造函数注入 构造函数注入要求在对象创建时提供所有依赖。这种方式确保依赖在对象创建后不可变&#xff0c;特别适合必须强制存在的依赖。所有依赖在对…

JavaWeb 22.Node.js_简介和安装

有时候&#xff0c;后退原来是向前 —— 24.10.7 一、什么是Node.js Node.js 是一个于 Chrome V8 的 JavaScript 运行时环境&#xff0c;可以使 JavaScript 运行在服务器端。使用 Node.js&#xff0c;可以方便地开发服务器端应用程序&#xff0c;如 Web 应用、API、后端服务&a…

Python 工具库每日推荐 【FastAPI】

文章目录 引言Web 框架的重要性今日推荐:FastAPI Web 框架主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:构建一个简单的博客 API案例分析高级特性依赖注入系统后台任务扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计模式…

Transformer图解以及相关的概念

前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架&#xff0c;同时大部分LLM也是使用其进行训练生成模型&#xff0c;所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面…

asp.net Core 自定义中间件

内联中间件 中间件转移到类中 推荐中间件通过IApplicationBuilder 公开中间件 使用扩展方法 调用中间件 含有依赖项的 》》》中间件 参考资料

中企通信赋能中信戴卡入选工信部颁发的2023年工业互联网试点示范名单

2024年10月17日&#xff0c;北京-随着工业互联网的迅猛发展&#xff0c;网络安全已成为国家关注的重点议题之一。日前&#xff0c;工业和信息化部&#xff08;工信部&#xff09;公布了2023年工业互联网试点示范名单&#xff0c;中企网络通信技术有限公司&#xff08;简称“中企…

读数据工程之道:设计和构建健壮的数据系统12开源软件

1. 开源软件 1.1. 开源软件(Open Source Software&#xff0c;OSS)是一种软件发行模式&#xff0c;在这种模式下&#xff0c;软件和底层代码库通常在特定的许可条款下可供普遍开发者使用 1.2. 社区管理的开源软件 1.2.1. 大部分开源软件项目…

【Qt】信号和槽——信号和槽的概念、信号和槽的使用、信号和槽的优缺点、自定义信号和槽、信号和槽的断开

文章目录 Qt1. 信号和槽的概念2. 信号和槽的使用3. 信号和槽的优缺点4. 自定义信号和槽5. 信号和槽的断开 Qt 1. 信号和槽的概念 信号是什么&#xff1a; 在Linux中&#xff0c;我们知道信号是一种异步的事件通知机制&#xff0c;用于通知进程某个事件已经发生。它是进程间通信…

MOE论文详解(4)-GLaM

2022年google在GShard之后发表另一篇跟MoE相关的paper, 论文名为GLaM (Generalist Language Model), 最大的GLaM模型有1.2 trillion参数, 比GPT-3大7倍, 但成本只有GPT-3的1/3, 同时效果也超过GPT-3. 以下是两者的对比: 跟之前模型对比如下, 跟GShard和Switch-C相比, GLaM是第一…

opcode从零开始

opcode从零开始 参考资料: Intel 64 and IA-32 ArchitecturesSoftware Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4() Intel64和IA-32架构软件开发人员手册组合卷&#xff1a;1,2a, 2B, 2C, 2D, 3A, 3B, 3C, 3D&#xff0c;和4 罗聪–c…

wordart.top - 轻松创建令人惊叹的文字云!

轻松创建令人惊叹的文字云/词云图&#xff01;适合营销人员、教育工作者、数据爱好者、创意人员、商务人士、活动策划者和社交媒体专家等多种用户群体。支持海量模版库、自定义模板、文本快速提取、精准关键字调整、词云Gif动图制作、词云视频制作、图片一键分享及数据轻松导入…

网盘如何拉新方法教程

网盘拉新是指通过各种推广方式吸引新用户注册和使用网盘服务的过程。以下是对网盘拉新的详细解释&#xff1a; 一、网盘拉新的背景与意义 背景&#xff1a;随着互联网的发展&#xff0c;网盘作为一种基于云计算技术的存储服务&#xff0c;因其便捷性和高效性而备受欢迎。为了…

Linux debian 系桌面系统安装软件方式介绍

debian 系软件的安装方式多种多样&#xff0c;但对于不想花太多时间配置各种环境和依赖的用户来说&#xff0c;建议直接使用“新立得包管理器”安装&#xff0c;既方便又直观。 本文将以常用软件为例&#xff0c;介绍常用的几种软件安装方式。 1. 使用新立得包管理器安装&…

数据字典是什么?和数据库、数据仓库有什么关系?

一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合&#xff0c;它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下&#xff1a; 1. 对于数据开发者来说&#xff0c;数据字典包含了关于数据结构和内容的清晰…

15分钟学Go 第4天:Go的基本语法

第4天&#xff1a;基本语法 在这一部分&#xff0c;将讨论Go语言的基本语法&#xff0c;了解其程序结构和基础语句。这将为我们后续的学习打下坚实的基础。 1. Go语言程序结构 Go语言程序的结构相对简单&#xff0c;主要包括&#xff1a; 包声明导入语句函数语句 1.1 包声…

react+video:限制快进、倍速、画中画

实现代码&#xff1a; <video ref{videoRef} src{videoUrl} className{style.video} controls onRateChange{rateChange} onPlay{playVideo} onPause{pauseVideo} onTimeUpdate{timeUpdate} disablePictureInPicture playsInline poster{poster} controlsList"nodownl…