mysql多表查询

发布于:2024-05-23 ⋅ 阅读:(118) ⋅ 点赞:(0)

目录

多表查询概述

多表查询分类

内连接查询语法:

自连接查询语法:

联合查询-union,union all

子查询


概述:

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

一对多(多对一)
案例: 部门与普通员工的关系
关系:一个部门对应多个员工,一个员工对应一个部门
实现: 在多的一方建立外键,指向一的一方的主键
多对多
案例:学生与课程的关系
关系:一个学生可以选修多门课程,一门课程也可以提供多个学生
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两个主键
一对一
案例:用户详情的关系
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,以提升操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
多表查询概述
概述:指从多张表中查询数据
笛卡尔积:笛卡尔积是指在数学中,两个集合A和集和B的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)
多表查询分类
连接查询
    内连接 : 相当于查询A、B所有数据
    外连接:
        左外连接:查询走表所有数据,以及两张表交集部分数据
        右外连接:查询右表所有数据,以及两张表交集部分数据
    自连接:当前表与自身的连接查询,自连接必须使用表别名
子查询
    

内连接查询语法:

隐式内连接

select 字段 from table1,table2 where condition.....

显示内连接

select 字段列表 from table [inner] join table2 on 连接条件.......

注意:内连接查询的是两张表交集的部分。

外连接查询语法:

左外连接

select 字段列表 from table left [outer] join table on condition

相等于查询表的所有数据包含 两个表的交集部分的数据

右外连接

select 字段列表 from table right [outer] join table on condition

相等于查询表的所有数据包含 两个表的交集部分的数据

自连接查询语法:

select 字段列表 from table as A join table B on condition......

自连接查询,可以是内连接查询,也可以是外连接查询。

联合查询-union,union all

对于union查询,就是把多次查询的结果合并起来,现成一个新的查询结果集。

select 字段列表 from table ....
union [all]
select 字段列表 from table ....
注意:对于联合擦护心的多张表的列数必须保持一致,字段类型也需要保持一致。
​
union all 会将全部的数据直接合并在一起,union会对合并之后的数据去重。
子查询

概念:sql语句中嵌套select 语句,称为嵌套查询,又称子查询。

select * from t1 where column1 = (select column1 from t2)
子查询外部的语句可以是insert/update/delete/select的任何一个
根据子查询结果不同,分为:
    1.标量子查询(子查询结果为单个值)
        子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。
        常用的操作符:= <> > >= < <=
    2.列子查询(子查询结果为一列)
        子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
        In       在指定的集合范围之内,多选一
        not in   不在指定的集合范围之内
        any      子查询返回列表中,有任意一个满足即可
        some     与any等同,使用some的地方都可以使用any
        all      子查询返回列表的所有值必须满足
        常用的操作符: in 、not in、 any、 some、 all
    3.行子查询(子查询结果为一行)
        子查询返回的结果是一行(可以是多列),这种子查询称为行子查询
        常用的操作符:= 、<> 、in、 not in
    4.表子查询(子查询结果为多行多列)
        子查询返回的结果是多行多列,这种子查询称为表字查询
        常用的操作符:IN
根据子查询位置,分为:where之后、from之后、select之后

网站公告

今日签到

点亮在社区的每一天
去签到