数据库之多表查询

一.子查询

在SQL语句中嵌套select语句,称为嵌套查询,又称子查询

# 语法select * from 表1 where 字段1=(select 字段1 from 表2);

 子查询是一个嵌套在select、insert、update 或delete 语句或其他子查询中查询

注意:将子查询和比较运算符联合使用,必须保证子查询返回的值不能对于一个

(1).标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询被称为标量子查询

常用的操作符:=、<>、>、>=、<、<=

-- 查询 ‘语文’科目的所有学生信息-- 拆分步骤# 1. 查询语文科目的编号
select id from subject where name='语文';# 2. 根据语文科目的编号,查询所有的学生信息
select * from student where subject_id=(select id from subject where name='语文');

(2) 列子查询

子查询返回的结果是一列(可以是多行,这种子查询称为列子查询)。

常用的操作符:in、not in 

-- 查询‘三年级二班’的所有学生的考试成绩-- 分解步骤# 1.查询班级为三年级二班的编号
select grade_id from grade where grade_name='三年级二班';# 2.查找班级为三年级二班所有学生的学号
select student_no from student where grade_id=(select grade_id from grade where grade_name='三年级二班');# 3.查询‘三年级二班’的所有学生的考试成绩
select * from result where student_no in(select student_no from student where grade_id=(select grade_id from grade where grade_name='三年级二班'));

(3). 行子查询

行子查询返回的结果是一行(可以是多列),这种子查询称为行子查询

-- 查询和张三同一天生日的女生的信息-- 拆分步骤# 1. 查询张三的生日
select birthday from student where student_name='张三';# 2.查询和张三同一天生日的女生的信息
select * from student where month(birthday)=month(select birthday from student where student_name='张三') and student_name<>'张三' and sex='女';

二. 多表查询

多表查询是指多张表中查询数据

-- 多表查询语法select * from 表1,表2;

直接这样会出现笛卡尔积

笛卡尔积是指数学中,两个集合 A集合和B集合的所有组合情况。(在多表查询是,需要消除无效的笛卡尔积)

-- 多表查询 消除笛卡尔积select * from 表1,表2 where 表1.字段1=表2.字段1;
-- 查询张三班级的信息select s.student_no,s.student_name.g.grade_name from student s,grade g
where s.grade_id=g.grade_id and s.student_name='张三';

三.联合查询--union和union all 

union 用于合并两个或多个select 语句的结果集,并消去表中任何重复行。

union 内部的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型

同时,每条select语句中的列的顺序必须相同,使用all随union 一起使用时(即 union all),不消除重复行

-- 消除重复行
select student_name,phone from student union
select student_name,phone from phones

四. 内连接

内连接查询的是两张表交集的部分

-- 内连接语法select 字段列表 from 表1 【inner】 join 表2 on 连接条件...;-- 查询学生信息及所在班级信息
select s.student_name,g.grade_name,r.student_result from student s inner join grade g on s.grade_id=g.grade_id inner join result r on s.student_no=r.student_no where g.grade_name='数据库一班';

五. 外连接

(1)左外连接

相当于查询表1(左表)的所有数据包含表1和表2交集部分的数据

-- 左外连接语法
select  字段列表 from 表1 left [outer] join 表2 on 条件...;-- 查询所有学生的考试成绩select * from student s left join result r on s.student_no=r.student_no;

(2)右外连接

右外连接的原理与左外连接相同,右表逐条去匹配记录;否则null填充

-- 右外连接语法
select  字段列表 from 表1 right [outer] join 表2 on 条件...;-- 查询所有学生的考试成绩
select * from result r right join student s on s.student_no=r.student_no;

六. 自连接

自连接:通过起别名的方式把一张表当成多个表使用

注意:1.自连接可以是内连接也可以是外连接

2.自己与一张与自己完全一样的从表建立关系进行连接查询

-- 自连接查询语法:
select 字段列表 from 表A 别名A join 表A 别名B on 条件...;-- 查找比张三年龄大的学生select s2.* from student s1,student s2 where s1.student_name='张三' and s1.birthday>s2.birthday;

七. 自然连接

自然连接通过MySQL 自己的判断完成连接过程,不需要指定连接条件。

MySQL会使用表内的,相同的字段,作为连接条件

自然连接分为内外之分

内:natural join

外: 左外natural left join、 右外natural right join

--  查看学生姓名和考试成绩select s.student_name,r.student_result from student s naturl join result r;

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

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

相关文章

业务流程顺畅度为何受制于数据失真

在当今数字化驱动的商业环境中&#xff0c;企业的业务流程高度依赖于数据的准确性和完整性。然而&#xff0c;数据失真问题却如同隐匿在流程中的“暗礁”&#xff0c;频繁地给企业的业务流程顺畅度带来严重挑战&#xff0c;进而影响企业的整体运营效率和竞争力。 数据失真的表…

使用 Pandas 进行时间序列分析的 10个关键点

使用Pandas进行时间序列分析的10个关键点&#xff08;由于篇幅限制&#xff0c;这里调整为10个&#xff0c;但实际操作中可能涉及更多细节&#xff09;如下&#xff1a; 1. 创建时间序列数据 时间序列数据是指在多个时间点上形成的数值序列。在Pandas中&#xff0c;可以使用t…

vscode和pycharm在当前工作目录的不同|python获取当前文件目录和当前工作目录

问题背景 相信大家都遇到过一个问题&#xff1a;一个项目在vscode&#xff08;或pycharm&#xff09;明明可以正常运行&#xff0c;但当在pycharm&#xff08;或vscode&#xff09;中时&#xff0c;却经常会出现路径错误。起初&#xff0c;对于这个问题&#xff0c;我也是一知…

RN如何实现页面渐变背景

在React Native&#xff08;RN&#xff09;中&#xff0c;实现页面渐变背景通常需要使用LinearGradient组件。LinearGradient是React Native的一个第三方库&#xff0c;它允许你创建线性渐变效果。以下是一个简单的步骤指南&#xff0c;教你如何在React Native中实现页面渐变背…

基于Java的电商书城系统源码带本地搭建教程

技术框架&#xff1a;jQuery MySQL5.7 mybatis jsp shiro 运行环境&#xff1a;jdk8 IntelliJ IDEA maven3 宝塔面板 系统功能介绍 该系统分为前台展示和后台管理两大模块&#xff0c;前台主要是为消费者服务。该子系统实现了注册&#xff0c;登录&#xff0c; 以及…

闯关leetcode——232. Implement Queue using Stacks

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/implement-queue-using-stacks/description/ 内容 Implement a first in first out (FIFO) queue using only two stacks. The implemented queue should support all the functions of a normal …

自动化测试覆盖率提升的关键步骤

自动化测试覆盖不足的问题可以通过增加测试用例的数量和质量、引入代码覆盖率分析工具、加强团队的测试意识和技能、优化测试框架和工具、自动化测试与手动测试相结合等方式来解决。其中&#xff0c;引入代码覆盖率分析工具是关键&#xff0c;它可以帮助我们精准地识别未被测试…

手机柔性屏全贴合视觉应用

在高科技日新月异的今天&#xff0c;手机柔性显示屏作为智能手机市场的新宠&#xff0c;以其独特的可弯曲、轻薄及高耐用性特性引领着行业潮流。然而&#xff0c;在利用贴合机加工这些先进显示屏的过程中&#xff0c;仍面临着诸多技术挑战。其中&#xff0c;高精度对位、应力控…

大数据新视界 -- 大数据大厂之大数据重塑影视娱乐产业的未来(4 - 4)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

JS补原型链

在JavaScript中&#xff0c;补足一个对象的原型链通常是指确保一个对象继承自另一个对象。这涉及到原型和构造函数。 对于构造函数&#xff08;通常首字母大写&#xff0c;如 Animal&#xff09;&#xff0c;它们有一个 prototype 属性&#xff0c;这个属性是一个对象&#xf…

fastjson/jackson对getter,setter和constructor的区分

在复现完fastjson1.2.24-1.2.80和jackson的所有相关漏洞后&#xff0c;总结的一些规则 以下均指对json的反序列化过程 setter fastjson调用setter&#xff1a;遍历所有方法&#xff0c;找出所有满足setter要求的方法&#xff0c;再根据传入的json去反射调用 jackson调用set…

STM32外设应用

STM32是基于ARM Cortex-M系列内核的微控制器&#xff0c;具有高性能、低功耗和丰富的外设资源。其广泛应用于物联网、工业控制、智能家居和嵌入式系统等领域。本文将简要介绍STM32常用外设的功能及应用实例&#xff0c;帮助大家更好地理解和使用STM32外设。 1. GPIO&#xff0…

近端串扰和远端串扰

近端串扰和远端串扰 近端串扰噪声持续时间长&#xff0c;远端串扰噪声峰值大 远端串扰噪声随耦合长度增加而增大 近端串扰:耦合长度小时&#xff0c;噪声随耦合长度增加而增大 远端串扰具有如下4个特性: 表层走线有远端串扰&#xff0c;内层走线之间可近似认为不存在远端串扰…

opencv学习笔记(5): 图像预处理(图像格式和通道、点运算)

1. 图像格式和通道 1.1 图像格式 图像格式是指计算机存储图像的格式。OpenCV目前支持的图像格式包括Windows位图文件BMP、DIB&#xff0c;JPEG文件JPEG、JPG、JPE&#xff0c;便携式网络图形文件PNG等。 ①. BMP BMP&#xff08;全称Bitmap&#xff0c;位图&#xff09;是Win…

VMware workstation的3种网络类型

虚拟机想要和主机进行通信必须借助网桥或者交换机&#xff0c;VMware workstation提供了3种网络交换机&#xff1a;仅主机类型交换机、NAT类型交换机、桥接类型交换机。 介绍下这三种类型的交换机 仅主机类型 通过VMware workstation添加一个仅主机类型的虚拟交换机后&#…

Kubernetes固定Pod IP和Mac地址

方案1&#xff1a; 在 Calico GitHub Issues#5196 问题的 commits#6249 提交中&#xff0c;引入新的 Pod 注释cni.projectcalico.org/hwAddr&#xff0c;用于将指定的 MAC 地址分配给容器端 Veth 接口。 将Calico升级至v3.24.1或以上版本&#xff0c;使用如下注解轻松设置Pod…

【Java数据结构】树】

【Java数据结构】树 一、树型结构1.1 概念1.2 特点1.3 树的类型1.4 树的遍历方式1.5 树的表示形式1.5.1 双亲表示法1.5.2 孩子表示法1.5.3 孩子双亲表示法1.5.4 孩子兄弟表示法 二、树型概念&#xff08;重点&#xff09; 此篇博客希望对你有所帮助&#xff08;帮助你了解树&am…

随记:MybatisPuls中的抽象类Model和BaseMapper、自定义MetaObjectHandler实现类

有关Model&#xff1a; 基础概念 在 MyBatis - Plus 中&#xff0c;Model是一个很重要的抽象类。当实体类继承Model类后&#xff0c;它会获得一系列方便操作数据库的功能。这些功能主要是基于 MyBatis - Plus 提供的强大的 CRUD&#xff08;增删改查&#xff09;操作增强。主要…

Qt编程技巧小知识点(6)根据 *IDN? 对程控仪器连接状态进行确认

文章目录 Qt编程技巧小知识点&#xff08;6&#xff09;根据 *IDN? 对程控仪器连接状态进行确认小结 Qt编程技巧小知识点&#xff08;6&#xff09;根据 *IDN? 对程控仪器连接状态进行确认 确定仪器连接问题&#xff0c;常用的是监测仪器的连接状态&#xff0c;如下代码所示&…

Java Lock ConditionObject 总结

前言 相关系列 《Java & Lock & 目录》&#xff08;持续更新&#xff09;《Java & Lock & ConditionObject & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & Lock & ConditionObject & 总结》&#xff08;学习…