MySQL多表查询

  • Post author:
  • Post category:mysql




一、多表关系



1.基本概述

概述:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间互相关联,所以各个表结构之间也存在着各种联系。



2.表关系

数据库表关系有三种:一对多(多对一),多对多,一对一。



一对一关系

	A表中的一条记录对应B表中一条记录
	B表中的一条记录对应A表中的一条记录

举例:用户信息表–用户常用信息表

	创建一个主要信息表,展示信息表 ,创建展示信息表的时候关联主要信息表...



一对多关系

	A表中的一条记录对应B表中的多条记录.
	B表中的一条记录对应A表中的一条记录.
	这种关系叫一对多关系,A表示一方,B表示多方.
	一方叫主表,多方叫从表

举例:部门和员工

	如果要设计一对多的关系,先设计主表,再设计从表.
	在多的一方建立外键,指向一方的主表的主键.



多对多关系

	A表中的一条记录对应B表中的多条记录.
	B表中的一条记录对应A表中的多条记录.
	这两张表就是 多对多的关系.

举例: 订单表和商品表

	先创建 多对多 这两个表 
	   创建 订单表 和 商品表
	   再创建 订单商品中间表
	   再让 中间作为从方 关联 订单表和商品表...



二、多表的分类


概述

    连接查询
    		交叉连接
    				产生笛卡尔积,通常没有实际业务意义
    				关键字:cross join

            内连接查询:相当于查询A、B交集部分数据

            外连接查询:

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

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

             自连接:当前表与自身的连接查询,自连接必须使用表别名

    子查询(嵌套查询)



三、多表查询语法


概述

:多表查询顾名思义就是从多张表中一次性的查询出我们想要的数据。



连接查询



内连接查询

  • 语法
-- 隐式内连接 (隐藏了关键字  inner join on)
	select 字段列表 from1,2... where 条件;

-- 显式内连接
	select 字段列表 from1 [inner] join2 on 条件 inner join3 on 条件;

两种语法查询出来的结果是一样的!!

内连接相当于查询A B 交集数据



外连接查询

  • 语法
-- 左外连接
	select 字段列表 from1 left [outer] join2 on 条件;

-- 右外连接
	select 字段列表 from2 right [outer] join2 on 条件;

左外连接:相当于查询A表所有数据和交集部分数据

右外连接:相当于查询B表所有数据和交集部分数据



子查询

  • 概念


    查询中嵌套查询,称嵌套查询为子查询。
-- 语法
	select * from1 where 字段1 = (select 字段2 from2);

  • 子查询根据查询结果不同,作用不同

    • 子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断
    • 子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断
    • 子查询语句结果是多行多列,子查询语句作为虚拟表



版权声明:本文为weixin_44430860原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。