在MySQL中,我們常常會(huì)需要關(guān)聯(lián)同一張表,來(lái)得到更加詳細(xì)的查詢結(jié)果。例如,我們有一個(gè)學(xué)生表,其中有以下信息:
+----+------------+-------+--------+ | id | name | grade | mentor | +----+------------+-------+--------+ | 1 | Alice | 1 | NULL | | 2 | Bob | 2 | NULL | | 3 | Charlie | 1 | 1 | | 4 | David | 2 | 2 | | 5 | Emily | 1 | 1 | +----+------------+-------+--------+
我們可以根據(jù)mentor字段來(lái)關(guān)聯(lián)同一張表,得到每個(gè)學(xué)生對(duì)應(yīng)的導(dǎo)師信息(如果有的話)。SQL語(yǔ)句如下:
SELECT s.name AS student_name, m.name AS mentor_name FROM student s LEFT JOIN student m ON s.mentor = m.id
代碼解析:
SELECTs.name AS student_name, m.name AS mentor_name:選取學(xué)生表和導(dǎo)師表中的姓名列,并別名為student_name和mentor_name。
FROMstudent s:從學(xué)生表中選取數(shù)據(jù),并別名為s。
LEFT JOINstudent m ON s.mentor = m.id:把學(xué)生表和導(dǎo)師表關(guān)聯(lián)起來(lái),通過(guò)學(xué)生表中的mentor字段和導(dǎo)師表中的id字段進(jìn)行連接。這里使用了LEFT JOIN,因?yàn)橛行W(xué)生沒(méi)有對(duì)應(yīng)的導(dǎo)師,使用INNER JOIN會(huì)丟失這些學(xué)生的信息。
運(yùn)行代碼后,得到以下結(jié)果:
+--------------+-------------+ | student_name | mentor_name | +--------------+-------------+ | Alice | NULL | | Bob | NULL | | Charlie | Alice | | David | Bob | | Emily | Alice | +--------------+-------------+
可以看到,這些學(xué)生的導(dǎo)師信息已經(jīng)被正確地關(guān)聯(lián)查詢出來(lái)了。