linux 下连接mysql(下)
case 表达式
表t1中的数据如下。
select * from t1;
+----+------------+------+------+
| id | student_no | name | age |
+----+------------+------+------+
| 3 | 202501 | ll | 10 |
| 4 | 202502 | tt | 15 |
+----+------------+------+------+
如果学号是202501,则输出hello,其余的值输出mysql。
select case student_no when 202501 then 'hello' else 'mysql' end from t1;
+-----------------------------------------------------------+
| case student_no when 202501 then 'hello' else 'mysql' end |
+-----------------------------------------------------------+
| hello |
| mysql |
+-----------------------------------------------------------+
如果年龄大于等于15,输出>=15,年龄在10到15之间,输出10<=age<=15,其余输出<10.
select casewhen age >= 15 then '>=15' when age between 10 and 15 then '10<= age <=15' else '<10' end as res from t1;
+---------------+
| res |
+---------------+
| 10<= age <=15 |
| >=15 |
+---------------+
IF 表达式
格式: IF(表达式1, 表达式2, 表达式3)
如果表达式1的结果为真,则返回表达式2的值,如果表达式1的结果为假,则返回表达式3的值.
select if(10 < 12, 12 , 15),if(20 < 12, 12, 15);
+---------------------+-------------------+
| if(10< 12, 12 , 15) | if(20 < 12,12,15) |
+---------------------+-------------------+
| 12 | 15 |
+---------------------+-------------------+
IFNULL()
如果表达式1的值为NULL,则返回表达式2的值。否则使用表达式1的值.
select ifnull(null,'hello'),ifnull(1,'hello');
+----------------------+-------------------+
| ifnull(null,'hello') | ifnull(1,'hello') |
+----------------------+-------------------+
| hello | 1 |
+----------------------+-------------------+
NULLIF()
如果表达式1和表达式2的结果相同,返回null.否者返回表达式1
select nullif(1,1),nullif(1,2);
+-------------+-------------+
| nullif(1,1) | nullif(1,2) |
+-------------+-------------+
| NULL | 1 |
+-------------+-------------+
汇总函数
汇总函数的作用是将某个字段的所有行的数据当作参数,生成一个返回值.
#t2表中的数据
select * from t2;
+----+------------+-------+---------+
| id | student_no | score | subject |
+----+------------+-------+---------+
| 2 | 202501 | 100 | 语文 |
| 3 | 202501 | 90 | 英语 |
| 4 | 202501 | 95 | 数学 |
| 5 | 202502 | 80 | 语文 |
| 6 | 202502 | 100 | 英语 |
| 7 | 202502 | 90 | 数学 |
+----+------------+-------+---------+#输出所有成绩的最高,最低分和平均分
select max(score),min(score),avg(score) from t2;
+------------+------------+------------+
| max(score) | min(score) | avg(score) |
+------------+------------+------------+
| 100 | 80 | 92.5000 |
+------------+------------+------------+
分组查询
分组的作用是:将数据以指定的字段分称多个组,在分组内执行汇总函数.
下面语句输出每个同学的最高分,最低分和平均分.
select student_no,max(score),min(score),avg(score)from t2 group by student_no;
+------------+------------+------------+------------+
| student_no | max(score) | min(score) | avg(score) |
+------------+------------+------------+------------+
| 202501 | 100 | 90 | 95.0000 |
| 202502 | 100 | 80 | 90.0000 |
+------------+------------+------------+------------+
如果要对分组后的数据进行过滤,需要使用HAVING.
下面只显示平均分大于90的同学的最高分,最低分和平均分.
select student_no,max(score),min(score),avg(score) from t2 group by student_no having avg(score) > 90;
+------------+------------+------------+------------+
| student_no | max(score) | min(score) | avg(score) |
+------------+------------+------------+------------+
| 202501 | 100 | 90 | 95.0000 |
+------------+------------+------------+------------+
having 和 where的区别:
where 是在分组之前对所有的数据进行过滤.
having 是在分组后,对分组进行过滤.
使用分组时,在查询列表中只能放置分组列和汇总函数
连接查询
连接查询分为内连接和外连接.
外连接又分为左连接和右连接.
inner join
下面语句查询每个同学的成绩
select t1.student_no, t1.name,t2.subject,t2.score from t1
inner join t2
on t1.student_no=t2.student_no;
+------------+--------+---------+-------+
| student_no | name | subject | score |
+------------+--------+---------+-------+
| 202501 | 小明 | 语文 | 100 |
| 202501 | 小明 | 英语 | 90 |
| 202501 | 小明 | 数学 | 95 |
| 202502 | 小华 | 语文 | 80 |
| 202502 | 小华 | 英语 | 100 |
| 202502 | 小华 | 数学 | 90 |
+------------+--------+---------+-------+
左连接
下面同样是查询每个同学的成绩,不同的是将inner join 改为 left join
select t1.student_no, t1.name,t2.subject,t2.score from t1
left join t2
on t1.student_no=t2.student_no;
+------------+--------+---------+-------+
| student_no | name | subject | score |
+------------+--------+---------+-------+
| 202501 | 小明 | 语文 | 100 |
| 202501 | 小明 | 英语 | 90 |
| 202501 | 小明 | 数学 | 95 |
| 202502 | 小华 | 语文 | 80 |
| 202502 | 小华 | 英语 | 100 |
| 202502 | 小华 | 数学 | 90 |
| 202503 | 小刚 | NULL | NULL |
+------------+--------+---------+-------+
内连接、左连接和右连接的区别:
内连接:在两张表中找不到匹配的记录,则该记录不会放到结果集中
左连接:在两张表中找不到匹配的记录,左侧表的记录仍需放到结果集中,取不到值的字段显示为NULL.
右连接和左连接正好相反,在两张表中找不到匹配的记录,右侧表的记录仍需放到结果集中,取不到值的字段显示为NULL.
并集查询
并集查询使用UNION和UNION ALL.
UNINO和UNION ALL的区别时 UNION 会自动去重.
下面语句查询小明和小华的成绩:
select score from t2 inner join t1 on t2.student_no=t1.student_no and t1.name = '小明'unionselect score from t2 inner join t1 on t2.student_no=t1.student_no and t1.name = '小华';
+-------+
| score |
+-------+
| 100 |
| 90 |
| 95 |
| 80 |
+-------+select score from t2 inner join t1 on t2.student_no=t1.student_no and t1.name = '小明'
union all
select score from t2 inner join t1 on t2.student_no=t1.student_no and t1.name = '小华';
+-------+
| score |
+-------+
| 100 |
| 90 |
| 95 |
| 80 |
| 100 |
| 90 |
+-------+
数据的插入、更新和删除
插入数据
insert into 表名(field1,field2…) values(val1,val2…), (val1,val2…) …;
下面语句插入小刚的成绩
insert into t2(student_no,subject,score) values(202503,'语文',100),(202503,'数学',100);##查询结果
select t1.student_no,t1.name,t2.subject,t2.score from t1
inner join t2 on t1.student_no=t2.student_no
and t1.name = '小刚';
+------------+--------+---------+-------+
| student_no | name | subject | score |
+------------+--------+---------+-------+
| 202503 | 小刚 | 语文 | 100 |
| 202503 | 小刚 | 数学 | 100 |
+------------+--------+---------+-------+
插入某个查询的结果集
insert into 表名(field1,field2…) select …;
下面语句插入小刚的英语成绩.
insert into t2(student_no,subject.score) select 202503,'英语',99;select t1.student_no,t1.name,t2.subject,t2.score from t1 inner join t2 on t1.student_no=t2.student_no and t1.name = '小刚';
+------------+--------+---------+-------+
| student_no | name | subject | score |
+------------+--------+---------+-------+
| 202503 | 小刚 | 语文 | 100 |
| 202503 | 小刚 | 数学 | 100 |
| 202503 | 小刚 | 英语 | 99 |
+------------+--------+---------+-------+
更新数据
update 表名 set … [where …];
下面语句将小刚的英语成绩改为95:
update t2 set score = 95 where student_no=202503 and subject='英语';select * from t2 where student_no=202503;
+----+------------+-------+---------+
| id | student_no | score | subject |
+----+------------+-------+---------+
| 8 | 202503 | 100 | 语文 |
| 9 | 202503 | 100 | 数学 |
| 10 | 202503 | 95 | 英语 |
+----+------------+-------+---------+
删除数据
delete from 表名 [where …]
下面语句删除小刚的英语成绩
mysql> delete from t2 where student_no=202503 and subject='英语';mysql> select * from t2 where student_no=202503;
+----+------------+-------+---------+
| id | student_no | score | subject |
+----+------------+-------+---------+
| 8 | 202503 | 100 | 语文 |
| 9 | 202503 | 100 | 数学 |
+----+------------+-------+---------+
视图
视图就是查询语句的一个别名,它不会存储查询的结果.
使用视图的时候,可以把它当作一张表使用.
格式:
create view 视图名 as select …
下面语句创建视图,用于查询所有同学的英语成绩.
create view v_english as select student_no,score from t2 where subject='英语';select * from v_english;
+------------+-------+
| student_no | score |
+------------+-------+
| 202501 | 90 |
| 202502 | 100 |
+------------+-------+
# 删除视图
drop view v_english;
存储过程
格式:
create procedure 名称([参数列表])begin#需要执行的语句end
存储过程调用:
call 名称([参数列表])
下面语句输出指定同学的英语成绩
delimiter $create procedure p_english_score(number int)
beginselect * from t2 where t2.subject='英语' and t2.student_no=number;
end $delimiter ;call p_english_score(202501);
+----+------------+-------+---------+
| id | student_no | score | subject |
+----+------------+-------+---------+
| 3 | 202501 | 90 | 英语 |
+----+------------+-------+---------+
存储函数
格式:
create function 函数名([参数列表])
returns 返回类型
begin函数体;
end
下面语句创建函数,用于计算指定学号对应同学的平均分.
delimiter $
create function avg_score(number int)
returns int
begin declare res int;set res = (select avg(score) from t2 where student_no=number); return res ;
end $
delimiter ;#使用函数
select avg_score(202501),avg_score(202502),avg_score(202503);
+-------------------+-------------------+-------------------+
| avg_score(202501) | avg_score(202502) | avg_score(202503) |
+-------------------+-------------------+-------------------+
| 95 | 90 | 100 |
+-------------------+-------------------+-------------------+#删除函数
drop function avg_score;
使用函数计算斐波那契数列
delimiter $
create function fibonacci(n int)
returns int
begindeclare a,b,c int default 1;declare i int default 2;set c=2;if n <= 2 thenreturn a;end if;label1: while 1doset c = a + b, a = b, b = c;set i = i+1;if i >= n thenleave label1;end if;end while label1;return c;
end $
delimiter ;select fibonacci(5),fibonacci(6),fibonacci(7);
+--------------+--------------+--------------+
| fibonacci(5) | fibonacci(6) | fibonacci(7) |
+--------------+--------------+--------------+
| 5 | 8 | 13 |
+--------------+--------------+--------------+
存储过程和存储函数的不同点
- 存储函数在定义时需要显示使用returns语句表明返回的数据类型,函数体中必须使用return语句来指定返回值
- 存储函数不支持IN、OUT、INOUT的参数前缀
- 存储函数只能返回一个值,存储过程可以通过OUT和INOUT参数返回多个结果
- 存储函数执行过程中产生的结果集不会显示到客户端,存储过程产生的结果集会显示到客户端
- 存储函数直接以函数调用的形式进行调用,存储过程只能通过CALL语句显示调用
用户权限
创建用户
格式:
create user '用户名'@'localhost' identified by '密码';
修改密码
alter user '用户名'@'localhost' identified by '密码';
删除用户
drop user '用户名'@'localhost';
授予权限
grant 权限名称 on 应用级别 to ‘用户名’@‘localhost’;
应用级别:
- *.*代表全局级别,作用与任何数据库下的任何对象
- 数据库.*代表数据库级别,作用于数据库下的任何对象
相关文章:
linux 下连接mysql(下)
case 表达式 表t1中的数据如下。 select * from t1; ---------------------------- | id | student_no | name | age | ---------------------------- | 3 | 202501 | ll | 10 | | 4 | 202502 | tt | 15 | ----------------------------如果学号是202501,…...
【Qt 常用控件】多元素控件(QListWidget、QTableWidgt、QTreeWidget)
**View和**Widget的区别? **View的实现更底层,**Widget是基于**View封装实现的更易用的类型。 **View使用MVC结构 MVC是软件开发中 经典的 软件结构 组织形式,软件设计模式。 M(model)模型。管理应用程序的核心数据和…...
Linux 远程文件复制传输-----scp/rsync/sftp
scp(Secure Copy Protocol)是基于 SSH 的安全文件传输工具,可用于在本地和远程计算机之间复制文件或目录。 1. scp(基于 SSH 复制文件) a. 复制文件到远程 从本地复制到远程 scp localfile.txt userremote_host:/remo…...
VS2022中.Net Api + Vue 从创建到发布到IIS
VS2022中.Net Api Vue 从创建到发布到IIS 前言一、先决条件二、创建项目三、运行项目四、增加API五、发布到IIS六、设置Vue的发布 前言 最近从VS2019 升级到了VS2022,终于可以使用官方的.Net Vue 组合了,但是使用过程中还是有很多问题,这里记录一下. 一、先决条件 Visual …...
Windows 11 搭建私有知识库(docker、dify、deepseek、ollama)
一、操作系统信息 版本 Windows 11 家庭中文版 版本号 23H2 安装日期 2023/8/21 操作系统版本 22631.4460二、搭建思路 ollama拉取deepseek、bge-m3模型docker拉取dify的镜像dify链接ollama使用模型,并上传文件搭建知识库,创建应用 三、搭建步骤…...
安装OpenJDK21(linux、macos)
文章目录 安装OpenJDK21java21linux下安装配置mac下安装 安装OpenJDK21 java21 封神!Java 21正式发布了,迎来了史诗级新特性,堪称版本最强!!! 视频链接:https://www.bilibili.com/video/BV1E8…...
变分边界详解
起因 当时看VAE论文时有这么一段,但是看完直接一头雾水,这都那跟哪,第一个公式咋做的变换就变出那么一堆。网上搜了很多博客都语焉不详,只好自己来写一篇,希望能解答后来人的疑惑。 公式1 参考文章:证据…...
Softhsm储存安全数据性能整理
目标:存储百万条数据对象 测试方案一:总大小2GB,每个数据对象大小约512KB,总条数4096条; 测试方案一:总大小2GB,每个数据对象大小约256B,总条数8388608条; 测试环境&am…...
KaiOS 4.0 APN List 界面加载debug
问题背景 在列表选中APN进入编辑后,退出返回列表界面时无法焦点选中编辑的APN。 代码分析 路径:gaia/apps/settings/js/panels/apn_list/panel.js 分析SettingsPanel界面加载的步骤逻辑 onBeforeShow -> onShow -> onBeforeHide -> onHide return SettingsPanel(…...
Next.js 15【实用教程】2025最新版
官网 https://nextjs.org/docs/app/getting-started Next.js 简介 Next.js 由 Vercel 开发和维护,旨在解决单页应用(SPA)和多页应用(MPA)在性能和 SEO 上的不足。 核心特性 服务端渲染(SSR)--…...
2025-02-13 学习记录--C/C++-PTA 7-17 爬动的蠕虫
一、题目描述 ⭐️ 二、代码(C语言)⭐️ #include <stdio.h>int main() {int N, U, D; // N: 井的总高度,U: 每分钟向上爬的高度,D: 每分钟滑下的高度int height 0; // 蠕虫当前的高度int minute 0; // 蠕虫爬行的时间sc…...
Elasticsearch+Logstash+Kibana可视化集群部署
文章目录 1.组件介绍简述2.集群规划3.Es组件部署4.Logstash组件部署5.Kibana组件部署6.Kibana的基础使用 1.组件介绍简述 Elasticsearch:开源实时分布式搜索和分析引擎,支持大规模数据存储和高吞吐量,提供丰富的搜索功能和可扩展性。 Logsta…...
React VS Vue
React 和 Vue 是目前最流行的两个前端框架,它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比: 1. 核心设计理念 React 库而非框架:React 是一个用于构建 UI 的库,专注于视图层,其…...
DeepSeek+Excel 效率翻倍
2025年初,DeepSeek以惊人的效率突破技术壁垒,用极低的成本实现了与行业顶尖AI相媲美的性能,瞬间成为全球科技领域的热门话题。 那么AI工具的普及将如何改变我们的工作方式?Excel会被取代吗? 今天,珠珠带你…...
将Sqlite3数据库挂在内存上处理
创作灵感:最近把小学生的口算题从2位数改到3位数,100以内四则运算练习(千纬数学)再次更新,选取难题-CSDN博客要不断刷题目,以前100以内的加减乘除也是这样刷出来的,代码如下: impor…...
Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法
上一节封装图标组件 SvgIcon 时,用到了 defineProps,因为它在开发中的重要性,这里简单看一下它的用法,已熟知用法的此节可跳过。 在 Vue3 的组件化开发体系里,组件间通信是构建高效、可维护应用程序的核心环节。defin…...
HTTP/2 由来及特性
HTTP/2 的由来 HTTP/1.x 的局限性 性能瓶颈 队头阻塞问题:在HTTP/1.x中,一个TCP连接在同一时间只能处理一个请求,后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如,当一个页面有多个资源(如图片、脚…...
electron.vite 项目创建以及better-sqlite3数据库使用
1.安装electron.vite npm create quick-start/electronlatest中文官网:https://cn.electron-vite.org/ 2. 安装项目依赖 npm i3.修改 electron-builder 配置文件 appId: com.electron.app productName: text33 directories:buildResources: build files:- !**/.v…...
蓝桥杯 Java B 组之枚举算法(暴力破解)
Day 3:枚举算法(暴力破解) 枚举算法(Brute Force)是一种 暴力搜索 方法,它通过 遍历所有可能的情况 来找到正确答案。虽然它的 时间复杂度较高,但在 数据范围较小 时,它是一种简单且…...
AI 控制web浏览器基础知识准备,名词解释Xvfb,x11vnc,novnc,playwright,gradio
在探索如何让AI控制Web浏览器实现自动化任务时,了解底层技术栈是关键。本文将解析五个核心组件:Xvfb、x11vnc、novnc、playwright和gradio,这些工具共同构成了AI驱动浏览器的基础架构。 1. Xvfb(X Virtual Framebuffer࿰…...
C++,STL容器适配器,stack:栈深入解析
文章目录 一、容器概览与核心特性核心特性速览二、底层实现原理1. 容器适配器设计2. 默认容器对比三、核心操作详解1. 容器初始化2. 元素操作接口3. 自定义栈实现四、实战应用场景1. 括号匹配校验2. 浏览器历史记录管理五、性能优化策略1. 底层容器选择基准2. 内存预分配技巧六…...
Vue笔记(十)
一、AI的基本认知 二、ChatGPT的基本使用 三、AI插件--Copilot入门 1.Copilot是由OpenAI和GitHub合作开发的AI编程辅助插件,基于大量代码训练,能根据上下文自动生成代码建议。 2.安装与配置:在常用代码编辑器(如Visual Studio Cod…...
Ubuntu下载安装Docker-Desktop
下载 Ubuntu | Docker Docs 预备工作 Ubuntu增加docker apt库-CSDN博客 安装 sudo apt-get updatesudo apt install gnome-terminal# sudo apt install -y docker-composesudo apt-get install ./docker-desktop-amd64.deb 测试 sudo docker run hello-worldHello from D…...
DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?
随着人工智能技术的飞速发展,大模型领域不断涌现出具有创新性的成果。DeepSeek 的横空出世,为 AI 大模型领域带来了新的变革浪潮。本文将深入探讨 DeepSeek 出现后 AI 大模型面临的危机与转机。 冲冲冲!!! 目录 一、…...
C#运动控制——轴IO映射
1、IO映射的作用 该功能允许用户对专用 IO 信号的硬件输入接口进行任意配置,比如轴的急停信号,通过映射以后,可以将所有轴的急停信号映射到某一个IO输入口上,这样,我们只要让一个IO信号有效就可以触发所有轴的急停。 进…...
ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet
集合族谱 在这些集合中,仅有vector和hashtable是线程安全的,其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现,实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...
DeepSeek 指导手册(入门到精通)
第⼀章:准备篇(三分钟上手)1.1 三分钟创建你的 AI 伙伴1.2 认识你的 AI 控制台 第二章:基础对话篇(像交朋友⼀样学交流)2.1 有效提问的五个黄金法则2.2 新手必学魔法指令 第三章:效率飞跃篇&…...
window 11 鼠标右键切换回经典模式
window 11 鼠标右键切换回经典模式 在换新电脑,更新到 window 11 后,鼠标右键很不习惯,把很多功能都隐藏到最后一个打开更多模块了,删除以及刷新等操作也不能使用右键字母快捷操作。 恢复window 11 右键菜单到经典模式 方法一&am…...
RabbitMQ 延迟队列
1.延迟队列插件安装(版本号要对其) Releases rabbitmq/rabbitmq-delayed-message-exchange GitHub 下载的文件: rabbitmq_delayed_message_exchange-3.13.0.ez 直接复制到以下文件夹: \RabbitMQ Server\rabbitmq_server-3.13.7\plugins\ 执行命令…...
Unity3D 类MOBA角色控制器 开箱即用
Github: Unity3D-MOBA-Character-Controller 觉得好用麻烦点个Star感谢!...
