数据库基础--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.rhkb.cn/news/320350.html

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

相关文章

自动驾驶主流芯片及平台架构(二)特斯拉自动驾驶芯片平台介绍

早期 对外采购mobileye EyeQ3 芯片摄像头半集成方案,主要是为了满足快速量产需求,且受制于研发资金不足限制; 中期 采用高算力NVIDIA 芯片平台其他摄像头供应商的特斯拉内部集成方案,mobileye开发节奏无法紧跟特斯拉需求&#xff…

select,poll,epoll

在 Linux Socket 服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select,poll 和 epoll 是 Linux API 提供的I/O复用方式。 \selectpollepoll操作方式遍历遍历回调底层实现数组链表哈希表IO效率每次调用都进…

ROS 2边学边练(43)-- 利用GTest写一个基本测试(C++)

前言 在ROS(Robot Operating System)中,gtest(Google Test)是一个广泛使用的C测试框架,用于编写和执行单元测试。这些测试可以验证ROS节点、服务和消息等的正确性和性能。 如果我们需要在写的包中添加测试&…

kubectl_入门_service详解

Service 我们知道 Pod 的生命周期是有限的。可以用 ReplicaSet 和Deployment 来动态的创建和销毁 Pod,每个 Pod 都有自己的 IP 地址,但是如果 Pod 重建了的话那么他的 IP 很有可能也就变化了。 这就会带来一个问题:比如我们有一些后端的 Po…

Flink时间语义 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &a…

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线 3. 核心代码3.1 驱动实现3.2 代码解析 4. 播放文本5. 结论 视频地址: SeeedXIAO ESP32S3 Sense【基于MAX98357的Minimax&am…

redis中的双写一致性问题

双写一致性问题 1.先删除缓存或者先修改数据库都可能出现脏数据。 2.删除两次缓存,可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离,读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

监视器和显示器的区别,普通硬盘和监控硬盘的区别

监视器与显示器的区别,你真的知道吗? 中小型视频监控系统中,显示系统是最能展现效果的一个重要环节,显示系统的优劣将直接影响视频监控系统的用户体验满意度。 中小型视频监控系统中,显示系统是最能展现效果的一个重要…

Linux字符设备驱动-详解与实操:驱动架构、设备树、Pinctrl子系统和GPIO子系统、platform、设备树下的platform

如何编写一个驱动程序: (1)确定主设备号 (2)定义自己的file_operations结构体: 包含对应的open(drv_open)/read(drv_read)等设备操作函数,需要到内核中去注册 (3)实现…

【微服务】服务保护(通过Sentinel解决雪崩问题)

Sentinel解决雪崩问题 雪崩问题服务保护方案服务降级保护 服务保护技术SentinelFallback服务熔断 雪崩问题 在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用,称为雪崩 原因 微服务之间的相互调用,服务提供者出现故障服务的消费者没有…

与Apollo共创生态:让智驾技术为各行业发展赋能

目录 一、引言 二、Apollo七周年大会主要内容回顾 2.1活动回顾链接 2.2Apollo项目介绍 2.2.1Apollo项目发展介绍 2.2.2实验用车传感器介绍 2.2.3硬件连接概述 2.2.4软件概述 2.3Apollo X 企业自动驾驶解决方案介绍 2.3.1Apollo X 企业自动驾驶解决方案优势 2.3.2 Ap…

报错(已解决):无法加载文件 D:\code\NodeJs\pnpm.ps1,因为在此系统上禁止运行脚本。

问题: 在vscode运行uniapp项目需要拉取全部依赖,需要使用到pnpm,在vscode终端运行命令:pnpm install后报错: 解决办法: 1:我未安装pnpm,首先打开电脑cmd,运行下列命令&a…

2024中国(江西)国际先进陶瓷材料及智能装备博览会

2024中国(江西)国际先进陶瓷材料及智能装备博览会 “中国(江西)国际先进陶瓷材料及智能装备博览会” 陶瓷三新展 (新材料、新装备、新技术) 绿色智能、引领未来 2024年11月1日-11月3日 中国江西 南昌…

初识指针(2)<C语言>

前言 前文介绍完了一些指针基本概念,下面介绍一下,const关键字、指针的运算、野指针的成因以及避免,assert函数等。 目录 const(常属性) 变量的常属性 指针的常属性 指针的运算 ①指针 -整数 ②指针-指针 ③指针与…

浅析扩散模型与图像生成【应用篇】(二十一)——DALLE·2

21. Hierarchical Text-Conditional Image Generation with CLIP Latents 该文提出一种基于层级式扩散模型的由文本生成图像的方法,也就是大名鼎鼎的DALLE2。在DALLE2之前呢,OpenAI团队已经推出了DALLE和GLIDE两个文生图模型了,其中DALLE是基…

Costas-Barker序列模糊函数仿真

文章目录 前言一、Costas 序列二、Barker 码三、Costas-Barker 序列模糊函数仿真1、MATLAB 核心代码2、仿真结果①、Costas-Barker 模糊函数图②、Costas-Barker 距离模糊函数图③、Costas-Barker 速度模糊函数图 四、资源自取 前言 Costas 码是一种用于载波同步的频率调制序列…

(读书笔记-大模型) LLM Powered Autonomous Agents

目录 智能体系统的概念 规划组件 记忆组件 工具组件 案例研究 智能体系统的概念 在大语言模型(LLM)赋能的自主智能体系统中,LLM 充当了智能体的大脑,其三个关键组件分别如下: 首先是规划,它又分为以下…

Docker在linux安装步骤超详细

官网 Install Docker Engine on CentOS | Docker Docs yum -y install gcc yum -y install gcc-c 安装工具 sudo yum install -y yum-utils 设置国内的镜像 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yu…

python部署linux

python项目做完了,就涉及到了部署,windows可以打包exe,linux如何部署呢? 部署 Python的打包部署方式有多种,具体取决于项目的需求、规模以及所使用的工具。以下是几种常见的Python打包部署方式: 使用pip安…

vite打包配置

目录 minify默认是esbuild,不能启动下面配置 使用: plugins: [viteMockServe({mockPath: mock})]根目录新建mock/index.ts. 有例子Mock file examples:https://www.npmjs.com/package/vite-plugin-mock-server 开发环境生产环境地址替换。根…