两个关系R,S,其元数分别为R , S,则它们的笛卡尔积是所有这样的元组集合:元组的前r个分量是R中的一个元组,后s个分量是S中的一个元组。
度数为R与S的元数之和,R×S的元组个数为R和s的元组个数的乘积。
笛卡尔积也叫交叉连接
select employee_id, department_name
from employees,departments;
# 等价于
select employee_id, department_name
from employees cross join departments;
这种写法会导致每个员工和每个部门都会匹配一遍。
缺少多表的连接条件。
select employee_id, department_name
from employees, departments
where employees.department_id = departments.department_id;
如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表。
select employee_id, 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中使用表名的话,则必须使用表的别名(字段唯一可以直接写字段),而不能再使用表的原名。
别名会覆盖原表名。