十、多表查询

article/2025/9/24 8:47:18

十、多表查询

*多表查询的本质就是把多张表合并成一个临时表

1、多表数据合并方案

  1. 连接查询合并方案【最常见】

    1. 首先确保两张表之间存在【隶属关系】
    2. 将两张表中的数据行【沿着水平方向进行拼接】
    3. 最终得到一个拥有【完整隶属关系】的新数据行
  2. 联合查询合并方案

    1. 不需要两张表之间存在【隶属关系】
    2. 将两张表中的数据行【沿着垂直方向进行堆砌】

2、连接查询【水平拼接】

1、join

拼接的临时表行数是两个表的笛卡尔积(A×B)

内联和外联区别:
外键有空值或者不匹配时,外联依然显示左表所有数据,内联不会显示该数据

1、cross join(交叉连接)

交叉连接返回emp、dept的笛卡尔积,即emp行数 × dept行数条数据,一般在不需要任何过滤条件的情况下使用

SELECT * FROM emp,dept;
SELECT * FROM emp CROSS JOIN dept;
-- 两条语句是等效的,第一条语句是隐式的交叉连接,第二条是显示的交叉连接

2、inner join(内连接)

在这里插入图片描述

  • 内连接也是返回emp和dept的笛卡尔积,但是在内连接后一般都会加on语句附加过滤条件,所以返回的是符合条件的笛卡尔积
  • 拼接的新临时表为避免重名,列名都是“表名.列名”格式
  • 为了剔除脏数据,使用【连接查询过滤方案】 on 进行过滤
SELECT empno,ename,sal,emp.deptno,dname,loc
FROM emp
INNER JOIN dept -- 运行到这里查出来的数据必然存在脏数据
ON emp.deptno=dept.deptno; -- 用 on 定位合法数据行,剔除脏数据,将合法数据行放到一个新的临时表里

3、natural join (自然连接)

相同的列数值相等连接

***自然连接和内连接区别:**自然连接是特殊的内连接,连接的列只能显示一个列(注:使用的列(重复列)不能有限定词)

-- 格式
select...
from1
natural outer join2-- 栗子
SELECT empno,ename,sal,deptno,dname,loc
FROM emp
NATURAL JOIN dept;

4、outer join(外连接)

1、left outer join (左外连接)

在这里插入图片描述

左表为基础,左表信息全部显示,右表信息对应显示

-- 格式
select...
from 左表
left outer join 右表
on 连接条件 [ + 查询条件 (先筛选再连接)]
[ where 查询条件 (先连接再筛选) ]-- 栗子
SELECT
e.(all),
d.(all)
FROM emp e	-- 左边的表emp是主表
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno;-- 92语法
SELECT
e.*,d.*
FROM emp e,dept d
WHERE e.deptno=d.deptno(+);
2、right outer join (右外连接)

在这里插入图片描述

以右表为基础,右表信息全部显示,左表信息对应显示

-- 格式
select...
from 左表
right outer join 右表
on 连接条件 [ + 查询条件 (先筛选再连接)]
[ where 查询条件 (先连接再筛选) ]-- 栗子
SELECT
e.(all),
d.(all)
FROM emp e	-- 右边的表dept是主表
RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno;-- 92语法
SELECT
e.*,d.*
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno;
3、full outer join (满外连接)※注意:MySql不支持满外连接!※

左右表的数据都显示

-- 格式
select...
from1
full outer join2 -- Oracle用法
on 连接条件 [ + 查询条件 (先筛选再连接)]
[ where 查询条件 (先连接再筛选) ]-- 栗子
SELECT
e.(all),
d.(all)
FROM emp e
FULL OUTER JOIN dept d -- Oracle用法
ON e.deptno=d.deptno;

2、自连接

自己连接自己

-- 查询员工名字和对应领导的名字(所有人的信息都在这一张表里,包括上下级关系)
-- 把emp当成两张表:worker、leader
-- 查询条件是:worker.mgr=leader.empno
SELECT worker.empno,worker.ename,worker.mgr,leader.ename
FROM emp worker, emp leader
WHERE worker.mgr=leader.empno;

3、非等值连接

between … and …

-- 查询员工工资等级范围(salgrade表)
-- on的条件是个范围用between…and
SELECT
e.empno,e.ename,e.sal,s.grade
FROM emp e
INNER JOIN salgrade s
ON e.sal BETWEEN s.losal AND s.hisal;

3、联合查询【垂直堆砌】

*联合查询的3个特征:

  1. 要求参与合并的两个临时表的字段结构必须保持一致【字段个数,字段类型顺序】
  2. 将两个临时表数据行沿着垂直方向堆砌到同一个临时表
  3. 联合查询生成临时表的字段只能来自于【第一个临时表字段】

1、intersect (交)

对两个结果集进行交集操作,不包括重复行,不排序

SELECT empno,ename,sal,deptno FROM emp
INTERSECT
SELECT empno,ename,sal,deptno FROM emps;

2、union (并)

1、union

对两个结果集进行并集操作,不包括重复行,默认进行了union默认的排序

SELECT empno,ename,sal,deptno FROM emp
UNION
SELECT empno,ename,sal,deptno FROM emps;

2、union all

对两个结果集进行并集操作,包括重复行,没有排序

SELECT empno,ename,sal,deptno FROM emp
UNION ALL
SELECT empno,ename,sal,deptno FROM emps;

3、minus (差)

对两个结果集进行差集操作,不包括重复行,默认进行minus的默认排序

SELECT empno,ename,sal,deptno FROM emp
MINUS
SELECT empno,ename,sal,deptno FROM emps;

4、except (除去)※注意:MySql不支持except!※

EXCEPT运算自动去除重复,如果想保留所有的重复,必须用EXCEPT ALL代替EXCEPT,结果中出现的重复元组数等于两集合出现的重复元组数之差(前提是差是正值)

-- Oracle用法
SELECT empno,ename,sal,deptno FROM emp
EXCEPT
SELECT empno,ename,sal,deptno FROM emps;

http://chatgpt.dhexx.cn/article/0pk7r6rp.shtml

相关文章

图解数据库多表查询(多表联查)的几种方式

多表查询,也被称为多表连接查询。 为什么会有多表查询这个操作呢? 在实际项目开发过程中,会出现多张表,用于分类存储不同的信息,我们测试需要的数据也会来自不同的表,因此需要使用多表查询。 我们常用的…

史上最牛mysql-06 (多表连接)

多表连接 个人博客 :www.xiaobeigua.icu 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段&…

sql多表查询

1.多表查询概念:从多张表查询数据 2.分类:连接查询和子查询。 有两张表A、B 连接查询: 内连接 相当于查询A、B交集数据 例1:select * from emp,dept where emp.dep_iddept.id; 外连接 左外连接:相当于查询…

sql语句之多表查询

文章目录 一、笛卡尔积(交叉连接) ---->cross join1、概念2. 语法3.示例 二、内连接---->inner join1、概念2. 语法3.示例 三、外链接---->outer join1、概念2. 语法3.示例 四、联合连接---->union1、概念2.示例 一、笛卡尔积(交叉连接) ---->cross join 1、概…

连接查询(多表查询)——MySQL

连接查询(多表查询) 又称多表查询,当查询的字段涉及多个表的时候,就要用到连接查询 分类: 为表起别名: 提高语句的简洁度区分多个重名字段注意:如果为表起了别名,则查询的字段就不…

MySQL-多表查询

一、表架构 student(sid,sname,sage,ssex) 学生表course(cid,cname,tid) 课程表sc(sid,cid,score) 成绩表teacher(tid,tname) 教师表 二 、建表sql语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for course -- --…

Java中的XML解析

前言 这几天在手写Spring IOC的时候遇上了xml文件的解析,通过解析Spring.xml配制文件的方式来创建对象。因为之前从来都没遇见过相关的需求,所以对此做一份记录 XML (eXtensible Markup Language) 意为可扩展标记语言,被多数技术人员用以选择…

Java - XML文件解析

Java对XML文件的解析 一、前言二、实例分析 - DOM方式解析XML文件2.1 XMLDomParseUtil - 抽象工具类2.2 待解析xml文件示例2.3 解析xml文件2.3.1 新建一个用于存储xml文件中各节点的属性和属性值的类2.3.2 解析实际节点 2.4 测试 一、前言 1、HTTP网络传输中的数据组织方式有三…

Java解析XML文件的方式

在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求。一般来讲,有基于DOM树和SAX的两种解析xml文件的方式,在这部分里,…

java解析xml格式的节点属性值

xml示例&#xff1a; <ResponseContent><Parameter><Document><RecordSet id"1"><Master name"purchase"><Record><Field name"orderNumber" value"1P05-151200172"/><Field name"…

Java解析XML字符串

在网上找了很多Java语言解析XML字符串的资料&#xff0c;很多内容写得很繁复&#xff0c;没有普适性&#xff0c;遂自己动手写了一个用Java解析XML的工具类。话不多说&#xff0c;直接看下面代码&#xff1a; XML解析工具类&#xff1a; import org.dom4j.Document; import o…

JAVA解析xml报文

目录 问题需求 响应报文格式 1&#xff0c;开发导入的依赖 2&#xff0c;开发样例 3&#xff0c;测试结果 问题需求 在工作中此项目请求指定项目之后&#xff0c;项目会返回一个xml报文格式的响应&#xff0c;此时我需要判断返回的报文是否是成功的响应报文&#xff0c;如…

Java解析xml

记录工作中遇到的一些问题和解决方式&#xff0c;自己摘抄整理了一下用来巩固&#xff0c;如有不足或有更好的方式 欢迎交流。 java解析xml的话有四种方式&#xff0c;分别为DOM,SAX,DOM4J,JDOM 转载&#xff1a;Java解析XML(4种方法)_蓝星花的博客-CSDN博客_java解析xml 这里的…

Java解析XML(4种方法)

xml文件 <?xml version"1.0" encoding"utf-8" ?> <class><student><firstname>cxx1</firstname><lastname>Bob1</lastname><nickname>stars1</nickname><marks>85</marks></stud…

混合开发架构|Android工程集成React Native、Flutter、ReactJs

混合开发架构|Android工程集成React Native、Flutter、ReactJs 架构设计说明创建安卓原生工程创建Flutter集成嵌入原生工程 创建React Native解决RN报错问题集成嵌入原生工程RN集成后&#xff0c;启动报错 底部导航栏架构设计原生仿招商银行首页原生Android Socket 即时通讯Rea…

Android MVVM开发框架

MVVM 数据双向绑定&#xff0c;通过数据驱动UI&#xff0c;M提供数据&#xff0c;V视图&#xff0c;VM即数据驱动层 MVP框架图 &#xff08;图片来源于网络&#xff09; 学习MVVM开发框架&#xff0c;要先了解DataBinding&#xff0c;DataBinding 是什么&#xff1f; DataBi…

Android: 开发框架设计

Android 开发框架 Android运用框架的目的不外乎是实现代码的代码解耦、逻辑分类、快速集成 便于维护等目的&#xff1b;Android 开发架构从早期的MVC &#xff0c;到近年到MVP 架构&#xff0c;到最近流行到MVVM 架构。不断到对业务逻辑、代码结构进行分层&#xff0c;便于快速…

安卓框架

http://www.cnblogs.com/jincheng-yangchaofan/articles/7018780.html 框架&#xff1a;提供一定能力的小段程序 一.榜单介绍 排行榜包括四大类&#xff1a; 单一框架&#xff1a;仅提供路由、网络层、UI层、通信层或其他单一功能的框架 混合开发框架&#xff1a;提供开发hy…

安卓应用开发顶级框架大盘点,总有一款适合你

作者 | Slava Vaniukov 译者 | 苏本如&#xff0c;责编 | 夕颜 封图 | CSDN下载自视觉中国 出品 | CSDN&#xff08;ID:CSDNnews&#xff09; 随着软件开发向移动应用的转变&#xff0c;越来越多的企业意识到&#xff0c;移动应用程序对于企业和客户之间建立牢固的联系至关重要…

嵌入式Android底层开发(一)——安卓开发的整体框架与简述

一、Android简介 Android是一种基于Linux内核&#xff08;不包含GUN组件&#xff09;的自由及开放源代码的操作系统&#xff0c;主要使用于移动设备&#xff0c;如智能手机和平板电脑&#xff0c;由美国Google公司和开放手机联盟领导及开发。 主要参数表&#xff1a; 参数上…