MySQL 的 INNER JOIN
子句從兩個表中檢索具有公共匹配列值的行。
用法
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
例子
考慮下表有關一些學生的信息:
student_id |
名稱 |
名字 |
day_enrolled |
年齡 |
用戶名 |
---|---|---|---|---|---|
1 |
Sky |
Towner |
2015-12-03 |
17 |
stowner1 |
2 |
Ben |
Davis |
2016-04-20 |
19 |
bdavis2 |
3 |
Travis |
Apple |
2018-08-14 |
18 |
tapple3 |
4 |
Arthur |
David |
2016-04-01 |
16 |
adavid4 |
5 |
Benjamin |
Town |
2014-01-01 |
17 |
btown5 |
可以使用此處的代碼創建上述示例表。
另請考慮下表有關學生的課外活動:
student_id |
俱樂部 |
date_entered |
---|---|---|
1 |
Football |
2016-02-13 |
2 |
Boxing |
2016-05-25 |
3 |
Apple |
2018-08-17 |
4 |
Fishing |
2017-01-01 |
5 |
NULL |
NULL |
可以使用此處的代碼創建上述示例表。
基本用法
要使用公共列 student_id
檢索有關學生及其課外活動的信息:
SELECT fname, lname, age, club
FROM students
INNER JOIN extracurricular
ON students.student_id = extracurricular.student_id;
+----------+--------+------+----------+
| fname | lname | age | club |
+----------+--------+------+----------+
| Sky | Towner | 17 | Football |
| Ben | Davis | 19 | Boxing |
| Travis | Apple | 18 | Chess |
| Arthur | David | 16 | Fishing |
| Benjamin | Town | 17 | NULL |
+----------+--------+------+----------+
這裏,當兩個表中的student_id
值匹配時,我們從students
表中返回fname
、lname
和age
信息,並從extracurricular
表中返回相應的club
信息。
使用別名,上述查詢可以縮短為:
SELECT fname, lname, age, club
FROM students s
INNER JOIN extracurricular e
ON s.student_id = e.student_id;
不明確的列名
student_id
列出現在students
和extracurricular
表中。在這種情況下,如果我們不指定我們引用的是哪個表的student_id
列,則混亂的MySQL服務器將拋出錯誤:
SELECT student_id, fname, lname, age, club
FROM students
INNER JOIN extracurricular
ON students.student_id = extracurricular.student_id;
ERROR 1052 (23000): Column 'student_id' in field list is ambiguous
如果我們想從 extracurricular
檢索 student_id
,指定上述內容的正確方法是:
SELECT extracurricular.student_id, fname, lname, age, club
FROM students
INNER JOIN extracurricular
ON students.student_id = extracurricular.student_id;
+------------+----------+--------+------+----------+
| student_id | fname | lname | age | club |
+------------+----------+--------+------+----------+
| 1 | Sky | Towner | 17 | Football |
| 2 | Ben | Davis | 19 | Boxing |
| 3 | Travis | Apple | 18 | Chess |
| 4 | Arthur | David | 16 | Fishing |
| 5 | Benjamin | Town | 17 | NULL |
+------------+----------+--------+------+----------+
使用別名可以將上麵的內容進一步縮短為:
SELECT e.student_id, fname, lname, age, club
FROM students s
INNER JOIN extracurricular e
ON s.student_id = e.student_id;
我們提供帶有別名 s
的 students
表和帶有別名 e
的 extracurricular
表。這允許我們在查詢的其他地方使用提供的別名來引用這些表。
相關用法
- MySQL INSERT方法用法及代碼示例
- MySQL INET_ATON()用法及代碼示例
- MySQL INET_NTOA()用法及代碼示例
- MySQL INSTR方法用法及代碼示例
- MySQL INET6_ATON()用法及代碼示例
- MySQL INET6_NTOA()用法及代碼示例
- MySQL INSERT INTO用法及代碼示例
- MySQL INSERT()用法及代碼示例
- MySQL INSTR()用法及代碼示例
- MySQL IN用法及代碼示例
- MySQL IS_IPV4()用法及代碼示例
- MySQL IS NOT用法及代碼示例
- MySQL IS_UUID()用法及代碼示例
- MySQL IS_IPV6()用法及代碼示例
- MySQL IS NULL用法及代碼示例
- MySQL IS用法及代碼示例
- MySQL IS_IPV4_MAPPED()用法及代碼示例
- MySQL IS NOT NULL用法及代碼示例
- MySQL IF( )用法及代碼示例
- MySQL ISNULL( )用法及代碼示例
- MySQL ROUND()用法及代碼示例
- MySQL REPEAT()用法及代碼示例
- MySQL POWER()用法及代碼示例
- MySQL LEAD() and LAG()用法及代碼示例
- MySQL RADIANS方法用法及代碼示例
注:本文由純淨天空篩選整理自Arthur Yanagisawa大神的英文原創作品 MySQL | INNER JOIN。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。