数据库--SQL进阶之多表查询

怎甘沉沦 提交于 2020-01-23 17:02:33

一. 合并结果集

  • 要求被合并的表中,类的类型和列数相同

  • UNION,去除重复行

  • UNION ALL,不去除重复行

      SELECT * FROM cd
      UNION ALL
      SELECT * FROM ab;
    

二. 连接查询

1.分类

  • 内连接
  • 外连接
  • 左外连接
  • 右外连接
  • 全外连接(MySQL不支持)
  • 自然连接

2.内连接

  • 方言:SELECT * FROM 表1 别名1, 表2 别名2 WHERE 别名1.xx=别名2.xx;
  • 标准: SELECT * FROM 表1 别名1 INNER JOIN 表2 别名2 WHERE 别名1.xx=别名2.xx;
  • 自然: SELECT * FROM 表1 别名1 UATURAL JOIN 表2 别名2;

3. 外连接

  • 左外:SELECT * FROM 表1 别名1 LEFT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;

左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能出来。左表中不满足条件的记录,右表部分都为NULL

  • 左外自然:SELECT * FROM 表1 别名1 NATURAL LEFT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;
  • 右外:SELECT * FROM 表1 别名1 RIGHT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;

右表记录无论是否满足条件都会查询出来,而左表只有满足条件才能出来。右表中不满足条件的记录,左表部分都为NULL

  • 右外自然:SELECT * FROM 表1 别名1 NATURAL RIGHT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;

  • 全连接:可以使用UNION来完成全连接。

三. 子查询

查询中有查询;

1. 出现的位置

  • where后作为条件存在
  • from后作为表存在

2. 条件

  • 单行单列:SELECT * FROM 表1 别名1 WHERE 列1 [= > < >= <= !=] (SELECT 列 FROM 表2 别名2 WHERE 条件);
  • 多行单列:SELECT * FROM 表1 别名1 WHERE 列1 [IN ALL ANY] (SELECT 列 FROM 表2 别名2 WHERE 条件);
  • 单行多列: SELECT * FROM 表1 别名1 WHERE (列1 列2) IN (SELECT 列 FROM 表2 别名2 WHERE 条件);
  • 多行多列:SELECT * FROM 表1 别名1 , (SELECT…) 别名2 WHERE 条件);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!