数据库--多表查询

多表查询分为以下三种方式:

  1. 合并结果集
  2. 连接查询
  3. 子查询

合并结果集
·要求被合并的表(结果集)中,列的类型和列数相同
·UNION,去除重复行
·UNION ALL,不去除重复行
实例:

SELECT * FROM1
UNION ALL
SELECT *FROM2;

数据库--多表查询_第1张图片
连接查询:

  1. 分类
    ·内连接
    ·外连接
    ----左外连接
    ----右外连接
    ----全外连接(mysql不支持)
    ·自然连接(属于一种简化方式)

  2. 内连接
    ·方言:SELECT * FROM 表1 别名1,表2 别名2 WHERE 别名1.xx=别名2.xx;(就当前数据库管理系统支持)
    数据库--多表查询_第2张图片
    ·标准:SELECT * FROM 表1 别名1,INNER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;
    数据库--多表查询_第3张图片
    自然:SELECT * FROM 表1 别名1,NATURAL JOIN 表2 ;(就是不用加ON,就是自动帮你找条件)
    数据库--多表查询_第4张图片

  3. 外连接
    ·左外连接:SELECT * FROM 表1 别名1 LEFT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;
    ----左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能出来,左表中不满足条件的记录,右表部分都为NULL
    数据库--多表查询_第5张图片
    ·左外自然: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;
    ·全连接(只要将LEFT或者RIGHT 改成FULL即可,但是MYSQL 不支持。使用UNION,就直接使用UNION 将左右外连接合并结果集。)

  4. 子查询:即查询中有查询(有多个SELECT的情况)
    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 列1, 列2 FROM 表2 别名2 WHERE 条件)
    多行多列SELECT * FROM 表1 别名1 (SELECT 列 FROM 表2 别名2 WHERE 条件) WHERE 条件;

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