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.rhkb.cn/news/453619.html

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

相关文章

git rebase的常用场景: 交互式变基, 变基和本地分支基于远端分支的变基

文章目录 作用应用场景场景一&#xff1a;交互式变基(合并同一条线上的提交记录) —— git rebase -i HEAD~2场景二&#xff1a;变基(合并分支) —— git rebase [其他分支名称]场景三&#xff1a;本地分支与远端分支的变基 作用 使git的提交记录变得更加简洁 应用场景 场景…

Unity之如何使用Unity Cloud Build云构建

文章目录 前言什么是 UnityCloudBuild?如何使用Unity云构建Unity 团队中的人员不属于 Unity Team 的人员UnityCloudBuild2.0价格表如何使用Unity云构建配置CloudBuild前言 Unity Cloud Build作为Unity平台的一项强大工具,它允许开发团队通过云端自动构建项目,节省了繁琐的手…

基于Springboot在线视频网站的设计与实现

基于Springboot视频网站的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https://do…

JSON 注入攻击 API

文章目录 JSON 注入攻击 API"注入所有东西"是"聪明的"发生了什么? 什么是 JSON 注入?为什么解析器是问题所在解析不一致 JSON 解析器互操作性中的安全问题处理重复密钥的方式不一致按键碰撞响应不一致JSON 序列化(反序列化)中的不一致 好的。JSON 解析器…

Java | Leetcode Java题解之第497题非重叠矩形中的随机点

题目&#xff1a; 题解&#xff1a; class Solution {Random rand;List<Integer> arr;int[][] rects;public Solution(int[][] rects) {rand new Random();arr new ArrayList<Integer>();arr.add(0);this.rects rects;for (int[] rect : rects) {int a rect[0…

PPT自动化:Python如何将PPT转换为图片(ppt2img源码)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PPT转换图片 📒📝 Windows环境下PPT转为图片(源码)📝 Linux环境下PPT转为图片(源码)📝 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 在日常工作中,我们常常需要将大量的幻灯片转换为图片,这样不仅方便分享,还能提…

【数据库系统概论】第3章 关系数据库标准语言SQL(一)数据定义(超详细)

教材&#xff1a; 数据库系统概论&#xff08;第6版&#xff09;王珊,杜小勇,陈红编著 目录 一、SQL概述 1.1 SQL 的产生与发展 1.2 SQL的特点 1.3 SQL的基本概念 二、数据定义 2.1 数据库的定义 2.2 数据表的定义 2.3 模式的定义 一、SQL概述 1974年IBM为关系DBMS设…

Docker 搭建mysql

拉取mysql镜像 docker pull mysql # 拉取镜像 [rooteason ~]# docker pull mysql Using default tag: latest latest: Pulling from library/mysql 72a69066d2fe: Pull complete 93619dbc5b36: Pull complete 99da31dd6142: Pull complete 626033c43d70: Pull complete 37d…

用HTML构建酷炫的文件上传下载界面

1. 基础HTML结构 首先&#xff0c;我们构建一个基本的HTML结构&#xff0c;包括一个表单用于文件上传&#xff0c;以及一个列表用于展示已上传文件&#xff1a; HTML <!DOCTYPE html> <html> <head><title>酷炫文件上传下载</title><link …

分布式ID生成策略

文章目录 分布式ID必要性1.UUID2.基于DB的自增主键方案3.数据库多主模式4.号段模式5.Redis6.Zookeeper7.ETCD8.雪花算法9.百度(Uidgenerator)10.美团(Leaf)11.滴滴(TinyID) 分布式ID必要性 业务量小于500W的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分…

浏览器播放rtsp视频流解决方案

方案一: html5 websocket_rtsp_proxy 实现视频流直播 实现原理 实现步骤 服务器安装streamedian服务器 客户端通过video标签播放 <video id"test_video" controls autoplay></video><script src"free.player.1.8.4.js"></script&g…

openresty通过header_filter_by_lua记录特定的请求头和特定的响应头到日志文件

有时我们希望记录特定的请求头信息和特定的响应头信息,以便能够通过关联请求信息和响应头信息,来实现记录请求和响应的对应关系。这里通过逐步尝试和优化的方式进行尝试。具体包括将需要的请求头和响应头组织到一条日志记录,输出到单独的错误日志文件记录等的配置尝试。 1.…

HAL+M4学习记录_8

一、TIM的HAL库用法 这里记录学习HAL库开发TIM 1.1 定时中断基本结构 这里给出定时中断的基本结构 基本步骤如下 开启时钟选择时基单元时钟源配置时基单元配置输出中断控制&#xff0c;允许更新中断输出到NVIC配置NVIC&#xff0c;打开定时器中断通道运行控制编写中断服务函…

为什么九齐单片机中不能使用bit?

如果开发环境不支持bit 定义static unsigned char task_720ms_flag 0;还可以用什么方式替代bit定义标志&#xff0c;使其占用内存空间小。 如果开发环境不支持位定义&#xff0c;可以使用 unsigned char 的多个状态位来替代。可以将多个标志合并到一个 unsigned char 中&…

Vue - Element 选择器 el-select 既可以选择下拉又可以手动输入文本功能(手动输入的值只能是数字 并且支持4位小数)

Vue - Element 选择器 el-select 既可以选择下拉又可以手动输入文本功能&#xff08;手动输入的值只能是数字 并且支持4位小数&#xff09; 备注 filterable 下拉框开启快速搜索功能 no-match-text 当输入的内容在下拉框中找不到时&#xff1b;下拉框提示的文字 handFocus 触发…

软件测试快速入门:测试对象、过程模型、生命周期与测试用例

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

redis集群介绍

Redis集群是一种分布式存储系统&#xff0c;它通过将数据分散存储在多个Redis节点上来实现可扩展性和高可用性。每个节点都是一个独立的Redis服务器实例&#xff0c;它们通过网络相互连接&#xff0c;共同协作以提供数据服务。 在Redis集群中&#xff0c;数据被划分为多个槽&am…

【Vercel】Vercel静态部署踩坑

背景 在现代的软件开发中&#xff0c;自动化部署是一个不可或缺的环节。Vercel作为一个流行的前端部署平台&#xff0c;提供了与GitHub的无缝集成&#xff0c;使得开发者能够在每次提交代码后自动触发部署流程。然而&#xff0c;自动化部署过程中可能会遇到一些挑战&#xff0…

自动化工具:Ansible

目录 一、运维自动化工具有哪些 二、Ansible 概述 1、Ansible 概念 2、Ansible 特点 3、Ansible 工作流程 三、安装部署Ansible 1、环境部署 2、管理节点安装 Ansible 3、查看Ansible相关文件 4、配置主机清单 5、免密管理 ssh-keygen 5.1、测试连通性 5.2、简洁输…

IPC通信-消息队列

使用消息队列实现两个进程的相互通信 #include<myhead.h>//定义结构体存储信息种类和信息正文 typedef struct {long mtype; //信息类型char mtext[128]; //信息正文 }msgbuf;//宏定义信息正文的大小 #define MESIZE sizeof(msgbuf)-sizeof(long)typedef struct sockad…