MySQL-多表查询

概念:指从多张表中查询数据


多表关系:

多表关系关联:

一对多:在多的乙方设置外键,关联一的一方的主键。

多对多:建立中间表,中间表包含两个外键,关联两张表的主键。

一对一:在其中任意一方设置外键(UNIQUE),关联另一方的主键。

连接查询

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

       隐式内连接:SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

       显示内连接:SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;

2.外连接:当我们的一张表相关联的数据为NULL时,使用外连接就可以把表中为NULL的数据也查询出来

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

                            SELECT 字段列表 FROM 表1 LEFT [OURER] JOIN 表2 ON 连接条件...;

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

                            SELECT 字段列表 FROM 表1 RIGHT [OURER] JOIN 表2 ON 连接条件...;

3.自连接:当前表与自身的连接查询,自连接必须使用表别名,可以使用内连接也可以使用外连接查询,语法跟上面一样,给表取个别名当成两张表进行操作即

 联合查询

将多次查询的结果合并起来,形成一个新的查询结果,相当于‘且’。

注意:

1.去掉ALL可以去重。

2.联合查询的字段数,字段类型需要保持一致。

语法:   

        SELECT 字段列表 FROM 表 A...

        UNION[ALL]

        SELECT 字段列表 FROM 表 B...

子查询: SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

SELECT * FROM 表1 WHERE 字段=(SELECT 字段 FROM 表2);

子查询外部的语句可以是INSERT/UPDAT/DELETE/SELECT中的任何一个。

标量子查询:子查询结果为单个值

列子查询:子查询结果为一列

行子查询:子查询结果为一行

表子查询:子查询结果为多行多列

操作符:

IN:在指定集合范围多选一

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

ANY:子查询返回列表有一个满足即可

SOME:与ANY 等同

ALL:子查询返回列表所有值都得满足

注意:当给表取了别名之后,就不能使用原表名来限制字段

你可能感兴趣的:(mysql,数据库)