iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL的多表关联查询
  • 649
分享到

MySQL的多表关联查询

mysql数据库java 2023-08-22 07:08:50 649人浏览 八月长安
摘要

一、多表关联查询 多表关联查询是使用一条sql语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是将多张表的数据没有条件地连接在一起进行展示。 1.1.1 语法 使用交叉查询类别和商品 -- 目标:查询所有分类,以及每个分类

一、多表关联查询

多表关联查询是使用一条sql语句,将关联的多张表的数据查询出来。

1.1 交叉查询

交叉查询就是将多张表的数据没有条件地连接在一起进行展示。

1.1.1 语法

使用交叉查询类别和商品

-- 目标:查询所有分类,以及每个分类下的所有商品信息SELECT tc.*,tp.* FROM t_cateGory tc,t_product tp;SELECT * FROM t_category,t_product;-- 这个语句查询出来是一个笛卡尔积,里面有很多错误的数据,所以不用,这种查询叫做交叉查询

通过查询结果可以看到,交叉查询其实是一种错误的做法,在查询到的结果集中有大量的错误数据,称交叉查询到的结果集是笛卡尔积。

1.2 内连接查询

通常要查询的多个表之间都存在关联关系,通过关联关系(主外键关系)去除笛卡尔积。这种通过条件过滤去除笛卡尔积的查询,称之为连接查询。

连接查询又分为内连接查询外连接查询

1.2.1 隐式内连接

-- 1. 内连接查询:满足连接条件的数据才能查询出来,不满足连接条件的数据无法查询出来-- 1.1 隐式内连接查询:-- select 要查询的字段 from 主表,从表 where 从表的外键 = 主表的主键SELECT tc.*,tp.* FROM t_category tc,t_product tp WHERE tp.cno = tc.cid;

1.2.2 显式内连接

-- 1.2 显式内连接查询:-- select 要查询的字段 from 主表 [inner] join 从表 on 从表的外键 = 主表的主键SELECT * FROM t_product tp INNER JOIN t_category tc ON tp.cno = tc.cid;
-- 查询手机数码分类下的所有商品的信息以及分类信息SELECT * FROM t_product tp INNER JOIN t_category tc ON tp.cno = tc.cid WHERE tc.cname='手机数码';

1.2.3 内连接查询的特点

主表和从表的数据都是满足连接条件则能够查询出来,不满足连接条件则不会查询出来。

1.3 外连接查询

如果要保证查询出某张表的全部数据情况下进行连接查询,急需要使用外连接查询。

外连接查询分为左外连接和右外连接。

1.3.1 左外连接查询

以join左边的表为主表,展示主表的所有数据,根据条件查询连接右边表的数据,若满足条件则展示,若不满足则以null显示。

可以理解为:在内连接的基础上保证左边表的数据全部显示

-- 2. 外连接查询:会查询出主表的所有数据,从表的数据满足条件则能查询出来,不满足则查询不出来-- 2.1 左外连接查询:以join左边的表作为主表,能查询出左边的表的所有数据SELECT * FROM t_product tp LEFT OUTER JOIN t_category tc ON tp.cno = tc.cid;

1.3.2 右外连接查询

以join右边的表为主表,展示右边表的所有数据,根据条件查询join左边表的数据,若满足则展示,若不满足则以null显示。

可以理解为:在内连接的基础上保证右边表的数据全部显示

-- 2.2 右外连接查询:以join右边的表作为主表,能查询出右边的表的所有数据SELECT * FROM t_product tp RIGHT OUTER JOIN t_category tc ON tp.cno = tc.cid;

1.4 uNIOn联合查询

联合查询并不是多表连接查询的一种方式。

联合查询是将多条查询语句的查询结果合并成一个结果并去掉重复数据。

全外连接查询的意思就是将左表和右表的数据都查询出来,然后按照连接条件连接。

-- 全外连接,使用union联合查询做全外连接-- union是将多个select语句查询到的结果进行合并,合并成一个结果,要求多个select语句查询到的结果的格式是一样的SELECT * FROM t_product tp LEFT OUTER JOIN t_category tc ON tp.cno = tc.cidUNIONSELECT * FROM t_product tp RIGHT OUTER JOIN t_category tc ON tp.cno = tc.cid

1.5 自连接查询

自连接查询是一种特殊的多表连接查询,因为两个关联查询的表是同一张表,通过取别名的方式来虚拟成两张表,然后进行两张表的连接查询。

-- 员工表CREATE TABLE emp (  id INT PRIMARY KEY, -- 员工id  ename VARCHAR(50), -- 员工姓名  mgr INT , -- 上级领导  joindate DATE, -- 入职日期  salary DECIMAL(7,2) -- 工资);-- 添加员工INSERT INTO emp(id,ename,mgr,joindate,salary) VALUES (1001,'孙悟空',1004,'2000-12-17','8000.00'),(1002,'卢俊义',1006,'2001-02-20','16000.00'),(1003,'林冲',1006,'2001-02-22','12500.00'),(1004,'唐僧',1009,'2001-04-02','29750.00'),(1005,'李逵',1006,'2001-09-28','12500.00'),(1006,'宋江',1009,'2001-05-01','28500.00'),(1007,'刘备',1009,'2001-09-01','24500.00'),(1008,'猪八戒',1004,'2007-04-19','30000.00'),(1009,'罗贯中',NULL,'2001-11-17','50000.00'),(1010,'吴用',1006,'2001-09-08','15000.00'),(1011,'沙僧',1004,'2007-05-23','11000.00'),(1012,'李逵',1006,'2001-12-03','9500.00'),(1013,'小白龙',1004,'2001-12-03','30000.00'),(1014,'关羽',1007,'2002-01-23','13000.00');-- 自连接查询:表中的一个字段作为外键指向本表的主键SELECT employee.*,manager.ename FROM emp employee,emp manager WHERE employee.mgr=manager.id AND employee.ename='孙悟空'

二、子查询

如果一个查询语句嵌套在另一个查询语句里面,那么这个查询语句就称之为子查询。

根据位置不同,可以分为where型、from型、exists型。

2.1 where型

  • 子查询是单值结果,那么可以对其使用(=,>等比较运算符)
  • 子查询是多值结果,那么可对其使用([not] in (子查询结果),或>all(子查询结果),或>=all(子查询结果),any(子查询结果),或>=any(子查询结果),
-- where型子查询,是将子查询语句放在where后面-- 需求:查询emp表中的薪资最高的那个员工的信息-- where后面的条件中不能使用聚合函数-- 第一步:查询出最高的薪资SELECT MAX(salary) FROM emp   -- 50000-- 第二步:根据上一步查询出来的最高薪资,查询具体的员工信息SELECT * FROM emp WHERE salary = 50000-- 两步合成一步SELECT * FROM emp WHERE salary = (SELECT MIN(salary) FROM emp)-- 需求:查询出手机数码和食物分类下的所有商品信息SELECT * FROM t_product WHERE cno IN(SELECT cid FROM t_category WHERE cname IN('手机数码','食物'))-- 需求:查询出价格最高的商品信息-- 思路一:匹配最高的价格SELECT * FROM t_product WHERE price = (SELECT MAX(price) FROM t_product)-- 思路二:按照价格的降序排列,取第一个SELECT * FROM t_product ORDER BY price DESC LIMIT 0,1-- 思路三:查询价格大于所有商品的商品SELECT * FROM t_product WHERE price>=ALL(SELECT price FROM t_product)

2.2 from型

子查询的结果是多行多列的结果,类似于一张表格。

必须给子查询取别名,即临时表名,表的别名不要加""和空格。

-- from型的子查询,这个针对的是子查询的结果是多行、多列数据-- 需求:查询每个分类下的分类名、商品总数-- 思路一:使用连接查询-- 使用外连接,查询出分类表的所有数据SELECT tc.cname,COUNT(tp.pid) FROM t_category tc LEFT OUTER JOIN t_product tp ON tp.cno=tc.cid GROUP BY tc.cname-- 思路二:使用子查询-- 第一步:对t_product根据cno进行分组查询,统计每个分类的商品数量SELECT cno,COUNT(pid) FROM t_product GROUP BY cno-- 第二步:用t_category表去连接第一步查询出来的结果,进行连接查询,此时要求查询出所有分类SELECT tc.cname '商品名称',IFNULL(tn.total,0) '总数量' FROM t_category tc LEFT OUTER JOIN (SELECT cno,COUNT(pid) total FROM t_product GROUP BY cno) tn ON tn.cno=tc.cid

2.3 exists型

-- exists型子查询-- 需求:查询那些有商品的分类-- 连接分类表和商品表进行查询-- exists是如果子查询语句能够至少查询到一条数据,就返回TRUE,否则就返回FALSESELECT cid,cname FROM t_category tc WHERE EXISTS (SELECT * FROM t_product tp WHERE tp.cno = tc.cid)

学海无涯苦作舟

这里写图片描述

来源地址:https://blog.csdn.net/HunterArley/article/details/127685224

您可能感兴趣的文档:

--结束END--

本文标题: MySQL的多表关联查询

本文链接: https://www.lsjlt.com/news/377612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql 多表关联查询
    文章目录 1. Mysql中表之间的关系1.1 多表关系1.2 外键约束 2. 多表联合查询2.1 交叉连接查询:笛卡尔积2.2 内连接查询:inner join2.3 外连接查询2.3.1 左连接:2.3.2 右连接:2.3....
    99+
    2023-08-21
    mysql 数据库 sql
  • MySQL的多表关联查询
    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是将多张表的数据没有条件地连接在一起进行展示。 1.1.1 语法 使用交叉查询类别和商品 -- 目标:查询所有分类,以及每个分类...
    99+
    2023-08-22
    mysql 数据库 java
  • MyBatis 多表关联查询
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识...
    99+
    2023-09-01
    mybatis java mysql
  • MySQL联合查询(多表查询)
    一、内连接 select *from 表1 [ inner | cross ] join 表2 [ on过滤条件 ] [ where查询条件 ] ; [ inner | cross ]: join 内连接关键字(必须要有...
    99+
    2023-09-14
    mysql 数据库 database
  • 【MySQL】MySQL表之联合查询(多表查询)
    📌前言:本篇博客介绍MySQL数据库的MySQL表之联合查询(多表查询),学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。 那我们废话不多说,直接进入主体!...
    99+
    2023-08-16
    mysql 数据库 java
  • MySQL多表关联查询实例分析
    本篇内容介绍了“MySQL多表关联查询实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据库设计范式目前数据库设计有五种范式 , 一般...
    99+
    2023-06-30
  • mysql 多表关联查询如何改进
    mysql 多表关联查询怎么优化好呢 🚨 使用正确的连接类型优化 WHERE 子句为关联字段创建索引减少查询的字段考虑使用分布式查询尽量避免子查询优化连接顺序利用 EXPLAIN 分析查询分解复杂查询使用视图...
    99+
    2023-08-28
    mysql 数据库 sql 多表 优化
  • MySQL详细讲解多表关联查询
    目录数据库设计范式外键内连接 外连接结语数据库设计范式 目前数据库设计有五种范式 , 一般我们数据库只需要满足前三项即可 第一范式 : 确保每列保持原子性 什么是原子性 意...
    99+
    2024-04-02
  • PHP中的多表关联查询技巧
    PHP中的多表关联查询技巧关联查询是数据库查询的重要部分,特别是当你需要展示多个相关数据库表内的数据时。在PHP应用程序中,在使用MySQL等数据库时,多表关联查询经常会用到。多表关联的含义是,将一个表中的数据与另一个或多个表中的数据进行比...
    99+
    2023-05-24
    技巧 多表查询 关联查询
  • mysql多表关联查询优化的方法是什么
    在优化MySQL多表关联查询时,可以采取以下方法: 确保表中的相关字段有索引:在进行多表关联查询时,通常会使用到相关字段进行连接...
    99+
    2024-04-09
    mysql
  • 【MySQL】聚合查询 + 多表联合查询(重点)
    文章目录 前言一、聚合查询1, 聚合函数2, 聚合函数使用示例3, GROUP BY 子句4, HAVING 子句 二、联合查询(重点)1, 笛卡尔积2, 内连接2.1, 示例12...
    99+
    2023-09-29
    mysql 数据库 聚合查询 联合查询 内连接
  • Hibernate多表关联查询怎么实现
    本篇内容介绍了“Hibernate多表关联查询怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Hibernate简介Hiberna...
    99+
    2023-06-17
  • oracle多表关联查询如何实现
    在Oracle数据库中,可以使用SQL语句实现多表关联查询。以下是一个示例: 假设有两个表:表A和表B,它们有一个共同的字段ID可以...
    99+
    2024-04-09
    oracle
  • mybatis-plus多表关联查询功能的实现
    学习目标: mybatis-plus多表关联查询 学习内容: mybatis-plus多表关联查询 实体类部分代码 @Data @AllArgsConstructor @NoAr...
    99+
    2024-04-02
  • Mysql 复杂查询丨联表查询
    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! JOIN(联表查询) 联表查询(Join)是一种在数据库中使用多个表进行关联查询的操...
    99+
    2023-08-16
    mysql 数据库
  • 关于QueryWrapper,实现MybatisPlus多表关联查询方式
    目录QueryWrapper实现MybatisPlus多表关联查询1.dao层接口使用Select注解写SQL2.service层代码示例3.反射工具类4.判空工具类Myb...
    99+
    2024-04-02
  • mybatis-plus 多表关联条件分页查询
    此处以一对多,条件分页查询为例: 一.表结构: 主表 CREATE TABLE `t_user` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_name` varchar(255) DEFAU...
    99+
    2023-08-20
    mybatis mysql java
  • Thinkphp 6.0多对多关联查询
    本节课我们来了解关联模型中,多对多的关联查询以及新增删除等操作。 一.多对多关联 1. 复习一下一对一,一个用户对应一个用户档案资料,是一对一关联; 2. 复习一下一对多,一篇文章对应多个评论,是一对多关联;...
    99+
    2023-09-05
    php 数据库 mysql
  • Mybatis表的关联查询详情
    目录导语什么时候用<resultMap>标签映射什么时候用<association>&<collection>Mybatis表的关联查询一对多查询多对一查询一...
    99+
    2024-04-02
  • MongoDB中多表关联查询($lookup)的深入讲解
    一.  聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息。 聚合管道操作主要包含下面几个部分: ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作