数据库基本查询(表的增删查改)

一、增加

1、添加信息  insert 

语法

insert into table_name (列名) values (列数据1,列数据2,列数据3...)

若插入时主键或唯一键冲突就无法插入。

但如果我们就是要修改一列信息也可以用insert

insert into table_name (列名) values (列数据1,列数据2,列数据3...) on duplicate key update colum=value...

举例

2、替换  replace

语法

replace into table_name (列名) values (列数据1,列数据2,列数据3...)

不论是否冲突直接替换,所以上面提到的insert插入操作可以用replace

举例

二、查询  

1、查询表信息  select

语法

(1)select * from table_name;                 

查看表中全部列信息

(2)select 列名 from table_name;          

查看表中指定列信息(列名之后用as或空格可以让打印出来的列名修改)

上图中 id, name, math 表示想要查询多列信息用逗号隔开。

(3)select 表达式 from table_name;            

上图中chinese+math+english就是表达式,select自动帮我们计算好了。

 (4)select distinct 列名 from table_name;     

查看去重之后列中数据

2、where子句

在上面的select用法中我们只是查看一列列完整的信息,但是除了对列筛选,还要对列中的信息进行筛选,所以就要用到where子句。

运算符介绍

运算符说明
> < >= <=大于 小于 大于等于 小于等于
=   比较相等,但是无法比较null
<=>

比较相等,可以比较null

!=     <>   比较不相等,前者不能比较null后者能
between a0 and a1范围匹配数据从a0到a1
in (option1,2...)匹配圆括号中任意一个数据
is null是否为null(推荐使用)
is not null是否不是null
like 

模糊匹配,%表示匹配任意多

_符号个数表示匹配多少字符

and逻辑与
or逻辑或
not逻辑取反

上述符号使用时支持()圆括号优先级修改。

举例

上文我们提到列名后面跟空格可以修改打印的列名,但是为什么这里会报错呢?

这语句可以分成三部分:select,from,where,分别代表三个阶段:显示数据,选择表,筛选数据。

所以按顺序应该是from where select ,所以上图中在最后一个阶段定义的“总分”是不能出现在筛选数据阶段的。

3、结果排序

语法

asc 升序  

desc 降序

默认asc

select .... from table_name order by 列名 asc/desc

没有order by返回表中顺序

null比任何值小

举例

上图中为什么可以重命名呢?

因为分成三个阶段:select,from,order by,分别代表:显示 选择表 排序

顺序应该是先选择表,显示数据,最后排序,所以在排序之前定义的名称就可以用。

4、筛选分页结果

语法

(1)select ... from table_name limit n;

从表中开始取n行显示。

(2)select ... from table_name limit n,m;

从表中第n+1行(因为表行从0开始)开始取m行显示。

(3)select ... from table_name limit n offset m;

从表中m+1行开始显示n行。

limit不是条件筛选,本质是显示。

举例

三、更新

语法

update table_name set column = 表达式.... 查询语句[where][order by][limit];

对查询结果进行列值更新,一般加上where子句查询,不然就修改一列。

举例

表达式不支持 += *= ....

四、删除

语法

用查询语句就能准确找到要删除值

delete from table_name 查询语句[where][order by][limit];

删除整表 

dalete from table_name;

举例

五、插入查询结果

语法

insert into table_name [column...] select....;

举例

删除一张表中的重复数据

1、先复制原表结构   create table table_name like table_name;

2、用插入查询结果进行不重复数据的插入

insert into no_duplicate_table select distinct * from duplicate_table;

3、最后把目标表重命名

rename table duplicate_table to old_table, no_duplicate_table to duplicate_table;

思考:为什么最后要重命名,不能一开始就把文件要的数据直接写入?

在Linux上面,一般上传文件都不是原子的,就导致速度慢。但是放入临时文件里面进行操作,最后重命名就是原子的,速度快。

六、聚合函数

函数说明
count ([distinct] 表达式)查询到的数据个数
sum ([distinct] 表达式)查询到的数据总和
avg ([distinct] 表达式)查询到的数据平均数
max ([distinct] 表达式)查询到的数据最大值
min ([distinct] 表达式)查询到的数据最小值

要保证数据是可聚合的,不是数字是无意义的。

举例

七、分组查询   group by子句

分组的目的就是为了分组之后方便聚合统计。

语法

select column1,column2,column3... from table_name group by column;

语法理解

1、从table_name中进行分组查询,指定column列名,根据列名中不同的行数据进行分组,相同的行数据就会聚合统计。

2、分组就像一张表在按条件逻辑上进行拆分成多张子表,分别对多张子表进行聚合统计。

举例

现在我们有一个数据库里面存放三张表,分别是emp(员工表),dept(部门表),salgrade(薪资表)

1、显示每个部门平均、最高工资

2、显示每个部门每个职业平均、最低工资

但是我们发现上图想显示一下员工名字就报错了,这是为什么呢?

因为名字是不相同的没有办法分组聚合,而且大原则是只有在group by 之后的列名才能在select之后显示,当然聚合函数也是在select后面显示。

至于想加上名字就不应该用聚合函数来实现,应该用where子句等方式筛选。

3、显示平均工资低于2000的部门和他的平均工资

我们发现这个问题有对聚合出来的数据进行筛选,所以我们使用having子句来实现。

4、hanving子句和where子句的区别与理解

顺序如下图

所以where子句是对任意列进行条件筛选,但是having子句专门对聚合数据进行条件筛选,虽然两者都有条件筛选,但是非常不建议混用。

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

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

相关文章

客户端通过服务器进行TCP通信(三)

一. 对TCP的基础讲解 服务端 1. 首先创建一个套接字&#xff0c;TCP是面向字节流的套接字&#xff0c;故需要使用SOCK_STREAM 2. 然后使用bind()函数将套接字与服务器地址关联(如果是在本地测试&#xff0c;直接将地址设置为217.0.0.1或者localhost&#xff0c;端口号为1000…

内存函数(C语言)

内存函数 以下函数的头文件&#xff1a;string.h 针对内存块进行处理的函数 memcpy 函数原型&#xff1a; void* memcpy(void* destination, const void* source, size_t num);目标空间地址 源空间地址num&#xff0c;被拷贝的字节个数 返回目标空间的起始地…

Python与自动化脚本编写

Python与自动化脚本编写 Python因其简洁的语法和强大的库支持&#xff0c;成为了自动化脚本编写的首选语言之一。在这篇文章中&#xff0c;我们将探索如何使用Python来编写自动化脚本&#xff0c;以简化日常任务。 一、Python自动化脚本的基础 1. Python在自动化中的优势 Pyth…

在 YAML 中的变量(使用 和 * 定义及引用变量)

在 YAML 文件中,使用 & 和 * 是一种常见的定义和引用变量的方式。也是最简单的方式 使用 & 定义变量 在 YAML 中,& 符号用于定义一个锚点(anchor),也就是一个命名的变量。这个变量可以在文件的其他地方被引用和复用。 例如: title: &sc test在这个例子中,t…

1.31、基于长短记忆网络(LSTM)的发动机剩余寿命预测(matlab)

1、基于长短记忆网络(LSTM)的发动机剩余寿命预测的原理及流程 基于长短期记忆网络(LSTM)的发动机剩余寿命预测是一种常见的机器学习应用&#xff0c;用于分析和预测发动机或其他设备的剩余可用寿命。下面是LSTM用于发动机剩余寿命预测的原理和流程&#xff1a; 数据收集&#…

【Linux】 GCC/G++与Makefile使用

Linux GCC/G使用 GCC如何完成 格式&#xff1a;gcc [选项] 要编译的文件 [选项] [目标文件] 常用选项&#xff1a; -E&#xff1a;让gcc在预处理结束后停止编译过程&#xff0c;输出.i的C语言原始文件。-S&#xff1a;该选项只是进行编译而不是进行汇编&#xff0c;最终生成汇…

(leetcode学习)16. 最接近的三数之和

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1&#xff1a; 输入&#xff1a;nums [-1,2,1,-4], target 1 输出&#xff1a;2 解…

力扣144题:二叉树的先序遍历

给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输出&am…

C++入门学习——初始化列表

概念 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个"成员变量"后面跟一个放在括 号中的初始值或表达式 class Date { public://初始化列表Date(int year,int month,int day):_year(year),_month(month),_d…

[Windows] 油.管视频下载神器 Gihosoft TubeGet Pro v9.3.88

描述 对于经常在互联网上进行操作的学生&#xff0c;白领等&#xff01; 一款好用的软件总是能得心应手&#xff0c;事半功倍。 今天给大家带了一款高科技软件 管视频下载神器 无需额外付费&#xff0c;永久免费&#xff01; 亲测可运行&#xff01;&#xff01; 内容 目前主…

高德地图显示圆形区域并在区域边上标注半径

bug&#xff1a;循环创建三个圆形区域 &#xff0c;数组设置为[{raduis:500,color:“#FF0000”}]&#xff0c;然后循环取颜色会莫名其妙报错修改为 strokeColor: [“#FF0000”, “#1EE3C2”, “#3772E9”][i]即可 initAMap() {AMapLoader.load({key: "130cca3be68a2ff0fd5…

Eureka服务发现深度配置:实例ID与租约续期策略

Eureka服务发现深度配置&#xff1a;实例ID与租约续期策略 在微服务架构中&#xff0c;服务注册与发现是保证服务间相互发现和通信的基础。Netflix Eureka作为广泛使用的服务注册中心&#xff0c;提供了丰富的配置选项来满足不同场景下的需求。其中&#xff0c;服务实例ID和租…

Apache访问机制配置

Apache访问机制配置 Apache HTTP Server&#xff08;简称Apache&#xff09;是世界上使用最广泛的Web服务器之一。它的配置文件通常位于/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf&#xff0c;根据操作系统的不同而有所不同。以下是配置Apache访问机制的详细说明…

记VMware网络适配器里的自定义特定虚拟网络一直加载问题解决办法

1、问题描述 VMware网络适配器里的自定义特定虚拟网络一直加载问题&#xff1a; 在自定义&#xff1a;特定虚拟网络选择的时候 没有上图所示的三个选择&#xff0c;而是正在加载虚拟网络.... 如下图所示&#xff1a; 2、解决办法 2.1、原因分析&#xff1a; 是安装时候出现…

2024年睿抗题解(1-3)以及赛后总结

目录 总结&#xff1a; 题1&#xff1a;RC-u1 热҈热҈热҈ 分数 10 题目&#xff1a; 解题思路&#xff1a; 完整代码&#xff1a; 题2&#xff1a;RC-u2 谁进线下了&#xff1f; 分数 15 题目&#xff1a; 解题思路&#xff1a; 完整代码&#xff1a; 题3&…

安防视频监控/视频汇聚EasyCVR平台浏览器http可以播放,https不能播放,如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构&#xff0c;兼容性强、支持多协议接入&#xff0c;包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

如何防御sql注入攻击

当网站使用不安全的SQL查询方式时&#xff0c;黑客可以通过注入恶意SQL语句来获取网站的敏感信息或者控制网站的数据库。为了防止SQL注入攻击&#xff0c;以下是一些防御措施&#xff1a; 使用参数化查询 参数化查询是一种可以防止SQL注入攻击的有效方法。通过使用参数化查询…

7.15洛谷蓝题

二分答案的两个模板&#xff1a; 1.最小值的最大化&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<bits/stdc.h> #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<queue> #include<…

Linux笔记之time命令测量命令的执行时间

Linux笔记之time命令测量命令的执行时间 在Linux中&#xff0c;time命令用于测量命令的执行时间。这对于分析和优化脚本或程序的性能非常有用。time命令会显示三个主要时间指标&#xff1a; real: 从命令开始到结束的实际时间&#xff08;也称为挂钟时间&#xff09;。user: …

Studying-代码随想录训练营day40| 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

第40天&#xff0c;动态规划part07&#xff0c;动态规划经典题型“打家劫舍”(ง •_•)ง&#xff0c;编程语言&#xff1a;C 目录 198.打家劫舍 213.打家劫舍II 337.打家劫舍III 总结 198.打家劫舍 文档讲解&#xff1a;代码随想录打家劫舍 视频讲解&#xff1a;手…