問:什么是MySQL笛卡爾積?如何用一條SQL語句搞定多表聯(lián)查?
答:MySQL笛卡爾積指的是多張表之間的全連接查詢,也叫做交叉連接查詢。在進(jìn)行多表聯(lián)查時(shí),如果沒有使用任何連接條件,MySQL就會(huì)自動(dòng)進(jìn)行笛卡爾積操作,返回所有表中的所有行的組合。笛卡爾積操作會(huì)導(dǎo)致結(jié)果集非常龐大,且可能包含大量冗余數(shù)據(jù),因此在實(shí)際應(yīng)用中應(yīng)該盡量避免使用。
要用一條SQL語句搞定多表聯(lián)查,就需要使用JOIN操作符。JOIN操作符可以將多張表中符合連接條件的行連接起來,返回一個(gè)包含所有連接表的列的結(jié)果集。常用的JOIN操作符有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN。
以INNER JOIN為例,語法如下:
SELECT 列名1, 列名2, ... FROM 表名1 INNER JOIN 表名2 ON 連接條件;
t和score,連接條件為兩張表的id相等,語句如下:
tamett.id = score.id;
這條語句返回了所有學(xué)生的姓名和分?jǐn)?shù),只返回了符合連接條件的行,避免了笛卡爾積操作帶來的冗余數(shù)據(jù)。