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 emp
 where ename != 'xxx' 
group by deptno, job 
having myavg < 2000;

14、实战链接


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android系統Audio hal

一.Android系統Audio hal简介 Android系统的音频硬件抽象层(HAL)是系统与硬件之间的桥梁,允许音频应用和服务访问底层音频硬件,而无需直接与硬件交互。 主要组件: 音频 HAL 接口:定义了应用和服务如何调用音频硬件的规范。典型的音频操作包括播放、录制、音量控制等。 …

day5:权限管理

一&#xff0c;权限概述 什么是权限 合适的人干合适的事情 权限的作用 根据用户的等级&#xff0c;分配对应的权利&#xff0c;完成不同用户对不同资源的相关操作。 权限的分类 r&#xff08;4&#xff09;读w&#xff08;2&#xff09;写x&#xff08;1&#xff09;执行 …

深入理解Agent:从0实现function call

Function的调用时Agent实现很重要的一步&#xff0c;只有 理解了function call这个原理才可以更好的创建Agent。 我将不使用任何langchain等框架或者coze等平台&#xff0c;从0开始构建一个可以调用function的Agent。 源代码已经上传github&#xff1a;https://github.com/as…

美摄科技云服务解决方案,方案成熟,接入简单

美摄科技作为视频处理领域的先锋&#xff0c;凭借其强大的技术实力和深厚的行业经验&#xff0c;推出了成熟的云服务解决方案&#xff0c;为轻量化视频制作开辟了全新的道路。 一、成熟方案&#xff0c;接入无忧 美摄科技云服务解决方案的最大亮点在于其成熟度和易用性。我们…

(六) 进程控制

(六) 进程控制 ps(1) 命令可以帮助我们分析本章中的一些示例&#xff0c;所以简单介绍一些参数的组合方式&#xff0c;更详细的信息请查阅 man 手册。 ps axf 主要用于查看当前系统中进程的 PID 以及执行终端(tty)和状态等信息&#xff0c;更重要的是它能显示出进程的父子关系…

WSL2 构建Ubuntu系统-轻量级AI运行环境

环境&#xff1a;Win11 软件&#xff1a;WSL2 安装环境&#xff1a;Ubuntu 22.04 检查电脑是否开启虚拟化 打开&#xff1a;任务管理器->性能->CPU CPU 开启虚拟化&#xff08;通常默认是开启的&#xff0c;如果没有开启需要BIOS开启&#xff09; 虚拟化设置&#xff0…

uni-app 扫码插件推荐:基于支付宝 mPaaS 扫码组件开发,支持 Android 和 iOS

一. 前言 之前说到&#xff0c;我的一个 uni-app 项目遭到用户吐槽&#xff1a;“你们这个 App 扫码的正确率太低了&#xff0c;尤其是安卓的设备。经常性的扫码扫不出来&#xff0c;就算是扫出来了&#xff0c;也是错误的结果&#xff01;” 面对以上这个问题&#xff0c;我…

Vert.x,认证与授权 - HTTP基本认证

几乎所有的线上系统都离不开认证和授权&#xff0c;Vert.x auth相关组件提供了丰富(Session&#xff0c;JTW, OAuth&#xff0c;…)&#xff0c;便捷的认证和授权支持。 当前&#xff0c;使用最多是Web应用&#xff0c;所以在后续讨论中&#xff0c;都是关于Vert.x auth在Web应…

【大数据分析与挖掘模型】matlab实现——非线性回归预测模型

一、实验目的 掌握有关非线性回归的理论知识&#xff0c;通过变量代换把本来应该用非线性回归处理的问题近似转化为线性回归问题&#xff0c;并进行分析预测。 二、实验任务 对非线性回归实例进行编码计算&#xff0c;实例如下&#xff1a; 三、实验过程 1.运行非线性回归中…

【TFR-Net】基于transformer重建网络

abstract&#xff1a; 提高对数据缺失的鲁棒性已经成为多模态情感分析&#xff08;MSA&#xff09;的核心挑战之一&#xff0c;MSA旨在从语言、视觉和声学信号中判断说话者的情感。在目前的研究中&#xff0c;针对不完全模态特征的MSA&#xff0c;提出了基于平移的方法和张量正…

Unity-Editor扩展,引擎管理AudioClip,音乐音效快捷播放功能

目录 选择一个Audio 音频文件即会 关键在于三个快捷模式 播放&#xff0c; 自动播放 循环播放 根本不需要Editor扩展开发 没找到虚幻引擎的audio 的管理是怎么样的 参考&#xff1a; 本来&#xff0c;觉得没有快捷方式&#xff0c;播放很不爽 想自定义搞一个&#xff…

全面了解 NGINX 的负载均衡算法

NGINX 提供多种负载均衡方法&#xff0c;以应对不同的流量分发需求。常用的算法包括&#xff1a;最少连接、最短时间、通用哈希、随机算法和 IP 哈希。这些负载均衡算法都通过独立指令来定义&#xff0c;每种算法都有其独特的应用场景。 以下负载均衡方法&#xff08;IP 哈希除…

aws 把vpc残留删除干净

最近忘了把vpc 删干净导致又被收了冤大头钱 在删除vpc 的收发现又eni在使用&#xff0c;但是忘了是哪个资源在占用 先用命令行把占用的资源找出来停掉 使用 AWS 命令行界面&#xff08;CLI&#xff09;来查看 VPC 的使用情况 列出子网&#xff1a; aws ec2 describe-subnets …

【Java】常用方法合集

以 DemoVo 为实体 import lombok.Data; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;Data ExcelIgnoreUnannotated public class ExportPromoteUnitResult {private String id;ExcelProperty(value &qu…

数据结构6——树与二叉树

在本专栏的前五篇中&#xff0c;我们学习了顺序表、链表、栈和队列&#xff0c;他们本质上都是线性表。有线性表就存在非线性表&#xff0c;现在我们就来学习一下结构更复杂的非线性表——树。 1. 树的概念与结构 1.1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&…

Go语言Gin框架的常规配置和查询数据返回json示例

文章目录 路由文件分组查询数据库并返回jsonservice层controller路由运行效果 启动多个服务 在 上一篇文章《使用Go语言的gorm框架查询数据库并分页导出到Excel实例》 中主要给大家分享了较多数据的时候如何使用go分页导出多个Excel文件并合并的实现方案&#xff0c;这一篇文章…

Linux之远程连接服务器

远程连接服务器的类型 文字接口 明文传输&#xff1a;Telnet 23、RSH等&#xff0c;目前非常少用&#xff1b; 加密传输&#xff1a;SSH为主&#xff0c;已经取代明文传输 ssh提供两个服务器功能&#xff1a;1.类似于telnet&#xff1b;2.类似于ftp的sftp-serve…

特斯拉自动驾驶出租车计划变成泡影?联想与Meta合作,推出面向PC的个人AI智能体AI Now|AI日报

文章推荐 Swarms Corporation创始人Kye Gomez实锤OpenAI多智能体Swarm抄袭其成果&#xff01;&#xff5c;AI日报 今日热点 中国海油“海能”人工智能模型正式发布 近日&#xff0c;由中国海油与中国电信、科大讯飞等企业合作打造“海能”人工智能模型正式推出。 中国海油“…

Centos7搭建minio对象存储服务器

Centos7搭建minio对象存储服务器 安装二进制程序配置服务文件 安装二进制程序 参考&#xff1a;https://segmentfault.com/q/1010000042181876 minio中国版&#xff1a;https://www.minio.org.cn/download.shtml#/linux # 下载二进制程序 wget https://dl.min.io/server/min…

鸿蒙--应用首次启动

最终效果 前言 基于自定义弹框、首选项和页面路由实现一个模拟应用首次启动的案例。需要完成以下功能: 实现四个页面,启动页、隐私协议页、广告页和应用首页。实现自定义隐私协议弹窗,点击协议可查看隐私协议具体内容。页面间的路由跳转。相关概念 首选项:首选项为应用提供…