MySQL数据库——DQL操作——基本查询
文章目录
- 前言
- 事前准备——测试数据
- 整表查询
- 指定列查找
- 别名查询
- MySQL运算符
- 条件查询
- 模糊查询
- 排序查询
- 聚合查询
- 分组查询
- 分组之后的条件筛选
- 分页查询
- 将整张表的数据插入到另一张表中
前言
MySQL数据库常见的操作是增删查改,而其中数据的查询是使用最多,也是最重要的操作,但是简单的查询操作是不够的,我们还需要对数据进行特定的出来再显示才能真正达到我们的目的。那么今天我将为大家分享MySQL的DQL操作——基本查询。
事前准备——测试数据
在分享之前,我们需要先在数据库中插入一些测试数据。
create table student(class_id int,id int,name varchar(20),gender varchar(10),chinese decimal(3,1),math decimal(3,1),english decimal(3,1));insert into student values(2301,1,'张三','男',87.5,93,94),(2302,2,'李四','女',88,95,92),(2302,3,'王五','男',86,96,96),(2302,4,'赵六','男',90,90,89.5),(2303,5,'李华','男',96,94,78),(2303,6,'小明','男',93.5,93,97),(2304,7,'小美','女',85,90,98),(2304,8,'小帅','男',88,91.5,93),(2305,9,'小芳','女',89,90,94),(2206,10,'大壮','男',89,96.5,97);
整表查询
在MySQL中,查询依赖于 select
关键字。而整表查询则是 select * from 表名;
,
*
表示所有,在这里表示所有列。
select * from student;
指定列查找
平时我们可能不需要表中的全部数据,那么我们就可以指定列,来展示我们想要的数据,MySQL中使用 select 列名1,列名2 from 表名;
来查询指定列。
select class_id,name from student;
别名查询
在查询的过程过,我们可以更改显示的表名或者列名,但更改的只是临时表的表名或者列名,实际上并没有更改。
别名查询依赖 as
关键字。表别名:select * / 列名 from 表名 as 表别名;
,
列别名:select 列名1 as 列别名,列名2 from 表名;
(as 可以省略)
select class_id as c_id,name from student;
MySQL运算符
我们可以通过使用MySQL运算符来操作数据。
算术运算符
算术运算符 | 说明 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ 或 DIV | 除法运算,返回商 |
% 或 MOD | 求余运算,返回余数 |
比较运算符
比较运算符 | 说明 |
---|---|
= | 等于,注意:这里等于就是等于,没有 == 表示等于的说法 |
< 和 <= | 小于和小于等于 |
> 和 >= | 大于和大于等于 |
<=> | 安全的等于,两个操作码均为NULL是,其所得值为1;而当一个操作码为NULL时,所得值值为0 |
<> 或 != | 不等于 |
IS NULL 或 ISNULL | 判断一个值是否为 NULL |
IS NOT NULL | 判断一个值是否不为 NULL |
LEAST | 当有两个或多个参数时,返回最小值 |
GREATEST | 当有两个或多个参数时,返回最大值 |
BTWEEN AND | 判断一个值是否落在两个值之间 |
IN | 判断一个值时否是 IN 列表中的任意一个值 |
NOT IN | 判断一个值是否不是 IN 列表中的任意一个值 |
LIKE | 通配符匹配 |
REGEXP | 正则表达式匹配 |
当我们需要判断数据是否为 NULL 的时候,不能使用 = 或 != ,而要使用 IS NULL
或
IS NOT NULL
,因为在MySQL中 NULL 与任何数据都不相等,也包括自己。
select least(10,20,30);
当 LEAST
和 GREATEST
的参数中如果存在 NULL ,那么就会停止比较,直接返回 NULL。
select least(null,20,30);
逻辑运算符
逻辑运算符 | 说明 |
---|---|
NOT 或 ! | 逻辑非 |
AND 或 && | 逻辑与 |
OR 或 || | 逻辑或 |
XOR | 逻辑异或 |
位运算符
位运算符 | 说明 |
---|---|
| | 按位或 |
& | 按位与 |
^ | 按位异或 |
<< | 按位左移 |
>> | 按位右移 |
~ | 按位取反,比特位 0->1,1 -> 0 |
位运算符操作的对象都是数字的二进制形式。
条件查询
在查询数据的过程中,我们可以对数据进行筛选之后在显示出来。MySQL 条件查询依赖于 where
通常条件语句会使用到我们前面列举的MySQL运算符。
select * / 列名 from 表名 where 条件;
select * from student where class_id = 2302; -- 查询班级为2302的学生信息
select name,english
from student
where english >= 80 AND english < 90; -- 查询英语乘积在80-90分之间的学生信息
这里会不会显得SQL语句很长呢?那么我们是否可以将 select 后面的列名别名然后再进行条件筛选呢?
select name,english eng
from student
where eng >= 80 AND eng < 90; -- 查询英语乘积在80-90分之间的学生信息
答案是不行的,因为 select 的执行是后于 where 的。
模糊查询
MySQL中模糊查询的关键字是 LIKE
,并且我们还需要知道模糊查询会使用的通配符
%
用来匹配任意字符,_
用来匹配单个字符。
select * / 列名 from 表名 where 列名 = '_%';
select * from student where name like '小%';
然后我们为了体现模糊查询我们再插入一个数据。
insert into student values(2302,11,'李大虎','男',80,88,91);
select * from student where name like '_大%'; -- 查询名字第二个字为大的学生信息
排序查询
我们可以将需要查询的数据进行排序之后展现出来。而MySQL排序则需要使用到 order by
关键字。
select * / 列名 from 表名 (where 条件) order by 列名 asc / desc;
asc 表示升序排列(默认),desc 表示降序排列。
select class_id,name,math from student order by math desc; -- 按数学成绩降序排列
select class_id,name,math from student where gender = '男' order by math desc; -- 男生按数学成绩降序排列
order by排序的字段必须是数字类型或者英文和数字字符串类型
MySQL中,也可以以多个列为标准来排序。但是这些列的比重与顺序呈正相关。
select * from 表名 order by 列名1,列名2;
先以列名1为标准,如果列名1的数据相等,就比较列名2中的数据。
select * from student order by math,chinese,english;
聚合查询
MySQL聚合查询是一种用于计算和汇总数据的查询方式。它通过使用聚合函数和GROUP BY子句对数据进行分组,并对每个组中的数据应用聚合函数,从而返回汇总的结果。
select 聚合函数(列名) from 表名;
聚合函数
聚合函数 | 作用 |
---|---|
count() | 统计指定列不为NULL的记录行数 |
sum() | 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0 |
max() | 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算 |
min() | 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算 |
avg() | 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0 |
select count(name) from student;
聚合函数对NULL的处理:
- count 函数对 null 值的处理如果 count 函数的参数为星号( * ),则统计所有记录的个数。而如果参数为某字段,不统计含null 值的记录个数。
- sum 和 avg 函数对 null 值的处理这两个函数忽略 null 值的存在,就好象该条记录不存在一样。
- max 和 min 函数对 null 值的处理max 和 min 两个函数同样忽略 null 值的存在。
当我们使用聚合函数的时候,往往 select
后面的只有聚合函数,因为使用了聚合函数最终只会显示一行,不知道跟哪一行对齐。
分组查询
在日常生活中,我们往往需要先对数据进行分组,然后再对数据进行处理,同样MySQL也支持分组查询,MySQL中依赖于 group by
关键字实现分组查询。
select * / 列名 from 表名 group by 列名
因为使用了分组查询之后,每个不同的组的记录只会出现一条,所以我们 select 的对象只能含有该分组的列名或者聚合函数。
select * from student group by class_id;
select class_id,count(class_id) from student group by class_id; -- 统计每个班的学生人数
group by 后面也可跟多个字段,只有这几个字段完全一样才会被分到一组。
select class_id,gender,count(name) from student group by class_id,gender;
分组之后的条件筛选
当我们进行完分组之后,我们还可以对数据进行筛选,但是我们不能使用 where 条件
,而是使用having 条件
select class_id,count(class_id)
from student
group by class_id
having count(class_id) > 1; -- 筛选出班级人数大于1的班级
看到这里,大家会不会觉得这一行代码太长,可以将前面的聚合函数实现别名使用呢?
select class_id,count(class_id) cid_num
from student
group by class_id
having cid_num > 1; -- 筛选出班级人数大于1的班级
答案是可以的,那么我们需要知道MySQL查询
select * / 列名 from 表名 where 条件 group by 列名 having 条件 order by 列名 limit
中 select 、from 、where 、group by、having、order by、limit 的执行顺序。
from -> where -> group by -> 聚合函数 -> having ->select -> order by -> limit
分页查询
当我们查询数据的时候,如果数据过多,那么一页肯定是放不下的,而且我们看的也不是很美观,所以这就用到了分页查询 limit
。
select * from 表名 limit num;
num表示显示num个记录。
select * from 表名 limit m,n
表示从第 m+1 个记录开始,显示n个数据。
select *,(chinese + math + english)
as sum
from student
order by sum
desc limit 5; -- 显示总成据前五名的信息
select *,(chinese + math + english)
as sum
from student
order by sum
desc limit 2,5; -- 显示总成绩从第三名开始的五名学生的信息
将整张表的数据插入到另一张表中
将整张表插入到另一张表中可以大量节省代码量和时间。在MySQL中,整表插入数据有两种方式:insert into Table2(列名1,列名2) select 列名1,列名2 from Table1;
这种方法Table2必须事先存在,select 列名1,列名2 into Table2 from Table1;
这种形式的插入要求Table2不存在,因为这种形式的插入会创建表Table2。但是第二种插入方式在MySQL8之后便不能使用了。
注意:整表插入需要两张表的字段也就是列相同,并且尽量保证列类型也相同
create table student2(class_id int,id int,name varchar(20),gender varchar(10),chinese decimal(3,1),math decimal(3,1),english decimal(3,1));insert into student2 select * from student;
select * from student2;
相关文章:

MySQL数据库——DQL操作——基本查询
文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改,而其中数据的查询是使用最多,也…...

Electron 开发,报handshake failed; returned -1, SSL error code 1,错误
代码说明 在preload.js代码中,暴露参数给渲染线程renderer.js访问, renderer.js 报:ERROR:ssl_client_socket_impl.cc(978)] failed; returned -1, SSL error code 1,错误 问题原因 如题所说,跨进程传递消息,这意味…...

知识区博主转型——兼做知识区和改造区博主!!!!!
想脱单的进来,一起交流如何能脱单!!! 为什么——我太羡慕有对象的人了哭死!!!!!! 你是不是很羡慕别人怎么都有女朋友 别人家的女朋友怎么都那么好ÿ…...

Resnet与Pytorch花图像分类
1、介绍 1.1数据集介绍 flower_data├── train│ └── 1-102(102个文件夹)│ └── XXX.jpg(每个文件夹含若干张图像)├── valid│ └── 1-102(102个文件夹)└── ─── └── XXX.jp…...
【NLP概念源和流】 03-基于计数的嵌入,GloVe(第 3/20 部分)
接续上文 【NLP概念源和流】 02-稠密文档表示(第 2/20 部分)...

【React】关于组件之间的通讯
🌟组件化:把一个项目拆成一个一个的组件,为了便与开发与维护 组件之间互相独立且封闭,一般而言,每个组件只能使用自己的数据(组件状态私有)。 如果组件之间相互传参怎么办? 那么就要…...

item_get-小红薯-商品详情
一、接口参数说明: smallredbook.item_get,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/smallredbook/item_get 名称类型必须描述keyString是调用key(http://o0…...

网络安全进阶学习第十课——MySQL手工注入
文章目录 一、MYSQL数据库常用函数二、MYSQL默认的4个系统数据库以及重点库和表三、判断数据库类型四、联合查询注入1、具体步骤(靶场演示):1)首先判断注入点2)判断是数字型还是字符型3)要判断注入点的列数…...

2.3 网络安全协议
数据参考:CISP官方 目录 OSI七层模型TCP/IP体系架构TCP/IP安全架构 一、OSI七层模型 简介 开放系统互连模型(Open System Interconnection Reference Model,OSI)是国际标准化组织(ISO)于1977年发布的…...

Apache Flink概述
Flink 是构建在数据流之上的一款有状态的流计算框架,通常被人们称为第三代大数据分析方案 第一代大数据处理方案:基于Hadoop的MapReduce 静态批处理 | Storm 实时流计算 ,两套独立的计算引擎,难度大(2014年9月&#x…...

django使用mysql数据库
Django开 发操作数据库比使用pymysql操作更简单,内部提供了ORM框架。 下面是pymysql 和orm操作数据库的示意图,pymysql就是mysql的驱动,代码直接操作pymysql ,需要自己写增删改查的语句 django 就是也可以使用pymysql、mysqlclient作为驱动&a…...

MongoDB文档--基本概念
阿丹: 不断拓展自己的技术栈,不断学习新技术。 基本概念 MongoDB中文手册|官方文档中文版 - MongoDB-CN-Manual mongdb是文档数据库 MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包…...

【TypeScript】TS入门及基础学习(一)
【TypeScript】TS入门及基础学习(一) 【TypeScript】TS入门及基础学习(一)一、前言二、基本概念1.强类型语言和弱类型语言2.动态语言和静态语言 三、TypeScript与JavaScript的区别四、环境搭建及演练准备4.1 安装到本地4.2 在线运…...

Dockerfile构建LNMP镜像(yum方式)
目录 Dockerfile构建LNMP镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试: Dockerfile构建LNMP镜像 1、建立工作目录 [roothuyang1 ~]# mkdir lnmp/ [roothuyang1 ~]# cd lnmp/ 2、编写Dockerfile文件 [roothuyang1 …...

Flink Windows(窗口)详解
Windows(窗口) Windows是流计算的核心。Windows将流分成有限大小的“buckets”,我们可以在其上应用聚合计算(ProcessWindowFunction,ReduceFunction,AggregateFunction或FoldFunction)等。在Fl…...

AssetBundle学习
官方文档:AssetBundle 工作流程 - Unity 手册 (unity3d.com) 之前写的博客:AssetBundle学习_zaizai1007的博客-CSDN博客 使用流程图: 1,指定资源的AssetBundle属性 (xxxa/xxx)这里xxxa会生成目录&…...

CompletableFuture原理与实践
文章目录 1 为何需要并行加载2 并行加载的实现方式2.1 同步模型2.2 NIO异步模型2.3 为什么会选择CompletableFuture? 3 CompletableFuture使用与原理3.1 CompletableFuture的背景和定义3.1.1 CompletableFuture解决的问题3.1.2 CompletableFuture的定义 3.2 Complet…...

8.3 作业
整理思维导图 2. 递归实现,输入一个数,输出这个数的每一位 #include <myhead.h> void fun(int t) {if(t 0) return;fun(t/10);printf("%d\n",t%10); } int main(int argc,const char *argv[]) {int t1623809; fun(t);return 0; } 3.递…...
c# COM组件原理
COM(Component Object Model)是一种微软的软件组件技术,用于实现软件组件之间的互操作性。它是一种二进制接口标准,允许不同的软件组件在不同的进程中进行通信。COM组件可以用多种编程语言编写,并且可以在多个应用程序…...

Java POI 百万规模数据的导入和导出
目录 1、百万数据导入1.1 需求分析1.2 思路分析1.3 代码实现1.3.1 步骤分析1.3.2 自定义处理器1.3.3 自定义解析1.3.4 测试 2、百万数据导出2.1、概述2.2、解决方案分析2.3、原理分析2.4、百万数据的导出2.4.1、模拟数据2.4.2、思路分析2.4.3、代码实现2.4.4、测试结果 1、百万…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...