外連接配接:
左連接配接: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;