天天看點

MySQL内連接配接、外連接配接、交叉連接配接

外連接配接:

左連接配接:left join 或 left outer join

以左邊的表為基準,如果左表有資料,而右表沒有資料,左表的資料正常顯示,右表資料顯示為空。

建立user表,用于記錄使用者

user_id username
1 王一
2 李二
3 張三

建立log表,用于記錄使用者的消費情況

logging
100
200

分析使用者的消費情況,每一個使用者不一定都有消費,就要用到左連接配接,把每個使用者的消費情況查出來,包括那些沒有消費的使用者。沒有消費的顯示為NULL。

select * from user left outer join log on user.user_id=log.user_id;
select * from user left join log on user.user_id=log.user_id;           

查詢結果:

user_id1
NULL

右連接配接:right join 或 right outer join

以右邊的表為基準,如果右表有資料,而左表沒有資料,右表的資料正常顯示,左表顯示為空,定義完全和左連接配接相反。

select * from user right join log on user.user_id=log.user_id;
select * from user right outer join log on user.user_id=log.user_id;           

右表中隻有兩條資料對應着左表中的兩條資料,因為是右連接配接,以右面的為基礎,右面沒有的,左面有的就會被舍棄。

全連接配接:

注:MySQL并不支援full join,不過可以通過union 關鍵字來合并 left join 與 right join來模拟full join.

建立course表:

id course_name stu_id
數學
國文
英語 4
生物

建立student表:

stu_name
5 李四

執行下面語句:

select * from student left join course on student.stu_id=course.stu_id
union 
select * from student right join course on student.stu_id=course.stu_id;           
stu_id1

交叉連接配接 cross join:

交叉連接配接得到的是兩個表的乘積,也叫笛卡兒積

還是上面的表執行sql語句:

select * from student cross join course;           

得到結果如下:

注:如果不寫連接配接條件,預設也是得到表的笛卡兒積,下面的sql語句中兩個表隻用了

,

隔開,得到的結果和上面的一樣

select * from student,course;           

内連接配接(等值連接配接): inner join ,

=

,

>=

<=

<

>

注意内連接配接不分左表和右表,隻是把兩個表相對應的資料查出來,自動忽略不對應的資料。

user表,用于記錄使用者

log表,用于記錄使用者的消費情況

執行下面的語句

select * from user inner join log on user.user_id=log.user_id;
select * from user,log where user.user_id=log.user_id;