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);

在这里插入图片描述
LEASTGREATEST 的参数中如果存在 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的处理:

  1. count 函数对 null 值的处理如果 count 函数的参数为星号( * ),则统计所有记录的个数。而如果参数为某字段,不统计含null 值的记录个数。
  2. sum 和 avg 函数对 null 值的处理这两个函数忽略 null 值的存在,就好象该条记录不存在一样。
  3. 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;

在这里插入图片描述

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

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

相关文章

Modbus TCP转Profinet网关modbus tcp转以太网

大家好&#xff0c;今天我们来聊一聊如何使用捷米特的Profinet转modbusTCP协议转换网关在博图上进行非透传型配置。 1, 首先&#xff0c;我们需要安装捷米特JM-TCP-PN的GSD文件&#xff0c;并根据现场设备情况配置modbusTCP地址。然后&#xff0c;在博图中添加该GSD文件&#x…

了解垃圾回收算法

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 垃圾回收&#xff08;Garbage Collect&#xff09;是Java语言中的一种自动内存管理机制&#xff0c;用于自动回收不再使用的对象所占用的内存空间。Java虚拟机会自动追踪和…

算法39:Excel 表列序号

一、需求 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1&#xff1a; 输入: columnTitle “A” 输出: 1 示例 2&…

uC-OS2 V2.93 STM32L476 移植:系统启动篇

前言 前两篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG 的 STM32L476RG 的 裸机工程&#xff0c;下载了 uC-OS2 V2.93 的源码&#xff0c;并把 uC-OS2 的源文件加入 Keil MDK5 工程 本篇适配 uC-OS2 的 系统定时器&#xff08;Systick&#xff09;与 PendSV_Handler&#xf…

leetcode 763. 划分字母区间

2023.8.3 本题的关键是要确保同一字母需要在同一片段中&#xff0c;而这就需要关注到每个字母最后一次出现的位置。 思路&#xff1a;用一个哈希表保存每个字母&#xff08;26个&#xff09;最后一次出现的位置。然后从头遍历&#xff0c;不断更新最右边界&#xff0c;直到当前…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业 tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查…

[数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北

MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库&#xff0c;用于处理移动物体的轨迹数据。它提供了一组强大的工具&#xff0c;可以轻松地加载、分析和可视化移动物体的轨迹。通过使用MovingPandas&#xff0c;用户可以轻松地处理和分析移动对象数据&#x…

[JAVA基础]自动拆装箱NPE问题

1.自动拆装箱场景 自动装箱 当把字面量转换成包装类的时候会自动装箱 比如&#xff1a; Integer a 1; Integer b 1; 自动拆箱 当你对包装类的对象进行运算&#xff08;如加法、减法等&#xff09;时&#xff0c;Java会自动进行拆箱操作。拆箱是将包装类型的对象转换为相应的基…

登月再进一步:Apollo自动驾驶的里程碑

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

数据结构 | 递归

目录 一、何谓递归 1.1 计算一列数之和 1.2 递归三原则 1.3 将整数转换成任意进制的字符串 二、栈帧&#xff1a;实现递归 三、递归可视化 四、谢尔平斯基三角形 五、复杂的递归问题 六、动态规划 一、何谓递归 递归是解决问题的一种办法&#xff0c;它将问题不断地分…

Google Colab 部署 Stable Diffusion Webui

1. 下载 vae 访问: https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.ckpt 根据下图的红圈部分&#xff0c;点击下载。 将其上传至GoogleDrive根目录 点击新建后&#xff0c;然后点击上传文件。 2. 访问 colab 首先第一步…

数据结构——单链表

无头单向非循环链表的建立 前言——什么链表链表形象图链表分类 一、Single_linked_list.h头文件的建立二、Single_linked_list.c功能函数的定义Single_linked_list_test.c主函数的定义四、代码运行测试五、Single_linked_list完整代码演示&#xff1a;总结 前言——什么链表 链…

一条自由游动的鲸鱼

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>鲸鱼</title><style>#canvas-container {width: 100%;height: 100vh;overflow: hidden;}&l…

HTML之表单标签

目录 表单标签 Form表单 定义&#xff1a; 基本语法结构&#xff1a; form属性&#xff1a; enctyoe属性 fieldeset标签 fieldeset属性 legend标签 label标签 优势 label属性 input标签 input属性 input标签中的type属性 text text输入框有以下配套属性 searc bu…

太魔幻了!计算机就业哀鸿遍野,而高考生疯狂涌向计算机专业

在张雪峰推荐的几大专业里&#xff0c;计算机专业是其中之一。近几年&#xff0c;计算机专业报考热度不减&#xff0c;但就业前景却令人堪忧&#xff0c;互联网裁员接二连三&#xff0c;许多码农找不到工作。 一位网友感叹&#xff1a;一边是计算机就业哀鸿遍野&#xff0c;一…

IDEA中怎么使用git下载项目到本地,通过URL克隆项目(gitee\github)

点击 新建>来自版本控制的项目 点击后会弹出这样一个窗口 通过URL拉取项目代码 打开你要下载的项目仓库 克隆>复制 gitee github也是一样的 返回IDEA 将刚刚复制的URL粘贴进去选择合适的位置点击克隆 下载完成

Mac电脑目录

System&#xff08;系统&#xff09;Applications&#xff08;应用程序&#xff09;应用程序目录&#xff0c;默认所有的GUI应用程序都安装在这里User&#xff08;用户&#xff09;存放用户的个人资料和配置。每个用户有自己的单独目录Library&#xff08;资料库&#xff09;系…

Android的Handler消息通信详解

目录 背景 1. Handler基本使用 2. Handler的Looper源码分析 3. Handler的Message以及消息池、MessageQueue 4. Handler的Native实现 4.1 MessageQueue 4.2 Native结构体和类 4.2.1 Message结构体 4.2.2 消息处理类 4.2.3 回调类 4.2.5 ALooper类 5. 总结&…

基于fpga_EP4CE6F17C8_秒表计数器

文章目录 前言实验手册一、实验目的二、实验原理1&#xff0e;理论原理2&#xff0e;硬件原理 三、系统架构设计四、模块说明1&#xff0e;模块端口信号列表dig_driver(数码管驱动模块)key(按键消抖模块)top(顶层模块) 2&#xff0e;状态转移图3&#xff0e;时序图五、仿真波形…

目标检测与跟踪 (2)- YOLO V8配置与测试

系列文章目录 第一章 目标检测与跟踪 &#xff08;1&#xff09;- 机器人视觉与YOLO V8 目标检测与跟踪 &#xff08;1&#xff09;- 机器人视觉与YOLO V8_Techblog of HaoWANG的博客-CSDN博客3D物体实时检测、三维目标识别、6D位姿估计一直是机器人视觉领域的核心研究课题&a…