mysql基础之多表查询

mysql基础之多表查询

概述

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

  • 一对多(多对一)
  • 多对多
  • 一对一(拆分大表,做简化的小表,以提升操作效率)

注:mysql关系型数据库,所以肯定会产生关系咯
DCL语法建立对应关系(默认建立关联)

//查询
select * from 表1,2

! 会产生笛卡尔积(是你想的那个数学家呢)
表示为X×Y(人话就是产生很多,表现为根据表1遍历表2)
解决方法:

select * from 表1,表2 where 表1关联值 = 表2关联值

—需要满足DCL关联条件

  • 多表查询分类
    • 1.连接查询
      • 内连接:相当于查询A,B交集部分数据(中间那坨)
        请添加图片描述
	//隐式内连接[短](上面那个一样的)
	SELECT 字段列表 FROM 表1,表2 	WHERE 条件 ...;
	//显式内连接 [通常连接更高效,看到更清晰]
	SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;

注:建议在编写MySQL查询时使用显示连接,以提高性能并增强可读性和可维护性。(别名改了就只能用这个咯)

  • 外连接:
    + 左外连接:查询左表所有数据,以及两表交集部分数据(就上图片左边A全)

        SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件...;
        ```
    
    
  • 右外连接: 查询右表所有数据以及两张表交集部分数据(就上图片右边B全)

	SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON
	条件 ...;
  • 自连接: 当前表与自身的连接查询,自连接必须使用表别名(重)可内[查必须有的]外[查所有]
   SELECT 字段列表 FROM1  JOIN1 ON 条件 ...;
   条件 ...;
  • 子查询
    概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询.
SELECT * FROM t1 WHERE column1 =(SELECT column1 FROM t2);	
  • 联合查询-union,union all
    对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集.
 SELECT 字段列表 FROM 表A ...
 UNION[ALL]
 SELECT 字段列表 FROM 表B ...;

注意:UNION 去重返回
UNION ALL 直接返回
对于联合查询多张表的字段列数必须保持一致,字段类型也需要一致

  • 子查询外部的语句可以是INSERT /UPDATE/DELETE/SELECT 的任何一个.
    • 标量子查询
     SELECT * FROMWHERE= (嵌套查询)
    
  • 列子查询(就数据是列)
    子查询返回的结果是一列(可以是多列),这种子查询称为列子查询
    常用操作符:IN,NOT IN ,ANY,SOME,ALL
    请添加图片描述
SELECT * FROM 表 WHERE 字符列表 in(嵌套)

相当于多列( 空格 )表信息查询
-行子查询(就数据是行)
子查询返回的结果是一行(可以是多行),这种子查询称为行子查询
常用操作符:=,<>,IN,NOT IN

SELECT * FROM 表 WHERE (字符列表1,字符列表2) =(嵌套)

相当于多行( 空格 )表信息查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值