数据库基础--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语句是需要大家去勤加练习的。笔者小,中,大厂均有面试经历,每日分享全栈知识与面试题,希望能够与大家共同进步。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

短视频矩阵系统ai剪辑 矩阵 文案 无人直播四合一功能核心独家源头saas开发

抖去推矩阵AI小程序是一款针对短视频平台的智能创作和运营工具,它具有以下功能特点: 1.批量视频生成:抖去推可以在短时间内生成大量视频,帮助商家快速制作出适合在短视频平台上推广的内容 2.全行业覆盖:适用于多个行业…

Golang数组与切片

文章目录 数组数组介绍数组的定义方式访问与修改数组元素遍历数组元素数组指针 切片切片介绍切片的定义方式访问与修改切片元素添加切片元素切片的拷贝遍历切片元素string的切片 数组 数组介绍 数组介绍 在Go中,数组是一个由固定长度的特定类型元素组成的序列&…

第十五届蓝桥杯省赛大学B组(c++)

很幸运拿了辽宁赛区的省一,进入6月1号的国赛啦... 这篇文章主要对第十五届省赛大学B组(C)进行一次完整的复盘,这次省赛2道填空题6道编程题: A.握手问题 把握手情景看成矩阵: 粉色部分是7个不能互相捂手的情况 由于每个人只能和其他人捂手, 所以黑色情况是不算的 1和2握手2和…

QT防止自研软件被复制的基本操作(二)

参考一 自研软件为了防止被人任意复制传播,需要设置注册使用模式。基本原理:通过计算机的特异性编号,加上自己的编码,使用加密算法算出一个生成码。 一、计算机的特异性编号 硬盘的编号:最后一块硬盘的编号就行&#…

【C语言】/*函数栈帧的创建和销毁*/

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题: 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的,传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

模型 SOP(标准操作程序)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。标准化流程,提质增效,保障合规。 1 SOP的应用 1.1 餐厅日常卫生清洁标准操作程序(SOP) 下面展示一个餐厅如何通过SOP确保清洁工作的标准化&#xff0c…

基于OpenCv的图像傅里叶变换

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

【题解】OR26 最长回文子串(回文串)

https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId182&tqId34752&ru/exam/oj class Solution { public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param A string字符串 * …

【电子通识】为什么用双绞线?双绞线抗干扰的原理是什么?

使用双绞线最大的理由是抗干扰。不仅可以防止别人干扰,也可以防止自己干扰别人。这与EMC中的EMS和EMI相对应(参考【EMC专题】电磁兼容--基本概念)。 双绞线是由一对带有绝缘层的铜线(绝缘层使两根线中的金属导体不会因为互碰而导致短路)以螺旋的方式缠绕在一起所构成的。通…

【Java】Stream流、方法引用(Java8)

Stream流 中间方法 distinct() 使用HashSet去重 终结方法 toArray() value 表示 流中数据的个数,要跟数组的长度保持一致。 collect() 收集到map中,比较复杂。需要指定 键 和 值 的生成规则。 方法引用 01_引用静态方法 ​ 引用类方法,其实…

jQuery 笔记13 JavaScript的好帮手

相关内容:下载jQuery网址、jQuery的使用、表格排序软件(tablesorter)、行事历软件(FullCalendar)、…… jQuery是一套开放性源代码的JavaScript函数库(Library),jQuery是JavaScript函数库,简化了…

示波器使用学习笔记#1

1.示波器横轴表示的是时间,纵轴是电压 此时纵轴一格刻度是1V。 此时横轴一格是200us。 此时方波的电压值是2500mV,周期为200us * 4.6 920 us,频率为1087Hz。 采样率500M/秒表示:示波器每秒钟采集500w个点 ,当前示波器…

A Bug‘s Life (并查集)

//新生训练 #include <iostream> #include <algorithm> using namespace std; const int N 5000; int p[N], sz[N]; int n, m; int find(int x) {if (p[x] ! x)p[x] find(p[x]);return p[x]; } int main() {int T;scanf("%d", &T);for (int k 1; …

python中type,object,class 三者关系

type,object,class 三者关系 在python中&#xff0c;所有类的创建关系遵循&#xff1a; type -> int -> 1 type -> class -> obj例如&#xff1a; a 1 b "abc" print(type(1)) # <class int> 返回对象的类型 print(type(int)) …

C++设计模式-创建型设计模式

设计模式 设计模式是什么 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;用于解决在特定环境下&#xff0c;重复出现的&#xff0c;特定问题的解决方案&#xff1b;其实就是解决问题的固定套路。但是要慎用设计模式&#xff0c;有一定的工程代码量之后用它比较…

主持人口才训练与实用技巧

主持人口才训练与实用技巧 一、引言 在广播、电视、网络等媒体中&#xff0c;主持人是节目的灵魂和核心。一个优秀的主持人不仅要具备良好的专业素养&#xff0c;更需要出色的口才技巧和应对能力。本文将详细探讨主持人口才训练的重要性以及实用的技巧&#xff0c;帮助主持人…

当AI遇上架构师:谁将主导未来?

▼最近直播超级多&#xff0c;预约保你有收获 架构师的核心能力是面对不同的业务场景给出合适的架构设计方案&#xff0c;Balance 平衡设计就是架构师最重要的能力&#xff0c;没有之一。 在 AI 大模型时代&#xff0c;AI 大模型正在重新定义软件的范式。在当前&#xff0c;世界…

Win11 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标

Win11 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标 方法二 搜索cmd 打开命令行面板 然后输入 explorer shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}就能显示出来了 ## 方法三 通知区域图标不存在 如图&#xff0c;显示为这样 这种时候桌面…

[C++基础学习-07]----C++结构体详解

前言 结构体&#xff08;Struct&#xff09;是C中一种用户定义的复合数据类型&#xff0c;用于存储不同类型的数据项。结构体可以包含不同类型的数据成员&#xff0c;这些数据成员可以是基本类型&#xff08;如int、float、char等&#xff09;&#xff0c;也可以是数组、指针、…

Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置&#xff0c;然后在project的build.gradle.kts中使用如下方式引入&#xff1a; apply(from "./config.gradle") 缺点&#xff1a;在project的module中引用无任何提示&#xff0c;无法跳转到指定引用 一、创建versio…