-
首先創(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;