MySQL学习笔记(十)内外连接及多表连接

【MySQL】复合查询+表的内外连接 可以看我们目前有什么,目前我们有部门号和部门平均工资,在我看来这就是一张表,然后我手里还有一张员工表,所以是不是可以把两张表做笛卡尔积,做完之后每个员工它所在那个部门已经所在部门的平均工资,在新的表中不就有了吗。这个笛卡尔积将两张表的信息做了穷举,可是做完笛卡尔积有些信息是有意义的,有些一看就无意义的的,就如一个员工所属部门它目前并不需要和它不是同一个部门号的平均工资做对比,如果将来需要再说。如果多表查询,我们想让左侧的表完全显示不要过任何过滤筛选,如果和右侧的表配不上,让右侧的都为空也可以。 阅读详情

1. 内外连接的区别

(1) 内连接:显示左表及右表符合连接条件的记录

SELECT goods_id,goods_name,cate_name FROM tdb_goods INNER JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id;
只会显示23条记录,而缺少了一条记录,因为商品表中cates_id为12的表与种类表不符合连接条件。


(2) 左外连接:显示左表的全部记录及右表符合连接条件的记录。

//可以看出有第24条记录,但是其cate_id为NULL

SELECT goods_id,goods_name,cate_name FROM tdb_goods LEFT JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id;

(3) 右外连接:显示右表的全部记录及左表符合连接条件的记录

SELECT goods_id,goods_name,cate_name FROM tdb_goods RIGHT JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id;

2. 多表连接

SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS g

INNER JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_id

INNER JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;

3. 连接的几点说明

外联接:A LEFT JOIN B join_condition

       数据表B的结果依赖数据表A。数据表A的结果集根据左连接条件所依赖所有数据表(B表除外)。左连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)。如果数据表A的某条记录符合WHERE调价,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。

        如果在使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试以下操作:col_name IS NULL时,如果col_name被定义为NOT NULL,MySQL将在找到符合连接条件的记录后停止搜索更多的行。

4. 无限级分类表设计

自身连接:同一个数据表对其自身进行连接。

//创建商品种类表,第三个字段存储表自身的type_id字段

CREATE TABLE tdb_goods_types(
     type_id   SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     type_name VARCHAR(20) NOT NULL,
     parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0
  );

//插入记录

INSERT tdb_goods_types(type_name,parent_id) VALUES('家用电器',DEFAULT);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑、办公',DEFAULT);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('大家电',1);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('生活电器',1);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('平板电视',3);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('空调',3);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('电风扇',4);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('饮水机',4);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑整机',2);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑配件',2);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('笔记本',9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('超级本',9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('游戏本',9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('CPU',10);
  INSERT tdb_goods_types(type_name,parent_id) VALUES('主机',10);

//显示种类表中的记录

SELECT * FROM tdb_goods_types;

//现在想要查找表中子类的父类,如子类大家电和生活电器的父类时家用电器,以此类推

//需要用到自身连接

SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;

//同样也可以查到父类下的子类

SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON p.type_id = s.parent_id;

//现在想要获取父类下子类的个数,因此需要对父类进行分类

SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON p.type_id = s.parent_id GROUP BY p.type_name ORDER BY p.type_id;

SELECT p.type_id,p.type_name,COUNT(s.type_name) AS child_type  FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON p.type_id = s.parent_id GROUP BY p.type_name ORDER BY p.type_id;



Linux安装消息队列IBM MQ 7.5开发版安装配置详解 消息队列IBM MQ 7.5开发版安装配置详解 文章目录消息队列IBM MQ 7.5开发版安装配置详解前言一、什么是IBM MQ?二、安装前准备1、安装前准备2、安装MQ Server3、启动实例4、创建队列一个名为TEXT的队列(测试)5、启动端口监听6、启动成功总结 前言 IBM 已经熟练地优化了 MQ(消息队列),在市场上已有超过 25 年的历史。借助 MQ(消息队列),如果无法立即传递消息,那么会在其等待队列中确保消息安全,直到保证传递为止。竞争产品可能会传递两次消息或根本不传递消息,而 M 阅读详情

相关推荐

【100%通过率】华为OD机试真题 JavaScript 实现【对称美学】【2023 Q1 | 100分】

对称就是最大的美学,现有一道关于对称字符串的美学。 已知: 第1个字符串:R 第2个字符串:BR 第3个字符串:RBBR 第4个字符串:BRRBRBBR 第5个字符串:RBBRBRRBBRRBRBBR相信你已经发现规律了,没错! 就是第i个字符串=第i-1号字符串的取反+第i-1号字符串。取反即(R->B,B->R); 现在告诉你n和k,让你求得第n个字符串的第k个字符是多少。(k的编号从0开始)

MISAYAONE的博客 9850

规范的建表语句

CREATETABLEstudent_info(`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',`stu_name` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '姓名',`stu_class` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '班级',`stu_num` INT NOT NULL DEFAULT '0' COMMENT '学号',`stu_score` SMALL...

风暴计划 598

Windows环境下QGIS完整编译指南(从环境搭建到问题解决)

本文详细介绍了在Windows 11系统下编译QGIS 3.40.12版本的完整流程。主要内容包括:前期准备工作(系统要求、工具清单)、环境搭建(Visual Studio 2026、OSGeo4W、Qt Creator的安装配置)、以及详细的CMake参数设置。特别强调了依赖管理的重要性,并提供了解决常见编译错误的方案。该指南适用于GIS二次开发、QGIS功能定制和源码学习等场景,通过OSGeo4W工具简化了复杂的依赖管理过程,确保编译过程的可重复性。

LuckyHanMo的博客 1333

mysql 语句中 unsigned NOT NULL auto_increment 和 NOT NULL default ''

例: CREATE TABLE TABLE_1 ( ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, // ID列为无符号整型,该列值不可以为空,并不可以重复,而且自增。 NAME VARCHAR(5) NOT NULL default '' ) AUTO_INCREMENT = 100;(ID列从100开始自增) PRIMAPY是主键的意思...

BeautifulApple的博客 2万+

[QMT量化交易小白入门]-十二、QMT回测龙头打首板和连板的策略

class a():passA = a() #创建空的类的实例 用来保存委托状态field_list定义了需要的市场数据字段,而类a用于保存交易状态。

木头大左的博客 4757

ESD防护设计宝典(二十三):ESD与EOS失效差异分析

ESD和EOS是电子制造业面临的两大挑战,随着电子产品向更高集成度、更低工作电压和更高工作频率发展,这一问题将更加突出。根据美国军方上世纪八十年代与可靠性分析中心(RAC)共同建立的现场失效返回程序(FFRP)统计数据,产品现场返回中EOS占比高达46%,而ESD仅占6%,另有6%的案例难以区分是EOS还是ESD。

m0_56451176的博客 321

修复DISCUZ!的pre_connect_feedlog等表不存在错误

执行如下语句即可:   DROP TABLE IF EXISTS pre_connect_feedlog; CREATE TABLE pre_connect_feedlog ( flid mediumint(8) unsigned NOT NULL AUTO_INCREMENT, tid mediumint(8) unsigned NOT NULL DEFAULT '0', u

harryxlb的专栏 736

什么是华为OD?怎么才能通过华为OD机试?华为OD机试怎么刷题?(2024最新华为OD机试E卷更新中)

华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多数是OD招聘。OD模式也是华为提出的一种新的用工形式,每年都会从OD项目挑优秀员工转为正编。所有OD和正式员工一样对待,没有差别,部门平时开会、评审等活动都是一起参加的,是同薪同酬,都是由华为的HR直接定的薪资,看的是我们技术能力。华为是大企业,能到华为上班也是有能力的,每个部门都有好多职位,是金子,在哪都会发光。

KJ.JK 11万+

default 0 与 default '0'

以下两行sql数据有什么区别呢? alter table `test_table` add `filed3` int(10) unsigned not null default 0 after `field2`; alter table `test_table` add `filed3` int(10) unsigned not null default '0' after `field2...

Ftworld21的专栏 2836

【RT-DETR涨点改进】全网独家创新、细节涨点改进篇 | ICML 2024 | RT-DETR引入ICB交互式卷积模块和ASB自适应频谱模块,助力目标检测、异常检测有效涨点、含多种创新改进点

RT-DETR目标检测模型通过引入ICB和ASB模块实现性能提升。ICB模块采用多尺度卷积交互,有效捕获局部和长程依赖特征;ASB模块通过自适应频域滤波优化特征表示,降低噪声干扰。两者结合使模型在复杂场景中表现更优,显著提升检测精度和鲁棒性。文章详细介绍了模块原理、代码实现及配置方法,并提供了8种改进版本的YAML配置文件,适用于不同网络结构。这些创新改进为RT-DETR模型提供了高效涨点方案,特别适合复杂背景和高噪声环境下的目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 211

基于opencv人脸识别实现课堂抬头率检测系统 完整代码 可直接运行 作为毕设

基于opencv人脸识别实现课堂抬头率检测系统 完整代码 可直接运行 作为毕设

机器学习深度学习业余选手 1146

商品模块数据库设计

1创建数据库 create database shopcz charset utf8; 2选择数据库 use shopcz; 商品模块创建商品类别表 create table cz_category(     cat_id smallint unsigned not null auto_increment primary key comment '商品类别ID',     cat_name v...

baidu_36681154的博客 2802

ImportError: cannot import name ‘is_torch_npu_available‘ from ‘transformers.utils‘解决方案

本文主要介绍了ImportError: cannot import name ‘is_torch_npu_available’ from 'transformers.utils’解决方案,希望能对使用transformers的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

【MySQL】表的内外连接和视图

子句对两种表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。如果联合查询,左侧的表完全显示,我们就称作是左外连接。如果联合查询,右侧的表完全显示我们就说是右外连接。外连接分为左外连接和右外连接。表的连接分为内连和外连。

YoungMLet的博客 2597

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL内外连接

表的连接分为内连接和外连接,外连接分为左外连接和右外连接。

2021dragon的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Mysql 多表连接查询

本文部分内容转载至:Mysql 多表查询详解,同时感谢原作者的整理与创作;

坑货行不行的博客 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL JOIN :多表连接的艺术

关系型数据库的核心价值在于数据之间的关联,MySQL 的 JOIN 操作是实现这种关联的关键技术。本文将深入解析各种 JOIN 类型的原理、应用场景和性能优化策略,帮助开发者掌握高效的多表查询技术。各种JOIN类型的原理和适用场景复杂多表连接的实现技巧性能优化策略和执行计划分析实际业务中的经典应用案例最佳实践和常见问题解决方案设计高效的关联查询解决复杂的数据关系问题优化JOIN查询性能避免常见的连接使用误区使用EXPLAIN分析JOIN执行计划为连接条件创建合适的索引。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 2万+

【MySQL】表的内外连接

💬 hello!各位铁子们大家好哇。今日更新了MySQL表的内外连接的内容。

qinjh_的博客 2516

【MySQL数据库学习】(MySQL表的内外连接)

这篇文章深入讲解了MySQL中的表连接操作,重点分析了内连接和外连接的区别及适用场景。文章首先介绍了内连接(INNER JOIN),它仅返回两张表中匹配成功的记录,并通过用户表和订单表的示例说明其用法。接着详细讲解了外连接的两种类型:左外连接(LEFT JOIN)保留左表所有数据,右表无匹配则显示NULL;右外连接(RIGHT JOIN)保留右表所有数据,左表无匹配则显示NULL。通过学生成绩表等案例演示了外连接的实际应用。最后总结内连接与外连接的核心差异,并提供了LeetCode分数排名题的SQL解法。

承于所学,探技术之渊;以代码求政,寻成长之道。 5223

MySQL之内外连接

MySQL之内外连接

qq_64034271的博客 1308

【MySQL】多表查询、子查询、内外连接

这篇博客系统讲解MySQL多表查询的核心知识。从数据分表的必要性讲起,生动解析笛卡尔积概念,详细阐述等值连接与非等值连接的原理。深入探讨子查询的多种应用场景,并重点剖析内外连接的本质区别,通过具体案例清晰展示内连接、左外连接、右外连接的不同效果,帮助读者彻底掌握多表查询的精髓。

2301_81073406的博客 934

Mysql的多表连接

Mysql 多表连接查询 inner join 和 outer join 的使用 JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。这里描述先甩出一张用烂了的图,然后插入测试数据。 首先先列举本篇用到的分类(内连接,外连接,交叉连接)和连接方法(如下): A)内连接:join,inner join B)外连接:left join,left outer join,right join,right outer join,union C

javayxc的博客 8893

【MySQL】多表连接查询

多表连接查询是关系型数据库中最重要的特性之一,它允许我们从多个相关表中检索数据,将它们按照指定的关系组合在一起显示。MySQL支持多种连接类型,使开发者能够灵活地进行数据检索和分析。

Guiat的博客 2025

MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合

前言:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:以上关系就是E-R图中的‘1’ 和 ‘n’ / ‘*’含义案例:部门与员工的关系关系:一个部门对应多个员工,一个员工对应一个部门实现:在多的一方建立外键,关联另一方的主键案例:学生与课程的关系关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键案例:用户与用户详细的关

羊小猪~~的博客 1986

MySQL的多表连接

多表连接(JOIN)是关系型数据库中组合多个表数据的核心操作。理解连接类型、优化策略和底层原理,是处理复杂查询的关键。以下从基础概念、连接类型、性能优化和实战案例四个方面详细解析。

weixin_61718800的博客 1736

MySQL 表的内外连接

对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来。select 字段 from 表名1 right join 表名2 on 连接条件;select * from 表名1 left join 表名2 on 连接条件。查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来。左外连接,左侧表的数据完全保留,右侧如果没有数据,对应的右侧就全为空。右外连接,右侧表的数据完全保留,左侧如果没有数据,对应的左侧就全为空。显示SMITH的名字和部门名称。

的博客 896
上一篇: MySQL学习笔记(九)多表更新
下一篇: MySQL学习笔记(十一)多表删除
mengrennwpu
博客等级 码龄15年 262粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengrennwpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值