MYSQL基础知识之多表查询

1、多表关系

在数据表中,各个表结构之间存在着各种关系(一对一、一对多、多对多)。

一对一关系:

示例:学生与学生详情的关系,一个学生对应一个详细情况,一个详细情况对应一个学生。

实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的UNIQUE。

一对多关系:

示例:学生与班级的关系,一个班级对应多个学生,一个学生对应一个班级。

实现:在一对多关系中,在多的一方建立外键,指向一的一方的主键。

多对多关系:

示例:学生与课程的关系,一个学生可以选修多门课程,一门课程也可以给多个学生选择。

实现:在多对多关系中,建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

 

2、多表查询

  多表查询就是从多张表中去查询数据,在实际开发中大多数情况数据都是存储在多张中的,它们通过一个关联关系连接起来,这样就可以通过这个关联关系去查询到想要的数据。多表查询可以分为连接查询、联合查询和子查询。

 

3、连接查询

连接查询有:

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

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

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

 

3.1、内连接

内连接可以分为隐式内连接和显式内连接,语法格式如下:

# 隐式内连接
select 字段列表 FROM 表1,表2 where 条件.....;

# 显式内连接
select 字段列表 FROM 表1 [inner] join 表2 on 连接条件....;

 

3.2、外连接

语法:

# 左外连接
select 字段列表 FROM 表1 left [outer] join 表2 on 条件...;

# 右外连接
select 字段列表 FROM 表1 right [outer] join 表2 on 条件...;

 

3.3、自连接

语法:select 字段列表 from 表A 别名A join 表名A 别名B on 条件...;

 

4、联合查询

联合查询就是把多次查询的结果合并起来,形成一个新的查询结果集,使用union、union all关键字连接。注意:在联合查询中,多张表的列数、字段类型必须保持一致

语法:

select 字段列表 from 表A union [all] select 字段列表 from 表B;

 

 5、子查询

在SQL语句中嵌套select语句,称为嵌套查询,又称子查询。

语法:select * from t1 where column1=(select column1 from t2);

子查询外部的语句可以是insert、update、delete、select的任何一个。

根据子查询结果不同,分为:

标量子查询(子查询结果为单个值);

列子查询(子查询结果为一列);

行子查询(子查询结果为一行);

表子查询(子查询结果为多行多列)。

根据子查询位置,可以分为:where之后,from之后,select之后。

 

5.1、标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。

常用的操作符:= 、<> 、 > 、 >= 、 < 、 <=。

 

5.2、列子查询
子查询返回的结果是一列或多列,这种子查询称为列子查询。

常用的操作符:

IN:在指定的集合范围之内,多选一;

NOT IN :不在指定的集合范围之内;

ANY:子查询返回列表中,有任意一个满足即可;

SOME:子查询返回列表中,有任意一个满足即可;

ALL:子查询返回列表的所有值都必须满足。

 

5.3、行子查询
子查询返回的结果是一行或多列,这种子查询称为行子查询。

常用的操作符:=、<>、IN 、NOT IN

 

5.4、表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。

常用的操作符为IN。

 

6、附7种SQL JOINS的实现

 

posted @ 2023-04-06 21:48  城为唯一  阅读(104)  评论(0编辑  收藏  举报