【MySQL探索之旅】多表查询

news2024/12/28 5:53:44

在这里插入图片描述

📚博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 1. 多表查询的概念
    • 1.1 笛卡尔积
  • 2. 连接查询
    • 2.1 内连接
    • 2.2 外连接
      • 2.2.1 左外连接
      • 2.2.2 右外连接
    • 2.3 自连接
  • 3. 子查询
    • 3.1 单行子查询
    • 3.2 多行子查询
  • 4. 联合查询

1. 多表查询的概念

多表查询就是对多表查询我们需要的数据. 通过笛卡尔积进行查询

1.1 笛卡尔积

百度百科:

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

image-20240416153106532

案例:

image-20240416153733369

笛卡尔积就是得到了一个更大的表. 列数就是原来两个表列数的之和. 行数就是原来两个表行数之乘.

【注意】:笛卡尔积是全排列的过程,在尝试穷举所有的可能性,自然就会产生一些不符合实际情况的数据

上述案例就有一部分为无效数据/无意义的数据

初始化数据:

create table student(id int, name varchar(20), classId int);
inset into student values (1,'张三',1);
insert into student values (2,'李四',2);
insert into student values (3,'赵五',3);
insert into student values (4,'赵六',4);

create table class(classId int, className varchar(20));
insert into class values (1,'计算机科学1班');
insert into class values (2,'软件工程1班');
insert into class values (3,'人工智能1班');
insert into class values (5,'信息安全1班');

2. 连接查询

2.1 内连接

语法:

-- 显示内连接
select 字段 from1 别名1 [inner] join2 别名2 on 连接条件 and 其他条件;
-- 隐式内连接
select 字段 from1 别名1,2 别名2 where 连接条件 and 其他条件;

案例1:

-- 查询张三的信息
select * from student, class where student.classId = class.classId and name = '张三';
-- 或者
select * from student inner join class on student.classId = class.classId and name = '张三';

运行结果:

image-20240416160146712

案例2:

-- 查询所有有班级的学生的信息
select * from student inner join class on student.classId = class.classId;
-- 或者
select * from student, class where student.classId = class.classId;

运行结果:

image-20240416160536306

2.2 外连接

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完
全显示我们就说是右外连接。

2.2.1 左外连接

image-20240416162417809

语法:

select 字段名 from 表名1 left join 表名2 on 连接条件;

案例:

-- 查询所有同学的信息,没有班级也要显示
select * from student left join class on student.classId = class.classId;

运行结果:

image-20240416161201950

2.2.2 右外连接

image-20240416162556727

语法:

select 字段名 from 表名1 right join 表名2 on 连接条件;

案例:

-- 查询所有班级的信息,没有学生的班级也要显示
select * from student right join class on student.classId = class.classId;

运行结果:

image-20240416161341743

2.3 自连接

自连接是指在同一张表连接自身进行查询。

自连接将行与行之间的关系, 转换为列于列的关系

测试表:

image-20240418203459272

案例: 查询成绩表中的 Java 成绩大于 C语言成绩的同学

image-20240418202430781

为什么直接自连接报错呢? 如何报错的呢? 通过别名的方式来进行自连接

image-20240418202732384

添加连接条件

select * from sore as s1,sore as s2 where s1.name = s2.name and s1.className ='Java' and s2.className = 'C语言' and s1.sore > s2.sore;

运行结果:

image-20240418203408939

3. 子查询

子查询是指嵌入在其他 SQL 语句中的 select语句,也叫嵌套查询

这种写法实际开发中需要慎重使用, 这种写法违背了编程基本的思想原则(化繁为简), 如果是合并之后的 SQL 命令仍然非常简单直观的话, 使用子查询也是可以的.

3.1 单行子查询

单行子查询: 返回一行记录的子查询

案例: 查询张三同学的同班同学

image-20240418204738020

上诉两条 SQL 命令就可以转化为一条命令

select name from student where classId = (select classId from student where name = '张三') and name != '张三';

运行结果:

image-20240418204911546

3.2 多行子查询

多行子查询:返回多行记录的子查询

案例: 查询学习 计算机基础 或者 Python同学的课程信息

在这里插入图片描述

上诉两条 SQL 命令就可以转化为一条命令

select * from sore where name in (select name from sore where className = '计算机基础' or className = 'Python');

运行结果:

在这里插入图片描述

4. 联合查询

在实际应用中,为了合并多个 select 的执行结果,可以使用集合操作符 unionunion all。使用unionunion all时,前后查询的结果集中,字段需要一致。

  • union : 该操作符用于取得两个结果集的并集. 当使用该操作符时,会自动去掉结果集中的重复行。

    案例: 查询成绩小于90 或者 课程为 Java 的信息

    select * from sore where sore < 90 or className = 'Java';
    select * from sore where sore < 90 union select * from sore where className = 'Java';
    

    运行结果:
    在这里插入图片描述

  • union all : 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

    案例: 查询成绩小于90 或者 课程为 Java 的信息

    select * from sore where sore < 90 union all select * from sore where className = 'Java';
    

    在这里插入图片描述

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

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

相关文章

快速排序题目SelectK问题(力扣75.颜色分类、力扣215.数组中的第K个最大元素、面试题17.14最小K个数)

力扣75.颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sor…

使用Nexus搭建npm私服库

优质博文&#xff1a;IT-BLOG-CN 【1】下载nexus http://www.sonatype.com/download-oss-sonatype解压到本地即可&#xff1b; 【2】打开nexus-3.2.0-01-win64\nexus-3.2.0-01\bin&#xff1b;打开cmd&#xff08;必须使用cmd&#xff09; 执行nexus.exe /run&#xff1b;需要使…

贪吃蛇的简单实现(c语言)

前言&#xff1a;学完了C语言的基础语法&#xff0c;和一点数据结构的知识&#xff0c;拿贪吃蛇来练练手&#xff0c;并熟悉以前的知识。写完之后&#xff0c;有一种成就感&#xff0c;为以后的学习饱满激情。 注意这里的讲解是由部分到整体的思路。 目录 控制台不能是终端&am…

OpenCV-复数矩阵点乘ComplexMatrixDotMultiplication

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 需求说明 一般用到FFT&#xff0c;就涉及到复数的计算&#xff0c;为了便于调用&#xff0c;我自行封装了一个简单的复数矩阵点乘…

《从零开始的Java世界》08集合框架

《从零开始的Java世界》系列主要讲解Javase部分&#xff0c;从最简单的程序设计到面向对象编程&#xff0c;再到异常处理、常用API的使用&#xff0c;最后到注解、反射&#xff0c;涵盖Java基础所需的所有知识点。学习者应该从学会如何使用&#xff0c;到知道其实现原理全方位式…

YOLO世界:实时开放词汇对象检测

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;YOLO世界&#xff1a;实时开放词汇对象检测1、研究背景2、提出方法3、相关技术3.1、Re-parameterizable Vision-Language Path Ag…

react09 hooks(useState)

react-09 hooks&#xff08;useState&#xff09; hooks组件&#xff08;函数组件动态化&#xff09; 其本质就是函数组件&#xff0c;引用一些hooks方法&#xff0c;用来在函数组件中进行例如状态管理&#xff0c;模拟类组件的生命周期等&#xff0c;只能运用到函数组件中 ho…

Linux的UDEV机制

udev 机制引入&#xff1a; 手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具&#xff0c;在终端输入adb安装指令&#xff1a; sudo apt-get install adb c. dmeg能查看到手机接入的信息&#xff0c;但是输入adb devices会出现提醒 dinsufficient permissions for …

酷开会员 | 酷开系统带你足不出户获得同电影院一般的观影体验

在繁忙、混乱的快节奏工作中&#xff0c;人们总是渴望在下班后&#xff0c;逃离工作的桎梏找到一丝慰藉&#xff0c;看电影&#xff0c;则成为了很多人宣泄情感、放松心情的一种方式。但是&#xff0c;电影院的时间和地点总是那么不受控制&#xff0c;要么地点太远、要么场次不…

k8s安装,linux-ubuntu上面kubernetes详细安装过程

官方文档&#xff1a;https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/ 环境配置 该部分每个主机都要执行 如果你确定不需要某个特定设置&#xff0c;则可以跳过它。 设置root登录 sudo passwd root sudo vim /etc/ssh/sshd_config Perm…

密码学 | 数字证书:应用

&#x1f951;原文&#xff1a;数字签名和数字证书的原理解读 - 知乎 &#x1f951;前文&#xff1a;密码学 | 数字签名 数字证书 - CSDN &#x1f951;提示&#xff1a;把客户端想成 Alice&#xff0c;服务器端想成 Bob 即可。客户端实际上指的是客户端浏览器。 下面&#…

Ubuntu 22最新dockers部署redis哨兵模式,并整合spring boot和配置redisson详细记录(含spring boot项目包)

dockers部署redis哨兵模式&#xff0c;并整合spring boot 环境说明相关学习博客一、在docker中安装redis1、下载dockers镜像包和redis配置文件&#xff08;主从一样&#xff09;2、编辑配置文件3、启动redis&#xff08;主从一样&#xff09;4、进入容器测试&#xff08;主从一…

PyTorch与深度学习:探索现代神经网络的魅力

在科技飞速发展的今天&#xff0c;深度学习作为人工智能领域的重要分支&#xff0c;已经在图像识别、自然语言处理、语音识别等多个领域取得了突破性的进展。而PyTorch&#xff0c;作为一款开源的深度学习框架&#xff0c;以其简洁易用、动态计算图等特性&#xff0c;赢得了广大…

react合成事件与原生事件区别备忘

朋友问起在做一个下拉框组件&#xff0c;下拉的点击事件是用react的onClick触发&#xff0c;外部区域点击关闭则用dom的原生点击事件绑定&#xff0c;问题是下拉的点击事件无法阻止冒泡到dom的原生事件。 我说&#xff0c;react的合成事件 和 原生事件是不一样的&#xff0c;尽…

【科学研究】那些考进精英大学的农家子弟们

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

Ollama教程——生成内容API:利用Ollama的原生API进行AI应用开发

相关文章: Ollama教程——入门&#xff1a;开启本地大型语言模型开发之旅 Ollama教程——模型&#xff1a;如何将模型高效导入到ollama框架 Ollama教程——兼容OpenAI API&#xff1a;高效利用兼容OpenAI的API进行AI项目开发 Ollama教程——使用langchain&#xff1a;ollama与…

iTwin Capture Modeler-23中文版下载地址及安装教程

文章目录 一、iTwin Capture Modeler23中文版安装教程二、iTwin Capture Modeler23中文版下载地址一、iTwin Capture Modeler23中文版安装教程 1. 解压安装包。订阅专栏(可获取专栏内所有文章阅读权限与软件安装包)后,从文末获取安装包解压,如下所示: 2. 右击安装包,选择以…

火绒安全的详细用法

1. 引言 本章将介绍火绒安全软件的基本概述和用法。火绒安全是一款功能强大的安全软件,提供了多种保护功能和工具,可以帮助您保护计算机免受恶意软件、网络攻击和其他安全威胁的侵害。 2. 火绒安全的功能 火绒安全具有以下主要功能: 实时防护:火绒安全提供实时监测和防护…

9.Eureka服务发现+Ribbon+RestTemplate服务调用

order-service服务通过服务名称来代替 ip:port的方式访问user-service服务的接口。 原来的请求代码&#xff1a; Service public class OrderServiceImpl implements OrderService {Autowiredprivate OrderMapper orderMapper;Autowiredprivate RestTemplate restTemplate;Ov…

修改Ubuntu22.04系统图标

在Ubuntu 22.04中更改开机时显示的Ubuntu图标需要修改的设置。 主要思路是用自己图片替换系统图片&#xff0c;保持系统图片同名&#xff0c;同格式。 以下是一般的步骤&#xff1a; 修改启动界面的logo&#xff1a; sudo cp 新logo.png /usr/share/plymouth/themes/spinn…