笛卡爾積現象

2022-09-19 10:03:11 字數 601 閱讀 3477

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...