MySQL-第十篇多表连接查询

1、SQL92规范、SQL99规范

2、广义笛卡尔积,多表之间没有任何连接条件,得到的结果将是N x M条记录。

3、SQL92中的左外连接、右外连接,连接符有(+或*),放在连接条件那一边就叫做左或右外连接。

4、SQL99的连接查询

    1》交叉连接(cross join):就是广义笛卡尔积,不需要任何连接条件。

    2》自然连接(natural join):看是没有连接条件,实际以两个表中所有同名列作为连接条件,如果没有同名列则变成了交叉连接。

    3》using子句连接:using子句可以指定一列或者多列,用于显式指定两个表中的同名列作为连接条件。两个表必须都要有同名列,否则出错。

    4》on子句连接:连接条件。

5、左、右、全连接:left[outer] join、right[outer] join、full[outer] join,通过on子句来指定,既可以是等值连接,又可以是非等值连接。

    左连接:左表所有记录都会被查出。

    右连接:右表所有记录都会被查出。

    全连接:SQL99将全外连接两个表中所有不满足连接条件的记录全部列出。(MySQL没有全连接

6、子查询

  子查询就是在查询语句中嵌套另一个查询,子查询支持多层嵌套查询。

  将子查询当成数据表的用法,实际是把它作为一个视图使用,也叫行内视图。

  如果子查询返回多个值,在where子句中比较,可以使用in、any、all等关键字。

  any、all可以与>、>=、<、<、<=、<>、=等运算符结合使用。意思分别是其中任意一个、其中所有。=any相当于in的用法。<any小于最大值。>any大于最小值。<all小于最小值。>all大于最大值。

7、集合运算:交intersect、并union、差minus

    能进行集合运算的两个结果集,必须满足:

      ==>两个结果集包含的数据列数必须相等

      ==>两个结果集包含的数据列的数据类型必须一致。

    1》union并运算

       格式:

select 语句  union select 语句

    2》minus差运算(MySQL并不支持)

       格式:

select 语句  minus select 语句
select c_1,c_2 from xxx
where (c_1,c_2)
not in
(select b_1,b_2 from yyy);

   3》intersect交运算(MySQL并不支持)

       格式:

select 语句  inserct select 语句
select c_1,c_2 from xxx
join
yyy
on (c_1=b_1 and c_2=b_2);
原文地址:https://www.cnblogs.com/ZeroMZ/p/11370893.html