MySQL—多表查询(概述、基本实操、分类)

一、引言

概述:指的是从多张表中查询数据。

二、实操

打开 DataGrip 进行尝试多表查询。

(1)表结构的准备以及数据的插入

分别是:员工表 emp 以及 部门表。员工表中字段 dept_id 是外键,关联部门表的主键 id。

emp:员工表(增加了17条记录)

补充:set null ,当父表主键删除字段值,对应子表外键字段值变成 null 。

部门表:dept (6条记录)
(2)多表查询
sql 复制代码
SELECT * FROM emp,dept;

出现这样的问题,就需要我们解决。下面介绍笛卡儿积的相关知识。

(3)笛卡儿积

概述:笛卡尔乘积是指在数学中,两个集合:A集合和B集合的所有组合情况。

(在多表查询时,需要消除无效的笛卡尔积)

例如:

所以刚刚我们查询的两张表:emp、dept ,就是它们所有的组合情况(17*6=102条)。

根据我们的需求,我们需要的是以下这种查询结果就可以了:(需要把无效的笛卡尔积消除掉)

(4)解决方法:

我们要通过它们两张表,所关联的字段去解决这个问题。

所以让表 emp 的字段 dept_id等于 表 dept 的字段 id (dept_id = dept.id)就可以了。

sql 复制代码
SELECT * FROM emp,dept WHERE(emp.dept_id = dept.id) ORDER BY emp.id;

这就是我们所介绍和学习的多表查询。

三、多表查询的分类

多表查询的分类主要分为两类。

1、连接查询(分为内连接、外连接以及自连接)

内连接:

相当于查询A、B交集部分数据

外连接:

左外连接:查询左表所有数据,以及两张表交集部分数据

右外连接:查询右表所有数据,以及两张表交集部分数据

自连接:

指的是当前只有一张表。当前表与自身的连接查询,自连接必须使用表别名(后面会提到)
2、子查询

相关推荐
zlwool6 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
小灰灰搞电子7 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
软件聚导航9 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
2601_9609067210 小时前
1X发布自己的世界模型1XWM
mysql·mongodb·rabbitmq·memcached
学习星球10 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
GoppViper10 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
2601_9621741711 小时前
Redis 简介
数据库·redis·wpf
夜雪一千11 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
ruleslol11 小时前
MySQL: OR查询为什么会导致索引失效
mysql
Highcharts.js12 小时前
Highcharts 下钻(Drilldown)柱状图 Demo
数据库·信息可视化·hbase·highcharts·drilldown·js模块·下钻图表