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 |
+------------+------------+------------+------------+

havingwhere的区别:

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.

并集查询

并集查询使用UNIONUNION ALL.
UNINOUNION 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’;

应用级别:

  • *.*代表全局级别,作用与任何数据库下的任何对象
  • 数据库.*代表数据库级别,作用于数据库下的任何对象

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

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

相关文章

hivemetastore 连接过多导致sql查询慢

MetaStore (DB)修改对应的处理连接数maxConnectionsPerPartition建议设置成 100 (不能超过最大值300)&#xff0c;重启Hive服务。 建议值100是根据与工行规模相当集群的设置作参考&#xff0c;尽量大满足连接数请求的同时考虑connection占用资源(如果connection太多会占用太多的…

sqli-labs布尔盲注

通过?id1及?id1判断是否存在sql注入的漏洞 ?id1有回显 ?id1无回显 再使用?id1 and 11 --及?id1 and 12 --判断是否为布尔盲注 ?id1 and 11 --有回显 ?id1 and 12 --无回显 为布尔盲注&#xff0c;使用python获取其中的库名&#xff0c;表名&#xff0c;列名及数据 1…

ovs源码分析

源码版本 ovs 内核部分的代码在linux内核的 /net/openswitch目录下&#xff0c;应用层控制面代码在ovs项目中。 Linux kernel: version 6.2.0 Ovs: v3.4.1 总体架构 整体结构图 ovs的架构如下图所示&#xff0c;主要由内核datapath、vswitchd、ovsdb以及用户空间的ovs-vs…

vue3实战-----使用mock模拟接口数据

vue3实战-----使用mock模拟接口数据 1.安装和配置2.创建mock数据3.使用axios测试 1.安装和配置 安装依赖:https://www.npmjs.com/package/vite-plugin-mock pnpm install -D vite-plugin-mock mockjs在 vite.config.js 配置文件启用插件: import { viteMockServe } from vit…

DeepSeek+Excel 效率翻倍

2025年初&#xff0c;DeepSeek以惊人的效率突破技术壁垒&#xff0c;用极低的成本实现了与行业顶尖AI相媲美的性能&#xff0c;瞬间成为全球科技领域的热门话题。 那么AI工具的普及将如何改变我们的工作方式&#xff1f;Excel会被取代吗&#xff1f; 今天&#xff0c;珠珠带你…

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…

pyside6 中信号有的地方用connect有的用emit为什么

在 PySide6 的 Qt 框架中&#xff0c;connect 和 emit 是信号与槽机制的两个核心操作&#xff0c;但它们的作用完全不同&#xff1a; 1. connect()&#xff1a;建立信号与槽的绑定 作用&#xff1a;将某个信号&#xff08;Signal&#xff09;与一个槽函数&#xff08;Slot&…

React历代主要更新

一、React 16之前更新 React Fiber是16版本之后的一种更新机制&#xff0c;使用链表取代了树&#xff0c;是一种fiber数据结构&#xff0c;其有三个指针&#xff0c;分别指向了父节点、子节点、兄弟节点&#xff0c;当中断的时候会记录下当前的节点&#xff0c;然后继续更新&a…

使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序

作者&#xff1a;来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪&#xff0c;而无需任何代码更改。 介绍 去年&#xff0c;我们宣布了 OpenTelemetry…

RabbitMQ使用guest登录提示:User can only log in via localhost

guest用户默认是无法使用远程访问的&#xff0c;生产环境建议直接在对应服务器登录使用。 1、通过创建新增用户并赋予权限实现远程登录 添加新用户 rabbitmqctl add_user zjp zjp 设置管理员 rabbitmqctl set_user_tags zjp administrator 设置新用户的权限 rabbitmqctl…

Eclipse JSP/Servlet 深入解析

Eclipse JSP/Servlet 深入解析 引言 随着互联网的快速发展,Java Web开发技术逐渐成为企业级应用开发的主流。在Java Web开发中,JSP(JavaServer Pages)和Servlet是两个核心组件,它们共同构成了Java Web应用程序的基础。本文将深入解析Eclipse平台下的JSP/Servlet技术,帮…

【Uniapp】关于实现下拉刷新的三种方式

在小程序、h5等地方中&#xff0c;常常会用到下拉刷新这个功能&#xff0c;今天来讲解实现这个功能的三种方式&#xff1a;全局下拉刷新&#xff0c;组件局部下拉刷新&#xff0c;嵌套组件下拉刷新。 全局下拉刷新 这个方式简单&#xff0c;性能佳&#xff0c;最推荐&#xf…

Redis过期删除与内存淘汰策略面试题剖析

一、谈谈Redis过期删除策略 参考我的这篇博客“二、过期删除策略&内存淘汰策略”部分 高性能分布式缓存Redis-数据管理与性能提升之道_redis 高性能缓存数据库-CSDN博客 二、谈谈Redis内存淘汰策略 参考我的这篇博客“二、过期删除策略&内存淘汰策略”部分 高性能…

基于STM32的学习环境控制系统设计

&#x1f91e;&#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是学习环境控制。 设备的详细功能见网盘中的文章《21、基于STM32的学习环境控制系统设计》&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1uWSZX2zbZwy9sY…

Linux中getifaddrs函数

文章目录 **函数原型****参数****返回值****释放资源****`struct ifaddrs` 结构****示例代码****输出示例****相关函数****总结**getifaddrs 是 Linux(以及其他 Unix-like 系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,…

前端知识速记--JS篇:instanceof

前端知识速记–JS篇&#xff1a;instanceof 在JavaScript中&#xff0c;instanceof运算符用于检测一个对象是否是另一个对象的实例。它的基本语法为&#xff1a;obj instanceof Constructor。如果obj是Constructor的实例&#xff0c;它将返回true&#xff0c;否则返回false。这…

数智百问 | 制造企业如何降低产线检测数据的存储和管理成本?

在《“十四五”智能制造发展规划》等政策的推动下&#xff0c;以及新能源汽车、消费电子等品牌商对产品质量和供应商智能化水平要求的提升&#xff0c;半导体、电子制造、动力电池等先进制造行业企业纷纷推进产线智能化升级&#xff0c;并投入大量机器视觉检测设备以实现自动化…

数据科学之数据管理|统计学

使用python学习统计 目录 01 统计学基础 7 一、 统计学介绍 7 二、 数据和变量 8 02 描述统计 10 一、 描述统计概述 10 二、 分类变量的描述 11 三、 等距数值变量的描述 13 四、 等比数值变量的描述 16 五、 常用软件包介绍 16 六、 数值变量的描述统计 18 (一)…

Spring Boot 配置 Mybatis 读写分离

JPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理 为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源 需要单独增加Mybatis的配置 Configuration public class MyBatisConfig {Beanpublic SqlSessionFactory…

MongoDB 基本操作

一、数据库操作 1. 切换或创建数据库 使用use命令切换到指定数据库&#xff0c;若该数据库不存在&#xff0c;在首次插入数据时会自动创建。 use myDatabase 2. 查看所有数据库 使用show dbs命令查看 MongoDB 实例中的所有数据库。 show dbs 3. 删除当前数据库 使用db.…