mysql多表連接查詢(xún)

  • 首先創(chuàng)建一個(gè)測(cè)試的數(shù)據(jù)庫(kù)
 create database multi_table_query default character set utf8;
  • 在創(chuàng)建兩張測(cè)試表

mysql> use multi_table_query
Database changed
mysql> create table student( 
id int primary key auto_increment, 
name varchar(50));
Query OK, 0 rows affected (0.29 sec)

mysql> create table course(
id int primary key auto_increment, 
name varchar(50),
stu_id int null);
Query OK, 0 rows affected (0.29 sec)
  • 給兩張表插入數(shù)據(jù)

一 多表連接查詢(xún)

1. 笛卡爾積(交叉連接) 在MySQL中可以為CROSS JOIN或者省略CROSS即JOIN,或者使用','

SELECT * FROM table1 CROSS JOIN table2  
SELECT * FROM table1 JOIN table2  
SELECT * FROM table1,table2 

如:

由于其返回的結(jié)果為被連接的兩個(gè)數(shù)據(jù)表的乘積,因此當(dāng)有WHERE, ON或USING條件的時(shí)候一般不建議使用,因?yàn)楫?dāng)數(shù)據(jù)表項(xiàng)目太多的時(shí)候,會(huì)非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN.

2.內(nèi)連接INNER JOIN 在MySQL中把INNER JOIN叫做等值連接,即需要指定等值連接條件在MySQL中CROSS和INNER JOIN被劃分在一起。

例如:查詢(xún)每個(gè)學(xué)生對(duì)應(yīng)的課程
sql語(yǔ)句:

 select 
     c.id,s.name,c.name 
     course from 
     student as s left join course as c
     on s.id = c.stu_id;
查詢(xún)結(jié)果

二 表連接的約束條件

1. WHERE子句

SELECT * FROM table1,table2 WHERE table1.id=table2.id; 

如:

2. ON

SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id; 
  
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id 
LEFT JOIN table3 ON table2.id=table3.id; 

如:

基本的JOIN用法

1.內(nèi)連接

select s.name,c.name from student s,course c where s.id = c.id;

上面的這條語(yǔ)句和下面這兩條語(yǔ)句等價(jià):

select s.name,c.name from student s cross join course c on s.id = c.id;
select s.name,c.name from student s inner join course c on s.id = c.id;

2.外左聯(lián)結(jié)與外右連接

 select s.name,c.name from student s left join course c on s.id = c.id;
 select s.name,c.name from student s right join course c on s.id = c.id;

所以從上面結(jié)果看出,因?yàn)閏ourse表中的后三條記記錄的ID沒(méi)有在student表中有對(duì)應(yīng)ID,因此為空,但課程欄仍有后三條記錄。

MySQL聯(lián)結(jié)查詢(xún)中的某些參數(shù)的作用

1.USING (column_list):其作用是為了方便書(shū)寫(xiě)聯(lián)結(jié)的多對(duì)應(yīng)關(guān)系,大部分情況下USING語(yǔ)句可以用ON語(yǔ)句來(lái)代替,如下面例子:

a LEFT JOIN b USING (c1,c2,c3);

其作用相當(dāng)于下面語(yǔ)句

a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3;

2.NATURAL [LEFT] JOIN:這個(gè)句子的作用相當(dāng)于INNER JOIN,或者是在USING子句中包含了聯(lián)結(jié)的表中所有字段的Left JOIN(左聯(lián)結(jié))。

3.STRAIGHT_JOIN:由于默認(rèn)情況下MySQL在進(jìn)行表的聯(lián)結(jié)的時(shí)候會(huì)先讀入左表,當(dāng)使用了這個(gè)參數(shù)后MySQL將會(huì)先讀入右表,這是個(gè)MySQL的內(nèi)置優(yōu)化參數(shù),大家應(yīng)該在特定情況下使用,譬如已經(jīng)確認(rèn)右表中的記錄數(shù)量少,在篩選后能大大提高查詢(xún)速度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容