MySQL进阶学习笔记二(包括连接查询、子查询、联合查询、事务、存储过程)

【MySQL】多表查询 上一篇介绍了外键约束,外键约束是用于连接两张数据表的,所以在此基础上就有了多表查询之前的查询都是单表查询,这里我们会将多个数据表的数据结果返回在一张表上。 阅读详情

1、高级查询

(1)了解笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员,笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一-行数据任意组合。

(2) 关联查询(连接查询)

      (a)内连接:内连接与连接顺序无关

         关联表中都出现的字段值最终才能出现再结果集中

SELECT * FROM app_order_base a,app_order_details b WHERE a.id=b.goods_id
SELECT * FROM app_order_base a INNER JOIN app_order_details b on a.id=b.goods_id
#通用列字段名称必须一致,可以去掉重复字段
SELECT * FROM app_order_base a INNER JOIN app_order_details USING(id)  

      (b)外连接:有主从表之分,与连接顺序有关

         依次遍历主表中记录,与从表中记录进行匹配;如果匹配到则连接展 示,否则以null填充。

         左外连接:left[outer] join on

SELECT * FROM app_order_base a LEFT JOIN app_order_details b on a.id=b.goods_id

         右外连接:right[outer] join on

SELECT * FROM app_order_base a RIGHT JOIN app_order_details b on a.id=b.goods_id

         自然连接(特殊连接):

         自然连接肯定是等值连接,但是等值连接不一定是自然连接

SELECT * FROM app_order_base NATURAL JOIN app_order_details;

         查看数据库编码

#查看数据库编码 
SHOW VARIABLES LIKE '%char%'

(3)子查询(嵌套查询):

         嵌套查询:将一个查询的结果当作另一个查询的条件或者结果集。

         子查询比较接近思考方式,最自然的查询。

     分类

         (a)单行子查询:子查询的结果有一条

         (b)多行子查询:子查询的结果有多条

in:   in(value,value)
any:  =any 相当于in   
      >any 大于最小值  
      <any 小于最大值
all: >all 大于最大值
      <all 小于最小值
#in和exists的区别:
   in 先执行子查询,将结果返回给主查询,主查询继续执行
   exists 先执行主查询,将主查询的值依次在子查询中进行匹配,根据是否匹配返回true和false,如果是true值连接展示,否则不展示
#多表和子查询
   子查询 --->查询条件和结果放在一张表中。
          查询结果分布于多张表
   关联查询

(4)联合查询:

     关键字:union/union all union可以去除重复

2、存储引擎和事务

(1)存储引擎(show ENGINES):数据库底层软件组织,dbms通过存储引擎实现对数据的操作,MySQL核心就是存储引擎。

        MySQL中可以设置多种存储引擎,不同的存储引擎在索引,存储,以及策略上是不同的。

        数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、素引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。Mysql 的核心就是存储引擎。

        InnoDB是事务型数据库的首选,执行安全性数据库,行锁定和外键。mysql5.5 之后默认使用。

        MyISAM插入速度和查询效率较高,但不支持事务。

        MEMORY将表中的数据存储在内存中,速度较快。

各个存储引擎的不同之处:

功能

MyISAM

MEMORY

InnoDB

Archive

存储限制

256TB

RAM

64TB

None

支持事务

N

N

Y

N

支持全文索引

Y

N

N

N

支持数索引

Y

Y

Y

N

支持哈希索引

N

Y

N

N

支持数据缓存

N

N/A

Y

N

支持外键

N

N

Y

N

       mysql5.5以前默认存储引擎为MyISAM:支持全文搜索,不支持事务。

       mysql5.5+默认存储引擎为INNODB:支持事务、行级锁。

(2)事务:保持数据一致性,一组DML操作要么同时成功,要么同时失败。

 (a)事务的acid特性:

        原子性:放在同一事务的一组操作时不可分割的;

        一致性:在事务的执行前后整体的状态保持不变;

        隔离性:并发事务之间相互不干扰;

        持久性:事务执行之后将永久化到数据库;

    (b) 事务语法(数据库中):MySQL默认采用事务自动提交。

#查看MySQL的事务自动提交
show variables like 'autocommit'
#修改自动提交
set autocommit = 0;  #手动提交事务
set autocommit = 1;  #自动提交事务
#显示开启事务(begin):
start transaction;
#手动提交事务或回滚
commit; #提交
rollback #回滚  

  (c)并发事务产生的问题

        脏读:一个事务执行范围内读到了另一条未提交的数据;

        不可重复读:一个事务在只读范围内,被另一事务修改并提交事务,导致多次读取事务不一致的问题。

        幻读(虚读):一个事务只读范围内,被另一事务删除或者添加数据,导致读取数据不一致问题。

(d)事务隔离级别:

        读未提交:不能处理任何问题;

        读已提交:解决脏读问题;

        可重复读:解决脏读和不可重复读问题;

        串行化:解决所有问题,效率较低;

#查看事务隔离级别
SELECT @@tx_isolation
#修改事务隔离级别
set session transaction isolation level

3、存储程序

(1)、运行于服务器端程序

(2)、优点:

     简化开发,执行效率较高,

(3)缺点:

     程序保存在服务器端,占用服务器资源

     数据迁移的时候考虑迁移所有的存储程序

     调试编写程序不方便

(4)、分类

     存储过程:服务器端运行的可重复调用的sql代码块,包含名称,输入输出参数,一组sql。

#修改结束标志
delimiter //;
#创建存储过程
create procedure sel_emp()
begin
 #sql
 select * from student;
end;

#存储过程调用
call sel_emp();

#参数的传入
delimiter //;
create procedure findEmpByNo(in eno int)
begin
selete * from emp where deptno = dno;
end;
call findEmpByNo(20);

#参数的输出
delimiter //;
create procedure findNameByNo(in eno int,out v_name varchar(20))
begin
  select ename into v_name from emp where empno = eno;
end;
call findNameByNo(7788,@v_name);
select @v_name;

        存储函数:存储在服务器端,有返回值,函数作为sql一部分使用。

delimiter //;
create function findNameByNo(eno int)
returns varchar(20) #返回值类型
DETERMINISTIC #确定的
begin
  declare v_name varchar(20);#与上边定义的一致
  select ename from where empon=eno;
  return v_name;
end;
#调用
select findNameByNo(7788);

函数和存储过程的区别:

关键字不同 
存储过程三种参数模式实现数据输入输出,函数有返回值返回数据 
存储过程可以作为单独个体执行,函数只能作为sql的一部分执行

触发器

存储程序,存储再服务器端
由事件(增删改)调用,不能传参
不要添加过多的触发器(降低效率)
存储程序中不能使用事务控制

#创建触发器
delimiter //;
create trigger tri_user
after delete
on userinfo for each row
begin
  #old  new 
  insert into user_bak values(old.uid,old.uname,old.password)
end;

4、清除表中数据的方式:

(1)、清空全部数据,不写日志,不可恢复,速度很快

   truncate table 表名;·

(2)、清空全部数据,写日志,可恢复,速度很慢

   delete from 表名;

 

 

《黑马程序员MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化》学习笔记总目录 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化》所有知识点的笔记进行总结分类。学习时总结的目录笔记以及。和实训,将在后续更新。第一章:MySQL概述。 阅读详情

相关推荐

ubuntu18.04安装xenomai3.1(百分百成功版)

ubuntu18.04安装xenomai3.1(百分百成功版),保姆级教学!!!

h542812556sdu的博客 2064

mysql

step1. /etc/init.d/mysqld restart step2. alter table tb1 add mycol INTEGER UNSIGNED;查询数据库中的存储过程和函数方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE...

abc1104332737的博客 201

Visual Tracker Benchamark傻瓜式教程(二)

问题  1 1  在调用main.m跑TRE和SRE时,因为会生成相应的.mat数据文件,如果跑完以后发现自己算法生成的.mat文件有问题,那么要把该文件删除,待找到错误原因后,重新生成相应的.mat文件。因为程序中写的是如果已经存在了.mat文件,例如已经存在car4_STC.mat文件,即使该文件中的数据有错误,但是重新跑时会默认该文件中的数据写完,不会重新写入数据 问题  2  b

mingbujingren的专栏 9928

存储过程中如何实现子查询

在一般查询语句中,子查询是很好实现的,比如:select * from tb_user where user_name in (aaa,bbb,ccc)。但是在存储过程如何实现这一点,一开始倒是难住了我,后来经过google和baidu,终于搞定了,怕自己忘记,所以特地记录一下,呵呵,年纪大了,好记性不如烂笔头啊,当然现在是靠keyboard敲出来的,结果都是一样的。Exampl

小肥的专栏 3271

eDP接口信号组成认识

eDP接口信号主要由Main Link、AUXCH与HPD三部分组成,如下图所示。 Main Link:表示主通道,用来传输各类型视频数据和音频数据; AUX CH:表示辅助通道,用于传输低带宽需求的数据,以及链路管理和设备控制信号; HPD:表示热插拔检测通道。 Main Link南1~4对数据线组成,每对数据线都是一对差分线。对于一款液晶屏而言,Main Link具体需几对数据线,这取决于屏幕的分辨率和彩色位数。 在该通道中传送的信号有视频像素信号、视频定时信号、视频格式信号、比特/像素及

精诚所至 2万+

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

关联子查询+嵌套子查询

关联子查询 定义 1引用外部的一列或多列 2将外部查询的每一行都传递给子查询,子查询依次读取传递过来的每一行的值,并将其使用到子查询上,直到外部查询的所有行都处理完为止,然后返回子查询的结果获取员工工资低于所在部门的平均工资的员工信息 select empno,ename,sal,deptno from emp out where sal <( select avg(sal) from

zhou920786312的博客 1万+

地平线旭日X3 安装xfce桌面+VNC查看USB摄像头

VNC是Virtual Network Computing的缩写,它是一种使用RFB(Remote Frame Buffer)协议的用于控制远程电脑的图形桌面分享系统。xfce桌面相比于GNOME桌面更加轻量,占用的资源更少,在没有GPU的设备上也可以运行(旭日的Desktop版本从外观上好像就是xfce桌面,具体没有尝试)。可以使用专用的VNC客户端连接到开发板,例如vnc viewer。板子默认带有openssh-server,因此,WiFi热点连接成功后,就可以使用ssh登录开发板了。

bingdund的博客 509

Axure RP9授权码(亲测有效)

注意:此文仅供学习与交流,于2020-07-12 Axure RP 9.0.0.3687 正式版(目前最新版) Licensee :Freecrackdownload.com KEY:5vYpJgQZ431X/G5kp6jpOO8Vi3TySCBnAslTcNcKkszfPH7jaM4eKM8CrALBcEC1 Axure RP 9.0.0.3686 正式版 Licensee : yygg329405 KEY: QmNyZyXeMrJU+1yw6XiXZGenOs9R3wV7S+KS7K90yTk= Axu

gaofubo的博客 6万+

【全局路径规划模块全覆盖算法】(三)代码实现:Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 1833

Dify平台隐患url:/console/api/remote-files/upload暴露高危漏洞,配置nginx htpasswd模块认证机制屏蔽解决

内部网络探测: 攻击者可通过SSRF扫描内网服务云元数据访问: 可能访问AWS/Aliyun/腾讯云等元数据服务服务端请求伪造: 以服务器身份发起任意HTTP请求。

CN_Eden 1318

mysql查询联合查询_mysql联合查询

有一个前提很重要 就是两个表中的对应字段应该是建立联合关系且该键应唯一在查找该联合建的时候要指明 表.字段1. select * from表A,表A子表where表A.FileCode =表A子表.FileCodeand表A.IDin(select表A子表.IDfrom表A子表 whereVc_Code = '1190' AND Vc_Num ='111300' AND Er_Num ='0101...

weixin_42411545的博客 828

AI智算-K8s+vLLM & Ray:DeepSeek-r1 671B 满血版分布式推理部署实践

自从上次发布 【AI-智算】K8s+SGLang实战:DeepSeek-r1:671b满血版多机多卡私有化部署全攻略] 文章后,本次将演示另一个主流推理引擎工具——vLLM,结合K8s、LWS、Ray、Volcano等技术栈,部署DeepSeek-r1 671b 满血版分布式推理集群,并对比其与SGLang推理引擎的性能表现。

Kason_iWiki 1825

mysql 事b务 查询_MySQL进阶学习笔记二(包括连接查询、子查询、联合查询、事务、存储过程)...

1、高级查询(1)了解笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员,笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一-行数据任意组合。(2) 关联...

weixin_39783426的博客 121

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

尚硅谷MySQL基础学习笔记

数据库MySQL学习笔记 文章目录写在前面MySQL引入数据库的好处数据库的相关概念数据库存储数据的特点MySQL服务的启动和停止MySQL服务端的登录和退出MySQL的常用命令MySQL语法规范DQL(Data Query Language)数据查询语言1. 基础查询2. 条件查询3. 排序查询4. 常见函数单行函数分组函数5. 分组查询6. 连接查询7. 子查询where或having后面标量...

李英俊小朋友 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MySQL之DQL——查询语言

全网最全MySQL查询语言介绍,你确定不来看看嘛

秋雨绵绵 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)

本文主要介绍了MySQL中的多表查询和事务相关知识。在多表查询部分,详细讲解了三种表关系(一对多、多对多、一对一)的实现方式,以及内连接、外连接、自连接、联合查询等查询方法。特别对子查询进行了重点说明,包括标量子查询、列子查询等不同形式,并提供了相应的SQL示例。文章通过具体案例演示了如何在实际查询中应用这些技术,如查询特定部门员工、联合查询不同条件结果等。内容涵盖了多表查询的核心概念和常用操作,为数据库查询提供了实用指导。

2401_87144364的博客 1002

MySQL的多表查询与事务

关于MySQL的多表查询和事务的笔记

上山的月的博客 1034

MySQL 多表查询、事务

事务是一组操作的集合,这组操作必须全部成功或者全部失败。比如银行转账的步骤:A账户扣钱,B账户加钱 这两步操作必须全部成功或者失败,不能单独某一步成功或失败。

2201_75347713的博客 993

mysql联合查询、子查询、多表查询、索引、视图、事务

MySql 1.union联合查询 将多个select语句的结果纵向组合 select * from stuinfo union select * from stuinfoo; union: 1.all #显示全部记录 2.distinct #(去除重复的值 他是默认) select * from stuinfo union all select * from stuinfoo; 查...

iplaypy(蟒蛇师) 484

MySQL笔记-多表查询

自连接,外连接,联合查询,嵌套查询,子查询,事务四大特性,并发事务问题,事务隔离级别

2201_75533641的博客 6112

MYSQL子查询和多表联合查询

MYSQL子查询和多表连接查询 子查询:sql里面嵌套sql SELECT id,name FROM student WHERE id=(SELECT stu_id FROM score WHERE c_name='计算机' AND grade=70); IN 后面可以赋多个值,用括号 中文系的学生信息 SELECT * FROM student WHERE id IN (SELECT stu_id FROM score WHERE c_name='中文') NOT IN SELECT *

patmos 1077

Mysql数据库、事务,联合查询,连接查询,子查询,备份与恢复

在一个事务的处理当中有很多个要执行的操作,有些步骤是依赖其中某一个步骤,前面部分操作已经正确,只是后面某个地方出现了错误,不希望事务重新来过,就应该是出错之前设置一个点,以便后面出错了之后回到该点继续执行。在mysql中,因为select语句可以没有数据源直接工作,mysql为了保证SQL语句的结构的完整性,系统提供了一个虚拟表:dual,如果没有数据源的select语句,可以使用from dual。事务操作需要区分不同的操作语句,通过开启事务,然后在一个事务中进行多条SQL语句的操作,然后进行事务关闭。

2601_95438532的博客 649

MySQL数据库进阶篇

mysql函数 查询 约束 事务

米粉er的博客 1万+

MySQL多表查询和事务

MySQL多表查询和事务项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:CREATE TABLE student_course ( id INT AUTO_INCREMENT COMMENT '主键' PRIMARY KEY, studentid INT NOT NULL COMMENT '学生ID', courseid INT NOT NULL COMMENT '课程ID

weixin_49668551的博客 1392

Day02-DDL&DML&DQL(定义,操作,查询)(联合查询,子查询,字符集和校对集,MySQL5.7乱码问题)

如果EXISTS关键字后面的参数是一个关联子查询,即子查询的WHERE条件中包含与外层查询表的关联条件,那么此时将对外层查询表做循环,即在筛选外层查询表的每一条记录时,都看这条记录是否满足子查询的条件,如果满足就再用外层查询的其他WHERE条件对该记录进行筛选,否则就丢弃这行记录。关联查询也被称为多表联合查询,指的是两个或更多个表一起查询。为了保证语句的完整性,SQL提供了一个dual虚拟表,这个表是不存在的,它里面也没有任何的字段,存在的意义就是为了让那些不支持单独使用select的SQL语句不报错。

小丁的博客 1408
上一篇: SpringBoot项目实现微信公众号模板消息推送
下一篇: MySQL进阶学习笔记三(包括视图、索引、数据库优化)
King-Java
博客等级 码龄8年 30粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值