MySQL是一款非常流行的關系型數據庫管理系統(RDBMS),在實際的應用開發過程中,我們經常需要用到數據庫的外連接功能。MySQL提供了三種類型的外連接:左外連接(LEFT JOIN)、右外連接(RIGHT JOIN)和全外連接(FULL JOIN)。下面我們將詳細介紹這三種外連接的用法和示例。
左外連接(LEFT JOIN)
SELECT 列名1, 列名2 FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名;
上述SQL語句表示對表1和表2進行左外連接,并取出兩張表中列名為列名1和列名2的字段。如果表2中不存在任何符合條件的記錄,那么相應的列名2字段值將顯示為NULL。下面是一個左外連接的例子:
SELECT s.name, c.course_name FROM student s LEFT JOIN course c ON s.id = c.student_id;
以上SQL語句表示將學生表中的學生姓名和課程表中的課程名稱進行左連接,并返回所有學生的姓名(無論是否選課),以及所有選課學生的課程名稱。如果某位學生沒有選課,則該學生的課程名稱字段值將顯示為NULL。
右外連接(RIGHT JOIN)
SELECT 列名1, 列名2 FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;
右外連接和左外連接類似,只是將左右表的位置互換而已。下面是一個右外連接的例子:
SELECT c.course_name, s.name FROM course c RIGHT JOIN student s ON c.student_id = s.id;
以上SQL語句表示將課程表中的課程名稱和學生表中的學生姓名進行右外連接,并返回所有選課的課程名稱(無論是否有學生選課),以及所有學生的姓名(無論是否選課)。如果某個課程沒有學生選課,則該課程的學生姓名字段將顯示為NULL。
全外連接(FULL JOIN)
SELECT 列名1, 列名2 FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名 UNION ALL SELECT 列名1, 列名2 FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;
全外連接可以實現左右兩邊的所有數據都顯示出來。由于MySQL不支持FULL JOIN,我們可以使用UNION ALL來實現。上述SQL語句先進行左外連接,再將右表中沒有與左表匹配的數據全部取出來,再進行右外連接。下面是一個全外連接的例子:
SELECT c.course_name, s.name FROM course c LEFT JOIN student s ON c.student_id = s.id UNION ALL SELECT c.course_name, s.name FROM course c RIGHT JOIN student s ON c.student_id = s.id WHERE c.course_name IS NULL;
以上SQL語句表示將課程表和學生表進行全外連接。如果某個課程沒有學生選課,那么該課程的學生姓名字段將顯示為NULL;如果某個學生沒有選課,則該學生的課程名稱字段值將顯示為NULL。