mysql中的数据存储以及连接查询


前言

连接查询

什么是连接查询

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

同字段,进行数据的拼接。
首先,要确定一个主表作为结果集。
然后,将其他表的行有选择性的连接到选定的主表结果集上。
使用较多的连接查询包括:内连接(子查询)、左连接和右连接(外连接)

子查询:内连(单表)

连接查询:外连查询(多表)

内连接

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

语法

SELEcT column name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name ;

创建两个表 内连接查询 查询test3中的a_id和a_name 匹配调键位 test3和test4中相同的字段

select t3.id,t3.name from t3 inner join t5 on t3.name=t5.name;

在这里插入图片描述

内连查询:通过inner join 的方式将两张表指定的相同字段的记录行输出出来内连查询

面试,直接了当的说用inner join就可以

左连接

左连接也可以被称为左外连接,在from子句中使用left join或者left outer join 关键字来表示。
左连接以左侧表为础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,
也就是说匹配左表中的所有行以及右表中符合条件的行。

select * from test3 left join test5 on test3.a_name=test4.b_name;

将test3作为主和test4进行一个对比视图

 select * from t3 left join t5 on t3.name=t5.name;

在这里插入图片描述
输出的结果是两表整合的数据 没有匹配的则显示为null

右连接

右连接也被称为右外连接,在 from 子句中用 right join 或者 right out join 关键字来表示。

右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配

 select * from t3 right join t5 on t3.name=t5.name;
 select * from t5 right join t3 on t5.name=t3.name;

在这里插入图片描述
没有匹配的则显示为null

存储数据

什么是存储数据

前面学习的 MysQL相关知识都是针对一个表或几个表的单条sQL语句,
使用这样的sQL语句虽然可以完成用户的需求,
但在实际的数据库应用中,有些数据库操作可能会非常复杂,
可能会需要多条sQT语句一起去处理才能够完成,
这时候就可以使用存储过程,轻松而高效的去完成这个需求,有点类似shell脚本里的函数

存储数据的意义

  1. 存储过程是一组为了完成特定功能的sQL语句集合。
  2. 存储过程在使用过程中是将常用或者复杂的工作预先使用SL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。
    当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SsgL速度更快、执行效率更高。

存储过程的优点:

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

创建存储过程

DELIMITER @@                                 
##将语句的结束符号从分号;临时改为两个$$(可以自定义)
 
CREATE PROCEDURE Proc ()                    
##创建存储过程,过程名为Proc,不带参数

->BEGIN                                      
##过程体以关键字BEGIN开始

-> select * from store_Info;                 
##过程体语句
 
->END @@                                     
##过程体以关键字END 结束
 



DELIMITER ;                                  
##将语句的结束符号恢复为分号
 
##调用存储过程##
CALL Proc () ;
 
##查看存储过程
##格式:
SHOwCREATE PROCEDURE〔数据库.]存储过程名;      
##查看某个存储过程的具体信息

示例:
在这里插入图片描述
在这里插入图片描述

册除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。

DROP PROCEDURE IF EXISTS Proc2;

在这里插入图片描述

带参数的存储过程

输入参数:in 表示调用者向过程传入值(传入值可以是字面量或变量)

输出参数:out 表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

输入/输出参数:inout ,即表示调用者向过程传入值,又表示过程向调用者传入值(只能是变量)

事务和存储过程有什么区别

事务特性

  • 实际而言,是存储的特性
  • 目的性:事务,视为了保证数据一致性、完整性、原子性和持久性

存储过程的特性

  • 存储过程中,可以包含事务(具体的存储引擎,因为myisam不支持事务)
  • 存储过程的目的:简化复杂性操作、减小数据库资源消耗、可以同过传参方便、灵活的进行SQL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值