在表的连接查询方面有一种现象被称为:笛卡尔积现象。(笛卡尔乘积现象)
当两张表进行连接查询的时候,没有任何条件进行限制时会发生什么呢案例:找出每一个员工的部门名称,要求显示员工名和部门名。emp表+--------+--------+| ename | deptno |+--------+--------+| SMITH | 20 || ALLEN | 30 || WARD | 30 || JONES | 20 || MARTIN | 30 || BLAKE | 30 || CLARK | 10 || SCOTT | 20 || KING | 10 || TURNER | 30 || ADAMS | 20 || JAMES | 30 || FORD | 20 || MILLER | 10 |+--------+--------+dept表+--------+------------+----------+| DEPTNO | DNAME | LOC |+--------+------------+----------+| 10 | ACCOUNTING | NEW YORK || 20 | RESEARCH | DALLAS || 30 | SALES | CHICAGO || 40 | OPERATIONS | BOSTON |+--------+------------+----------+select ename,dname from emp,dept;+--------+------------+| ename | dname |+--------+------------+| SMITH | ACCOUNTING || SMITH | RESEARCH || SMITH | SALES || SMITH | OPERATIONS || ALLEN | ACCOUNTING || ALLEN | RESEARCH || ALLEN | SALES || ALLEN | OPERATIONS |............56 rows in set (0.00 sec)14 * 4 = 56
笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。(数学现象)
关于表的别名:
select e.ename,d.dname from emp e,dept d;
表的别名有什么好处?
第一:执行效率高。
第二:可读性好。
怎么避免笛卡尔积现象?当然是加条件进行过滤。案例:找出每一个员工的部门名称,要求显示员工名和部门名。selecte.ename,d.dnamefromemp e , dept dwheree.deptno = d.deptno; //SQL92,以后不用。+--------+------------+| ename | dname |+--------+------------+| CLARK | ACCOUNTING || KING | ACCOUNTING || MILLER | ACCOUNTING || SMITH | RESEARCH || JONES | RESEARCH || SCOTT | RESEARCH || ADAMS | RESEARCH || FORD | RESEARCH || ALLEN | SALES || WARD | SALES || MARTIN | SALES || BLAKE | SALES || TURNER | SALES || JAMES | SALES |+--------+------------+思考:避免了笛卡尔积现象,减少记录的匹配次数了吗?没有,次数还是56次。只不过显示的是有效记录。加条件只是为了避免笛卡尔积现象,只是为了查询出有效的组合记录。匹配的次数一次都没有少,还是56次
注意: 通过笛卡尔积现象得出,表的连接此数越多效率越低,尽量减少不得连接次数
