数据库基础--MySQL多表查询之联表查询

联表查询

定义:多张表联合在一起查询,例如学生信息与学生班级表、部门与员工表

创建两张表,主表与从表

CREATE TABLE `TestMain`(
	`id` INT Not NULL AUTO_INCREMENT,
	 `name`VARCHAR(10),
	  `introduction` VARCHAR(255),
		PRIMARY KEY(`id`)
);
CREATE TABLE `Test`(
	`id` INT Not NULL AUTO_INCREMENT,
	 `name`VARCHAR(10),
	  `introduction` VARCHAR(255),
		`age` INT(3) DEFAULT '3',
		testid INT NOT NULL,
		PRIMARY KEY(`id`),
		CONSTRAINT TEST_ID FOREIGN KEY (testid) REFERENCES TestMain(id)
);

交叉连接查询

语法定义:SELECT * FROM 表名1,表名2 

运行结果:

缺陷:会产生数据冗余,出现了两条同样的从表数据

内连接查询

显示内连接

语法:Select * FROM 表名1 INNER JOIN 表名2 ON 条件

示例:

SELECT * FROM testmain INNER JOIN test ON testmain.id=testid

运行结果

隐式内连接

Select * FROM 表名1,表名2 WHERE 条件

示例:

SELECT * FROM testmain,test WHERE testmain.id=testid

运行结果

外连接查询

左连接

以左表数据为基准,左表有而右表没有,也会返回数据,只是返回值为null

SELECT * FROM testmain LEFT JOIN test ON testmain.id=testid

运行结果

右连接

以右表数据为基准,右表有而左表没有,也会返回数据,只是返回值为null

SELECT * FROM testmain RIGHT JOIN test ON testmain.id=testid

运行结果

左连接与右连接的查询结果进行连接并进行去重

SELECT * FROM testmain LEFT JOIN test ON testmain.id=testid;
UNION
SELECT * FROM testmain RIGHT JOIN test ON testmain.id=testid

运行结果

子查询

简单示例

定义:一个查询语句嵌套在另一个查询语句中的查询

SELECT * FROM test WHERE age IN(SELECT MAX(age) FROM test)

语法释义:查询出test表中年龄最大学生的所有信息

运行结果

需求2:查询testid为1和2的学生所有信息

从表数据:

主表数据:

SQL语句:

SELECT * FROM test JOIN testmain ON testid=testmain.id AND(testid=1 OR testid=2)

运行结果

需求:查询testid为1且年龄大于3的所有学生的信息

SQL语句

SELECT * FROM test JOIN testmain ON testid=testmain.id AND(testid=1 AND age>3)

运行结果

子查询相关关键字

ALL

需求1:查询年龄大于testid为1的学生的年龄的学生的所有信息

test表数据如下

SQL语句:

SELECT * FROM test WHERE age> ALL(SELECT age FROM test WHERE testid=1)

语法释义:简单理解就是ALL关键字把查询到的所有年龄,都装入了一个集合,比where age=这样的查询方式查询范围更大

运行结果

NOT IN

IN:判断所查询出的值是否在某个集合中

需求:查询testid=1和3的所有学生的信息

SQL语句:

SELECT * FROM test WHERE testid IN(1,3)

此处也可通过多表连接的方式进行查询

SELECT * FROM test WHERE testid IN (SELECT id FROM testmain WHERE testmain.id=1 OR testmain.id=3)

运行结果:

NOT IN:则可以取反

SQL语句:

SELECT * FROM test WHERE testid NOT IN (SELECT id FROM testmain WHERE testmain.id=1 OR testmain.id=3)

运行结果

EXISTS

定义:判断查询的结果是否存在,比In的效率要高,一般数据量大的情况下推荐使用EXISTS

查询到了返回TRUE,为查询到返回FALSE

编写EXISTS注意点:

SQL语句

SELECT * FROM test WHERE EXISTS(SELECT * FROM test WHERE age>4)

执行结果

大家可以发现,此时的查询结果显然有问题,这是因为我们在EXISTS后面的括号当中,将语句给写死了,就一直返回的为TRUE.

正确写法

SELECT * FROM test  S1 WHERE EXISTS(SELECT * FROM test S2 WHERE S1.age>4)

通过内嵌一次判断,来保证最终输出的结果为正确的,S1 ,S2为临时表名,就是为了区分开EXISTS里的test与EXISTS外的test

运行结果

表自关联

(测试数据库数据)

SQL语句

SELECT * FROM company type AS A,
company type AS B
WHERE A.ID=B.parent_id;

运行结果

写在最后:

多表查询在实际运用中十分广泛,本次分享的都是一些较为简单的用法。希望能够给大家带来帮助,SQL语句是需要大家去勤加练习的。笔者小,中,大厂均有面试经历,每日分享全栈知识与面试题,希望能够与大家共同进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

商超物联网方案-Hotspot Service和客流分析方案概述

商超物联网方案-Hotspot Service和客流分析方案概述 场景概述 大型商场、大型综合体在相互竞争及线上消费的影响下,利润增长缓慢,迫切需要通过提供个性化服务提升顾客购物体验,促进利润增长。 向不同顾客推送其感兴趣的广告,不仅…

opengauss概述-基础知识篇-备考华为高斯

目录 🧨考前准备: 🎡数据库操作语言 ✨OLTP和OLAP 🎯常用函数 🧲字符处理函数 关于 left 和 right 特别重点的字符串函数 🧲数字操作函数 关于 ceil 和 floor 🧲时间和日期处理函数 &#x1f9f…

自定义类型:联合体

1.联合体 首先我们还是要讲解一下什么是联合体: 联合体(Union)是一种特殊的数据结构,它允许在相同的内存位置存储不同的数据类型。联合体的大小等于其最大成员的大小,因为所有成员共享同一块内存空间。联合体的每个成…

【C语言】详解预处理

、 最好的时光,在路上;最好的生活,在别处。独自上路去看看这个世界,你终将与最好的自己相遇。💓💓💓 目录 •✨说在前面 🍋预定义符号 🍋 #define • 🌰1.#define定义常…

Oracle对空值(NULL)的 聚合函数 排序

除count之外sum、avg、max、min都为null,count为0 Null 不支持加减乘除,大小比较,相等比较,否则只能为空;只能用‘is [not] null’来进行判断; Max等聚合函数会自动“过滤null” null排序默认最大&#xf…

【STL】map和set的原理及其使用

文章目录 关联容器键值对setset的介绍set的使用set的构造函数声明1:函数声明2:函数声明3: set的迭代器begin和endrbegin和rend set的容量empty()size() set的修改操作inserteraseclearfindcount mapmap的介绍map的构造…

拼多多怎么推广才有效果

拼多多店铺的有效推广需要综合考虑多个方面,包括优化店铺信息、商品详情、参与平台活动、利用社交媒体、精准营销和客户服务等。具体如下: 拼多多推广可以使用3an推客。3an推客(CPS模式)给商家提供的营销工具,由商家自…

Go Web 开发【Gin 框架快速开发】

1、Gin Web 快速开发 1.1、环境准备 1.1.1、导入 gin 依赖 这里就叫 gin 依赖了,在 Goland 命令行中输入下面的命令: go get -u github.com/gin-gonic/gin 1.1.2、设置代理 如果下载失败,最好设置一下代理,在 cmd 命令行中输…

功能测试_分类_用例_方法

总结 测试分类 按阶段分类 是否查看源代码分类 是否运行分类 是否自动化 其他分类 软件质量模型 开发模型-瀑布模型 测试过程模型 v w 测试用例八大要素 用例编号 用例标题 …

海外仓系统:为什么对小型海外仓企业尤为重要,该怎么看待wms系统

相对于大型海外仓企业来说,小型海外仓受到资金和规模的限制,在库存管理、订单处理能力上面临的问题尤其大。而这正是海外仓系统擅长的地方,现代的海外仓系统逐渐发展以云端部署方式为主,这也为小型海外仓企业提供了很多便利。 1、…

基于Pytorch深度学习——GPU安装/使用

本文章来源于对李沐动手深度学习代码以及原理的理解,并且由于李沐老师的代码能力很强,以及视频中讲解代码的部分较少,所以这里将代码进行尽量逐行详细解释 并且由于pytorch的语法有些小伙伴可能并不熟悉,所以我们会采用逐行解释小…

Java中的Lambda表达式

Lambda表达式的标准格式 格式:(形式参数)->{代码块} 形式参数:如果有多个参数,参数之间用逗号隔开 如果没有参数,留空即可 ->:由英文中画线和大于符号组成,固定写法。代表着…

学习中遇到的问题

1.UFUNCTION() 不是所有函数都能加UFUNCTION()修饰,涉及UE反射机制。 2.初始化用{} 初始化列表 3.创建C文件时修改了路径 这时.cpp文件会报错,只需删掉前面多余路径即可 4.函数的移除 1.虚幻5.1 UUserWidget不再包含OnLevelRemovedFromWorld() 转而使用…

微信CRM管理系统、企业个人微信号管理对接接口

接口地址: POST/login/getLoginQrCode appId参数为设备ID,首次登录传空,会自动触发创建设备,掉线后重新登录则必须传接口返回的appId,注意同一个号避免重复创建设备,以免触发官方风控 取码时传的appId需要…

python邮件发送

第一种方式 一:发送的邮件要设置授权码,通过邮箱邮箱授权码去验证,让邮件服务器帮我们去转发邮件到要接收的邮件,代码中的授权码,是需要登录126邮箱(我这里是以126邮件发送的,具体的以自己为准…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-PWR电源控制

PWR简介 PVD可用在电池供电或安全要求比较高的设备,如果供电电压在逐渐下降,在电压过低的情况下可能会导致内外电路出现不确定的错误。为了避免不必要的错误,可以在电源电压过低的情况下,提前发出警告并关闭较为危险的设备 关闭的…

循环神经网络模块介绍(Pytorch 12)

到目前为止,我们遇到过两种类型的数据:表格数据和图像数据。对于图像数据,我们设计了专门的卷积神经网络架构(cnn)来为这类特殊的数据结构建模。换句话说,如果我们拥有一张图像,我们 需要有效地利用其像素位置&#xf…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(三)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 继续接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们点击 submit 提…

【JavaEE 初阶(一)】初识线程

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多线程知识 目录 1.前言2.进程3.线程4.线程和进程的区别5.Thread创建线程5.1继承Thread创建线程5.2实现R…

非平衡数据处理-SMOTE Tomek算法(互联网最全)

作者Toby,来源公众号:Python风控模型,非平衡数据处理-SMOTE Tomek算法 之前Toby老师讲了非平衡数据处理相关知识,具体内容和链接如下。 imbalanced data机器学习非平衡数据处理 Python非平衡数据处理_SMOTE-ENN 方法 非平衡数…