【MySQL】多表查询策略(多表联查子查询)

article/2025/9/24 8:44:57

目录

一、MySQL多表查询

二、准备工作

1.运行环境

2.创建公司表

3.创建员工表

三、多表查询

(一)多表联查—同时查询多张表

1.联结

2.左连接

3.右连接

4.内连接

(二)子查询

1.SELECT子查询

2.WHERE子查询

3.FROM子查询

总结


一、MySQL多表查询

MySQL语句学习的难点和重点就在于多表查询,同时MySQL也有诸多方法供大家选择,不论是多表联查(联结表、左连接、右连接……)还是子查询(SELECT子查询、WHERE子查询、FROM子查询),掌握一种方法达到目的即可,当然其他方法也需要理解,本文将阐述完整的多表查询方法。

首先分享下学习链接,大家可以在看完本文后选择以下链接巩固学习成果,我相信如果都给掌握的话,MySQL语句中80%的问题都将迎刃而解!!

视频学习链接:SQL学习之道_哔哩哔哩_bilibili

在线编程链接:SQL必知必会__牛客在线编程

二、准备工作

1.运行环境

本文在MySQL在线运行网址操作,模拟MySQL运行,若大家有条件也可在MySQL或navicat中操作运行

2.创建公司表

以下是创建数据表、新增数据等基础操作,这些语句都是固定的,这是创建的第一个表(company表),id为主键。

#创建数据库,可忽略,一般用不到
CREATE DATABASE test;
use test;
#创建数据表company
CREATE TABLE company (id INT PRIMARY KEY,name VARCHAR(255) NOT NULL
);
#新增数据
INSERT INTO company VALUES(1,'IBM');
INSERT INTO company VALUES(2,'HP');
#单表查询数据
SELECT * FROM company;

运行结果:

3.创建员工表

创建第二个表(menber表),增删改查基础操作都在下边了,希望能帮助大家加深对于基础操作的理解,id为主键。

#创建数据表menber
CREATE TABLE menber(id INT PRIMARY KEY,name VARCHAR(255) NOT NULL,sal DOUBLE(10,2),comid INT
);
#新增数据
INSERT INTO menber VALUES(101,'小李',3000,1);
INSERT INTO menber VALUES(102,'小王',4000,1);
INSERT INTO menber VALUES(103,'小刘',5000,2);
INSERT INTO menber VALUES(104,'小孙',5000,2);
INSERT INTO menber VALUES(105,'小明',7000,3);
#删除数据
DELETE FROM menber WHERE comid = 3;
#修改数据
UPDATE menber SET sal=6000 WHERE id=104;
#单表查询数据
SELECT * FROM menber;

运行结果:

 注:company表和menber表中的id、name不是一回事,id和conmid是公共列

三、多表查询

创建完公司表和员工表后就具备进行多表查询的条件了,主要分为多表联查和子查询两部分,也是本文的重点。

(一)多表联查—同时查询多张表

本人常用的是联结,左右连接、内连接一般都能解决问题,只需要添加WHERE条件即可。

1.联结

若查询n张表,必须查询指定n-1个公共列的条件

SELECT c.name 公司名, m.name 员工名,m.sal, company公司信息
FROM company c, menber m
WHERE c.id = m.comid;

应用:查询IBM的员工信息

SELECT m.*
FROM company c, menber m
WHERE c.id = m.comid AND c.name = ‘IBM’

运行结果:

拓展:笛卡尔积(A表有m条记录,B表有n条记录,结果m*n条)

SELECT * FROM company, menber

运行结果:

2.左连接

左表是主表、左表中满足条件的记录会查询出来、左表中【不满足】条件的也会查出来,运行结果也以左表为主。

SELECT *
FROM company c LEFT JOIN menber m ON c.id = m.comid

运行结果:

3.右连接

右表是主表、右表中所有的记录会查询出来,运行结果以右表为主。

SELECT *
FROM menber m RIGHT JOIN company c ON c.id = m.comid

运行结果:

4.内连接

查询的是满足条件的记录

SELECT *
FROM menber m INNER JOIN company c ON c.id = m.comid

运行结果:

(二)子查询

把一个查询的结果当作另一个查询的条件,可以说是一步步解决问题,较符合逻辑。

应用:查询小刘的公司名  #HP

1.SELECT子查询

SELECT  (SELECT name from company WHERE id =conid)
FROM menber 
WHERE name = '小刘'

逻辑:先取menber表这一列包含小刘的数据,再对该行数据进行联结

 左:menber表,右:company表

运行结果:

2.WHERE子查询

SELECT name 
FROM company
WHERE id = (SELECT comid FROM menber WHERE name = '小刘')

WHERE子查询相比前一个逻辑更为简单,先在menber表中找出小刘的comid,由于menber表的comid和company的id是公共列,可直接用于company表的查询。

运行结果:

3.FROM子查询

用于3张表以上的连接查询较多,有A、B、C三张表,先查询A和B两张表、再用查询结果和c表连接查询,select子查询和where子查询是把子查询的结果当成【数据】,from子查询是把查询结果当成【表】

SELECT c.name  
FROM (SELECT * FROM menber WHERE name = '小刘') t1,company c
WHERE t1.comid = c.id

运行结果:


总结

大家如果有疑问都可以评论提出,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。


http://chatgpt.dhexx.cn/article/MjxL4urS.shtml

相关文章

MySQL----多表查询

MySQL----多表查询 多表关系表与表之间的联系:一对多(多对一)多对多一对一 多表查询多表查询的分类数据准备内连接外连接自连接联合查询子查询标量子查询列子查询行子查询表子查询 多表查询案例 多表关系 在进行数据库表结构的设计时,会根据业务的需求和…

SQL语句多表查询

多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键&a…

十、多表查询

十、多表查询 *多表查询的本质就是把多张表合并成一个临时表 1、多表数据合并方案 连接查询合并方案【最常见】 首先确保两张表之间存在【隶属关系】将两张表中的数据行【沿着水平方向进行拼接】最终得到一个拥有【完整隶属关系】的新数据行 联合查询合并方案 不需要两张表之…

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

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

史上最牛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;便于快速…