出现笛卡尔积的错误
错误的原因:缺少了多表的连接条件
错误的实现方式:每个员工都与每个部门匹配了一遍。
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个连接条件
网友评论