2.3、當兩張表進行連線查詢時,沒有任何條件的限制會發生什麼現象?
案例:查詢每個員工所在部門名稱?
select * from emp;
select ename,dname from emp,dept;
當兩張表進行連線查詢,沒有任何條件限制時,最終查詢結果條數,是兩張表條數的乘積
2.4、怎麼避免笛卡爾積現象?
連線時加條件,滿足這個條件的記錄篩選出來
select ename,dname from emp,dept where emp.deptno = dept.deptno;
注意:最終查詢的結果條數是14,匹配過程中,匹配的次數減少了嗎? 次數沒減少還是56次,只不過有條件了
通過笛卡爾積現象,表的連線次數越多效率越低,應減少表的連線次數
select emp.ename,dept.dname from emp,dept where emp.deptno = dep.deptno; //這樣效率高
//再起個別名
select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;//這樣起別名效率更高(重要)(sql92語法)
笛卡爾積現象解決
今天使用join.on進行多表連線查詢,使用的各個表中的id進行關聯,但是資料是不對的,出現了笛卡爾積現象。使用join相當於將表中資料進行了相乘,兩個表中的資料相當於a表中字段個數乘以b表中字段個數。查了相關帖子,使用join.on內連線就能解決,但是資料還是不對。連線查詢,如果on條件是非唯一字...
避免笛卡爾積現象方式一
1 主要sql語句 select from select row rownum rownum from select matnr,maktx,lgort,lgobe,charg,labst,meins,matkl,wgbez,brgew,mtart,gewei,menge as qty,holdqt...
避免笛卡爾積
在mysql中建立臨時表 create table temptable 2 instanceid numeric 30 celltype varchar 128 enodeb id numeric 30 eutrancell id numeric 30 engine myisam default c...