MySQL学习笔记14

MySQL查询之多表查询:(了解)但是还是要掌握比较好。

1、什么是多表查询?

查询五子句是单表查询,实际工作中,也可能会接触到一个复杂的多表查询。

2、Union 联合查询:

union联合查询的作用,是把多个表中的数据联合在一起进行显示。应用场景:分库分表。

存储了1000万条数据,查询比较慢,我们会把表分割开,创建两个到三个相同的数据表,把数据平均分配到这些表中,查询的时候将这几个表联合在一起。大型项目会涉及到分库分表。

第一步:创建两个结构相同的学生表tb_student1和tb_student2;

操作演示:

mysql> create table tb_student1(-> id mediumint not null auto_increment,-> name varchar(20),-> age tinyint unsigned default 0,-> gender enum('男','女'),-> subject enum('ui','java','yunwei','python'),-> primary key(id)-> ) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)mysql>
mysql> create table tb_student2(-> id mediumint not null auto_increment,-> name varchar(20),-> age tinyint unsigned default 0,-> gender enum('男','女'),-> subject enum('ui','java','yunwei','python'),-> primary key(id)-> ) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)mysql>
mysql>
mysql> insert into tb_student1 values (1,'悟空',255,'男','ui');
Query OK, 1 row affected (0.00 sec)mysql> insert into tb_student2 values (2,'唐僧',30,'男','yunwei');
Query OK, 1 row affected (0.00 sec)mysql>
mysql> select * from tb_student1;
+----+--------+------+--------+---------+
| id | name   | age  | gender | subject |
+----+--------+------+--------+---------+
|  1 | 悟空   |  255 | 男     | ui      |
+----+--------+------+--------+---------+
1 row in set (0.00 sec)mysql> select * from tb_student2;
+----+--------+------+--------+---------+
| id | name   | age  | gender | subject |
+----+--------+------+--------+---------+
|  2 | 唐僧   |   30 | 男     | yunwei  |
+----+--------+------+--------+---------+
1 row in set (0.00 sec)mysql>
mysql> select * from tb_student1 union select * from tb_student2;
+----+--------+------+--------+---------+
| id | name   | age  | gender | subject |
+----+--------+------+--------+---------+
|  1 | 悟空   |  255 | 男     | ui      |
|  2 | 唐僧   |   30 | 男     | yunwei  |
+----+--------+------+--------+---------+
2 rows in set (0.00 sec)

 交叉查询:(了解)

基本语法:

mysql> select */字段列表 from 数据表1,数据表2;
或
mysql> select */字段列表 from 数据表1 cross join 数据表2;

运行结果:

字段总数 = 数据表1的字段 + 数据表2的字段

总记录数 = 数据表1的记录数 * 数据表2的记录数 => (笛卡尔积)

准备两张数据表:产品分类表tb_category和产品信息表tb_goods。

mysql> create table tb_category(-> id smallint not null auto_increment,-> name varchar(20),-> pid smallint default 0,-> primary key(id)-> ) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.01 sec)mysql> create table tb_goods(-> id int not null auto_increment,-> title varchar(80),-> price decimal(11,2),-> cid smallint default 0,-> primary key(id)-> ) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.02 sec)mysql> insert into tb_category values (null,'手机',0);
Query OK, 1 row affected (0.00 sec)mysql> insert into tb_category values(null,'电脑',0);
Query OK, 1 row affected (0.00 sec)mysql> insert into tb_category values (null,'游戏手机',1);
Query OK, 1 row affected (0.00 sec)mysql> insert into tb_goods values (null,'IPhone 11',5699.00,1);
Query OK, 1 row affected (0.00 sec)mysql> insert into tb_goods values (null,'MI 10',4699.00,1);
Query OK, 1 row affected (0.02 sec)mysql> insert into tb_goods values (null,'ThinkPad X1',9999.00,2);
Query OK, 1 row affected (0.01 sec)mysql> insert into tb_goods values (null,'Nike air',999.00,10);
Query OK, 1 row affected (0.00 sec)

说明:

pid代表所属的父级类别,如果自己就是顶级分类,则为0

cid代表产品的所属分类编号,与tb_category表要一一对应

案例:把分类表和产品表进行交叉,求结果:

mysql> select * from tb_category cross join tb_goods;
+----+--------------+------+----+-------------+---------+------+
| id | name         | pid  | id | title       | price   | cid  |
+----+--------------+------+----+-------------+---------+------+
|  1 | 手机         |    0 |  1 | IPhone 11   | 5699.00 |    1 |
|  2 | 电脑         |    0 |  1 | IPhone 11   | 5699.00 |    1 |
|  3 | 游戏手机     |    1 |  1 | IPhone 11   | 5699.00 |    1 |
|  1 | 手机         |    0 |  2 | MI 10       | 4699.00 |    1 |
|  2 | 电脑         |    0 |  2 | MI 10       | 4699.00 |    1 |
|  3 | 游戏手机     |    1 |  2 | MI 10       | 4699.00 |    1 |
|  1 | 手机         |    0 |  3 | ThinkPad X1 | 9999.00 |    2 |
|  2 | 电脑         |    0 |  3 | ThinkPad X1 | 9999.00 |    2 |
|  3 | 游戏手机     |    1 |  3 | ThinkPad X1 | 9999.00 |    2 |
|  1 | 手机         |    0 |  4 | Nike air    |  999.00 |   10 |
|  2 | 电脑         |    0 |  4 | Nike air    |  999.00 |   10 |
|  3 | 游戏手机     |    1 |  4 | Nike air    |  999.00 |   10 |
+----+--------------+------+----+-------------+---------+------+
12 rows in set (0.00 sec)

交叉连接本身是没有意义的,其只是强制把两个表甚至多个表进行连接在一起。但是交叉查询中也有正确的结果,所以我们所谓的多表连接只需要在交叉连接的基础上增加一个连接条件,则就是我们想要的结果了。所以交叉查询是多表查询的基础。

仔细查看交叉查询的结果,可以看到有正确的结果,也有错误的结果。我们只要把满足条件的正确的结果拿出来。

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

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

相关文章

ElementUI之首页导航与左侧菜单

目录 一、Mock 1.1 什么是Mock.js 1.2 安装与配置 1.2.1 安装mock.js 1.2.2 引入mock.js 1.3 mock.js使用 1.3.1 定义测试数据文件 1.3.2 mock拦截Ajax请求 1.3.3 界面代码优化 二、总线 2.1 定义 2.2 类型分类 2.3 前期准备 2.4 配置组件与路由关系 2.4.1 配置…

Java8实战-总结35

Java8实战-总结35 重构、测试和调试使用 Lambda 重构面向对象的设计模式工厂模式 测试 Lambda 表达式测试可见 Lambda 函数的行为测试使用 Lambda 的方法的行为将复杂的 Lambda 表达式分到不同的方法高阶函数的测试 重构、测试和调试 使用 Lambda 重构面向对象的设计模式 工厂…

JSON数据获取指南!

在互联网时代,数据是金钱的来源。然而,要从海量的网页中提取需要的数据并不容易。本文将带你了解如何使用Node.js编写简易爬虫程序,帮助你轻松获取并处理JSON数据,让你不再为数据发愁。 一、准备工作 安装Node.js:确保…

如何在控制台打印sql语句

步骤一&#xff1a; log4j2.xml中做以下配置 <logger name"xxx.infrastructure.mysql.mapper"level"debug" additivity"false"><appender-ref ref"Console"/></logger>步骤二&#xff1a;IDEA下载Free Mybatis Plu…

9、JavaSE总结

9、JavaSE总结 9.1 Java语言 9.1.1 MarkDown语法 9.1.2 简单的Dos命令 9.1.3计算机语言发展 9.1.4 Java的诞生 1995年诞生&#xff1a;JavaSE、JavaME、JavaEE 2006年Hadoop大数据系列 9.1.5 JDK、JRE JDK&#xff1a;开发者工具包、配置环境变量&#xff08;配置Java…

Vue Mock.js介绍和使用与首页导航栏左侧菜单搭建

前言&#xff1a; 因为使用Vue开发&#xff0c;组件写的太多&#xff0c;组件与组件之间的传递数据复杂&#xff0c;所以要用到Mock和Bus事件 一&#xff0c;关于Mock 1.1.什么是Mock.js Mock.js是一个模拟数据的生成器&#xff0c;用来帮助前端调试开发、进行前后端的原型分离…

upload-labs靶场未知后缀名解析漏洞

upload-labs靶场未知后缀名解析漏洞 版本影响&#xff1a; phpstudy 版本&#xff1a;5.2.17 ​ 1 环境搭建 1.1 在线靶场下载&#xff0c;解压到phpstudy的www目录下&#xff0c;即可使用 https://github.com/c0ny1/upload-labs1.2 已启动&#xff1a;访问端口9000&…

似然和概率

前言 高斯在处理正态分布的首次提出似然&#xff0c;后来英国物理学家&#xff0c;费歇尔 概率是抛硬币之前&#xff0c;根据环境推断概率 似然则相反&#xff0c;根据结果推论环境 P是关于x的函数&#xff0c;比如x为正面朝上的结果&#xff0c;或者反面朝上的结果&#xf…

数据大爆炸:大数据分析如何改变我们的世界

文章目录 大数据分析的基本概念数据的三个V大数据分析的技术 大数据分析在商业中的应用1. 个性化营销2. 风险管理3. 供应链优化4. 客户服务 大数据分析在医疗保健中的应用1. 疾病预测2. 患者治疗3. 医疗设备监控 大数据分析在科学研究中的应用1. 天文学2. 生物学3. 气象学 大数…

如何搭建自己的gitlab服务器

这里使用Termus工具连接服务器&#xff0c;然后根据步骤走即可&#xff01; 安装 1.配置yum源安装gitlab vim /etc/yum.repos.d/gitlab-ce.repo修改或新增下面配置并保存 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum…

pycharm中配置torch

在控制台cmd中安装好torch后&#xff0c;在pycharm中使用torch&#xff0c;需要进行简单设置即可。 在pycharm中新建一个工程&#xff0c;在file文件中打开setting 在setting中找到project interpreter编译器 找到conda environment的环境配置&#xff0c;设置好相应的目录 新…

2023年蓝帽杯取证复现

案件介绍 2021 年 5 月&#xff0c;公安机关侦破了一起投资理财诈骗类案件&#xff0c;受害人陈昊民向公安机关报案称其在微信上认识一名昵称 为 yang88 的网友&#xff0c;在其诱导下通过一款名为维斯塔斯的 APP &#xff0c;进行投资理财&#xff0c;被诈骗 6 万余万元。接警…

华为OD机考算法题:篮球比赛

目录 题目部分 解读与分析 代码实现 题目部分 题目篮球比赛难度难题目说明篮球(5V5)比赛中&#xff0c;每个球员拥有一个战斗力&#xff0c;每个队伍的所有球员战斗力之和为该队伍的总体战斗力。现有 10 个球员准备分为两队进行训练赛&#xff0c;教练希望 2 个队伍的战斗力…

如何搭建VUE项目开发环境?

搭建Vue.js项目的开发环境通常包括以下主要步骤&#xff1a; 1、安装Node.js和npm&#xff1a; Vue.js项目需要Node.js和npm&#xff08;Node Package Manager&#xff09;作为基础环境。你可以从Node.js官网下载并安装它们&#xff1a;Node.js官网 安装完成后&#xff0c;你…

Java深入理解线程的三大特性

目录 1 CPU缓存导致可见性问题2 线程切换导致原子性问题3 性能优化导致有序性问题4 JMM(Java Memory Model)5 volatile6 synchronized 1 CPU缓存导致可见性问题 线程的三大特性&#xff1a; 可见性&#xff1a;Visibility有序性&#xff1a;Ordering原子性&#xff1a;Atomic…

谈谈最近招人的感受!

最近折腾新的项目&#xff0c;面试了很多实习生小伙伴&#xff0c;我说说我的一些「面试」感受&#xff0c; 虽然是一个老生常谈的话题&#xff0c;但是依然提一下。 准时很重要&#xff1a;提前一点时间&#xff0c;踩个点&#xff0c;别迟到&#xff0c;面试的过程中由于每个…

2023年前端流行什么技术和框架了?

Web前端三大主流框架有React、Vue.js和Angular&#xff0c;由于接触过Vue.js&#xff0c;接下来主讲最新的Vue3.0&#xff01; Vue3.0作为最新版本的Vue.js框架&#xff0c;拥有更强大的性能和更丰富的功能&#xff0c;为低代码开发平台注入了全新的活力。而JNPF快速开发平台作…

Go业务开发常用关注点

本文对实际开发场景中面对高频的场景&#xff0c;总结出来的一些处理方案&#xff0c;希望能对业务开发的同学提供帮助&#xff01; 1. 结构体转换 实际开发中会面对一个相似的数据结构&#xff0c;由于引用不同的包&#xff0c;需要开发转换到对应的结构上&#xff0c;本质上…

浅谈xss

XSS 简介 XSS,全称Cross Site Scripting,即跨站脚本攻击,是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。需要强调的是,XSS不仅…

setTimeout,setInterval,setImmdeiate的区别

setTimeout, setInterval, 和 setImmediate 是 JavaScript 中用于执行异步操作的定时器函数&#xff0c;它们之间有一些重要的区别&#xff1a; 1. setTimeout: - setTimeout 用于在一定的延迟时间后执行一个函数。 - 它接受两个参数&#xff1a;要执行的函数和延迟的毫…