MySQL DAY8 多表查询

多表查询

一:笛卡尔积

1.假设有两个集合X和Y,则X和Y的笛卡尔积就是X和Y的所有可能组合。

2.多表查询若缺少多表连接条件,返回的结果可能出现笛卡尔积错误。

例:SELECT employee_id,job_id

FROM employees,departments // From employees CROSS JOIN departments;

#上述语句会使两表中的employee_id和job_id全部交叉连接,出现笛卡尔积错误

3.笛卡尔积错误出现可能原因:

a.省略多个表的连接条件;

b.连接条件无效;

c.所有表中的所有行互相连接。

二:多表查询

1.在WHERE后加入有效的连接条件:

SELECT table1.colum,table2.colum

FROM table1,table2

WHERE table1.colum1 = table2.colum2; #连接条件

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

例如 job_id在table1和table2中都存在,查询又需FROM table1,table2;则应SELECT table1.job_id 或 table2.job_id。

3.从sql优化的角度,建议多表查询时,每个字段前都加上其所在的表。

4.可以给表起别名,在SELECT和WHERE中使用表的别名,使代码更简洁: FROM 原表名 表别名;

***一旦给表起了别名,则在SELECT 和 WHERE 中用到表名时都只能用表的别名,不能用表的原名。

***此处区别于列的别名,列起了别名后仍可以用原名

例:查询员工的employee_id,last_name,department_name,city

SELECT e.employee_id,e.last_name,d.department_name,l.city

FROM employees e,departments d,locations l

WHERE e.department_id = d.department_id #表e和表d的连接条件

AND d.location_id = l.location_id; #表d和表l的连接条件

#如果有n个表需要多表查询,则至少需要有n-1个连接条件。 少于n-1个则会出现笛卡尔积的错误。

猜你喜欢

转载自blog.csdn.net/m0_73249076/article/details/129393824