• Joins


    连接是组合来自两个或多个表、视图或物化视图的行的查询 

    以下示例连接employeesdepartments表(FROM子句),仅选择满足指定条件的行(WHERE子句),并使用投影从两列中检索数据(SELECT)。示例输出遵循 SQL 语句。

    SELECT email, department_name
    FROM   employees 
    JOIN   departments
    ON     employees.department_id = departments.department_id
    WHERE  employee_id IN (100,103)
    ORDER BY email;
    
    EMAIL                     DEPARTMENT_NAME
    ------------------------- ------------------------------
    AHUNOLD                   IT
    SKING                     Executive

    下图表示上述查询中显示的连接中的投影和选择操作。

    投影和选择

    大多数联接在FROM子句或WHERE子句中都至少有一个联接条件,用于比较来自不同表的两列。数据库组合成对的行,每个行包含每个表中的一行,对于这些行,联接条件的计算结果为TRUE。优化器根据连接条件、索引和表的任何可用统计信息确定数据库连接表的顺序。

    联接类型包括:

    • Inner joins

    内部联接是两个或多个表的联接,它只返回满足联接条件的行。例如,如果加入条件是employees.department_id=departments.department_id。则不返回不满足此条件的行。

    • Outer joins

    外部联接返回满足联接条件的所有行,还返回一个表中其他表中没有满足条件的行。

    表a和B的左外部联接的结果始终包含左表a的所有记录,即使联接条件与右表B中的记录不匹配。如果不存在B中的匹配行,则B列包含B中不匹配的行的空值。例如,如果不是所有员工都在部门中,然后,employees(左表)和departments(右表)的左外部联接将检索employmes中的所有行,即使department中的行都不满足联接条件(employeres.departmentid为空)。

    表a和表B的右外部联接的结果包含右表B的所有记录,即使联接条件与左表a中的行不匹配。如果a中没有匹配的行,则a列中的行与a中的行都不匹配。例如,如果不是所有部门都有员工,employees(左表)和departments(右表)的右外部联接将检索department中的所有行,即使employers中没有满足联接条件的行。

     full outer join完全外部联接是左外部联接和右外部联接的组合。

    • 笛卡尔积

    如果联接查询中的两个表没有联接条件,则数据库将执行笛卡尔联接。一个表格的每一行与另一个表格中的每一行都相结合。例如,如果员工有107行,部门有27行,那么笛卡尔积包含107*27行。笛卡尔积很少有用。

    Subqueries

    子查询是嵌套在另一个SQL语句中的SELECT语句。当您必须执行多个查询来解决单个问题时,子查询非常有用。

    语句的每个查询部分称为查询块。在以下查询中,括号中的子查询是内部查询块:

    SELECT first_name, last_name 
    FROM   employees
    WHERE  department_id 
    IN     ( SELECT department_id 
             FROM departments 
             WHERE location_id = 1800 );

    内部SELECT语句检索位置ID为1800的部门的ID。外部查询块需要这些部门ID,它检索子查询提供ID的部门中员工的姓名。

    SQL语句的结构并不强制数据库首先执行内部查询。例如,数据库可以将整个查询重写为员工和部门的联接,这样子查询就不会单独执行。另一个示例是,虚拟专用数据库(VPD)功能可以使用WHERE子句限制对员工的查询,以便数据库首先查询员工,然后获取部门ID。优化器确定检索请求行的最佳步骤顺序。

  • 相关阅读:
    cropperjs图片裁剪工具、NProgress进度条
    Chrome浏览器上安装Vue Devtools
    原生JS---数组去重总结
    原生JS--获取DOM节点
    call,apply,bind初识
    原生JS--数组循环总结
    01-vue项目之滚动加载数据
    原生JS---解构赋值
    克隆数组的几种方式?
    原生JS设置、删除、获取Cookie
  • 原文地址:https://www.cnblogs.com/wonchaofan/p/16757955.html
Copyright © 2020-2023  润新知