MySQL 数据库————连接查询

2023-11-09

目录

一、多表连接查询

1.内连接——inner join

 2.左连接——left join

 3.右连接——right join

二、存储过程

1、简介

2、优点 

3、语法 

 ②、参数分类

 ③、带参数的存储过程

 ④、修改存储过程

⑤、删除存储过程


一、多表连接查询

  • MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接

  • 首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上

    使用较多的连接查询包括:内连接、左连接和右连接

1.内连接——inner join

  • MySQL中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。
  • 通常在 from 子句中使用关键字 inner join 来连接多张表,并使用 on 子句设置连接条件
  •  内连接是系统默认的表连接,所以在 from 子句后可以省略 inner 关键字,只使用关键字 join ,同时有多个表时,也可以连续使用 inner join 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表
     select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段

     2.左连接——left join

  •  左连接也可以被称为左外连接,在 from 子句中用 left join 或者 left out join 关键字来表示。
  •  左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
  •  左连接中,左表的记录会全部表示出来,而右表只会显示符合搜索条件的记录,不足的地方均为 null

SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;

 3.右连接——right join

  •  右连接也被称为右外连接,在 from 子句中用 right join 或者 right out join 关键字来表示。
  •  右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配

 

二、存储过程

1、简介

  •  MysQL数据库存储过程是一组为了完成特定功能的SQL语句的集合。
  •  存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。
  •  存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。
  •  操作数据库的传统SQL语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高。存储过程在数据库中创建并保存,它不仅仅是SQL语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访问方式。
     

2、优点 

  •  执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  •  SQL语句加上控制语句的集合,灵活性高
  •  在服务器端存储,客户端调用时,降低网络负载
  •  可多次重复被调用,可随时修改,不影响客户端调用
  •  可完成所有的数据库操作,也可控制数据库的信息访问权限

3、语法 

create procedure <过程名> ([过程参数……]) <过程体>
[过程参数……] 格式
<过程名>:尽量避免与内置的函数或字段重名
<过程体>:语句
[in|out|inout] <参数名><类型>
例:
delimiter $$    								#将语句的结束符号从分号;临时修改,以防出问题,可以自定义
create procedure ee(in inname varchar(16))  	#创建存储过程,过程名自定义,()可带参数
 	begin   		    						#过程体以关键字BEGIN开始
 	select * from test1 where a_name='aaaa';  	#过程体语句
 	end$$    									#过程体以关键字END结尾
delimiter ; 			    					#将语句的结束符号恢复为分号
call ee('aaaa');	  							#调用存储过程

--------------查看存储过程--------------
show create procedure XXX\G               		 #查看某个储存过程的具体信息


 

 ②、参数分类

  • 存储过程的主体部分,即过程体
  •  以 begin 开始,end 结束,若只有一条SQL语句,可省略 begin 和 end
  •  以 delimiter 开始和结束

 ③、带参数的存储过程

  • 输入参数:in 表示调用者向过程传入值(传入值可以是字面量或变量)
  •  输出参数:out 表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
  •  输入/输出参数:inout ,即表示调用者向过程传入值,又表示过程向调用者传入值(只能是变量)

 

 ④、修改存储过程

alter procedure <过程名> [<特征>……]
alter procedure ff modifies sql data sql security invoker;

modifies sql data:表名子程序包含写程序的语句

security:安全等级

invoker:当定义为 invoker 时,只要执行者有执行权,就可以成功执行

⑤、删除存储过程

drop procedure if exists ff;

å¨è¿éæå¥å¾çæè¿°
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 数据库————连接查询 的相关文章

随机推荐

  • c盘满了怎么办?如何快速清理内存(6个方法)

    很多用户都会问 我的电脑c盘东西太多了 c盘满了怎么办 c盘爆满 可能还会收到系统提示磁盘空间不足的警告 当出现这种情况 会导致电脑很多应用无法正常运行 运行速度也会大大降低 该如何解决这个问题 不如来看看小编精心整理的关于如何清理c盘垃圾
  • antV使用教程入门

    在移动端使用antV F2图表入门介绍 1 通过npm安装 npm install antv f2 save 成功安装完成之后 即可使用 import 或 require 进行引用 const F2 require antv f2 2 通过
  • 剑指 Offer 14- I. 剪绳子 数学法+动态规划

    剑指 Offer 14 I 剪绳子 难度 中等 题目描述 解题思路 1 数学方法 记不清在哪里好像做过这道题 在所有的分法里 每次以3为一段能得到最大的结果 比如9 分成33的时候是最大的 计算数字除以3的余数 如果余1 就和其中一个三组合
  • DETRs Beat YOLOs on Real-time Object Detection

    目录 1 模型架构 1 1高效混合编码器 1 1 1 尺度内特征交互模块AIFI 1 1 2 跨尺度特征融合CCFM 1 2IoU感知查询选择 总结 DETRs在实时目标检测中击败YOLO 问题 DETR的高计算成本 实时检测效果有待提高
  • ES6之map()方法

    map 方法 map 映射 即原数组映射成一个新的数组 map方法接受一个新参数 这个参数就是将原数组变成新数组的映射关系 function myfun 1 arr var array arr map item gt array push
  • unity2019导入leapmotion插件显示SpatialTracking在unity Engine中缺少相应的头文件

    unity2019导入leapmotion插件显示SpatialTracking在unity Engine中缺少相应的头文件 1 问题描述 2 问题解决方法 1 2 3 插入这个插件 4 问题就可以解决了 注 2019将很多插件需要自己选择
  • RabbitMQ--扩展--10--消息追踪

    RabbitMQ 扩展 10 消息追踪 1 介绍 1 1 RabbitMQ 消息异常丢失的情况 可能是生产者与Broker断开了连接并且也没有任何重试机制 可能是消费者在处理消息时发生了异常 不过却提前进行了ack 可能是交换机并没有与任何
  • js如何实现网站内容禁止复制和粘贴、另存为?

    1 使右键和复制失效 方法1 在网页中加入以下代码 代码如下 方法2 在中加入以下代码
  • 四个复制就能用的炫酷网页特效

    第一个 炫酷星空
  • springboot的基本配置

    server port 8086 spring profiles active dev application name my springsecurity plus datasource driver driver class name
  • 【鸿蒙】日志工具的使用

    鸿蒙 Harmony应用开发 目录导航 在前面 鸿蒙 创建你的第一个Harmony项目我们已经能够顺利的编译并运行我们的第一个程序hello world 为了今后能走的更远 我们现在需要点基础的装备 日志工具 学会了日志工具的使用方法 会对
  • kubectl proxy 命令使用

    kubectl proxy address 192 168 8 220 accept hosts localhost 127 0 0 1 1 accept paths
  • 【语义分割】8、Self-Regulation for Semantic Segmentation

    文章目录 一 背景 二 动机 三 方法 SR F Loss Shallow to Deep SR L Loss Deep to Shallow 四 效果 论文地址 https arxiv org pdf 2108 09702 pdf 代码地
  • Spingboot 多模块引入第三方jar包

    1 在需要的模块中引入jar包 2 在此模块中的pom xml 中引用 3 要想打包部署服务器 需要在启动模块中添加配置信息 ps 启动模块要引用此模块才能将此一起jar打包部署
  • 开源的虚拟化私有云及云管平台

    免费开源的私有云及云管平台来了 除虚拟化外 还支持纳管主流的 9 大公有云及私有云平台 欢迎大家安装体验 能解决哪些问题 将几台物理服务器虚拟化成一个私有云平台 需要一个紧凑而且功能相对完整的物理机全生命周期管理工具 将 VMware vS
  • bottle 文件服务器,python bottle 框架基础教程:文件上传

    文件上传 需要注意的是前端html的form表单中 要添加 enctype multipart form data 属性 否则无法上传文件 在后端 用request files方法 获取到表单传上来的文件 首先把对象赋值给一个变量名 如up
  • Android开发过程中的一些问题

    1 Can t toast on a thread that has not called Looper prepare 就是Android子线程中不能直接使用Toast显示提示信息的问题 加入Looper prepare 和Looper
  • java static 静态方法的使用 注意事项

    定义为 static function1 function1 中不能引用this或super 在android 中这样用的话 会出现以下的报错 W dalvikvm 2783 JNI WARNING instance fieldID 0x5
  • DC-6靶机渗透测试

    文章目录 DC 6靶机渗透测试 方式一 1 信息收集 1 1 主机扫描 1 2 端口扫描 1 3 目录扫描 2 暴力破解 3 漏洞利用 4 提权 方式二 1 漏洞利用 方式三 1 漏洞利用 方式四 1 漏洞利用 DC 6靶机渗透测试 方式一
  • MySQL 数据库————连接查询

    目录 一 多表连接查询 1 内连接 inner join 2 左连接 left join 3 右连接 right join 二 存储过程 1 简介 2 优点 3 语法 参数分类 带参数的存储过程 修改存储过程 删除存储过程 一 多表连接查询