美文网首页数据库MySQL
19 多表查询的基本操作

19 多表查询的基本操作

作者: 菩提树下参悟 | 来源:发表于2022-07-28 07:02 被阅读0次

    出现笛卡尔积的错误

    错误的原因:缺少了多表的连接条件

    错误的实现方式:每个员工都与每个部门匹配了一遍。

    SELECT employee_id,department_name
    FROM employees,departments; #查询出2889条记录

    错误的方式

    SELECT employee_id,department_name
    FROM employees CROSS JOIN departments;#查询出2889条记录

    SELECT *
    FROM employees; #107条记录

    SELECT 2889 / 107
    FROM DUAL;

    SELECT *
    FROM departments; # 27条记录

    多表查询的正确方式:需要有连接条件

    SELECT employee_id,department_name
    FROM employees,departments

    两个表的连接条件

    WHERE employees.department_id = departments.department_id;

    如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表。

    SELECT employees.employee_id,departments.department_name,employees.department_id
    FROM employees,departments
    WHERE employees.department_id = departments.department_id;

    建议:从sql优化的角度,建议多表查询时,每个字段前都指明其所在的表。

    可以给表起别名,在SELECT和WHERE中使用表的别名。
    SELECT emp.employee_id,dept.department_name,emp.department_id
    FROM employees emp,departments dept
    WHERE emp.department_id = dept.department_id;

    如果给表起了别名,一旦在SELECT或WHERE中使用表名的话,则必须使用表的别名,而不能再使用表的原名。

    如下的操作是错误的:

    SELECT emp.employee_id,departments.department_name,emp.department_id
    FROM employees emp,departments dept
    WHERE emp.department_id = departments.department_id;

    如果有n个表实现多表的查询,则需要至少n-1个连接条件

    相关文章

      网友评论

        本文标题:19 多表查询的基本操作

        本文链接:https://www.haomeiwen.com/subject/liplirtx.html