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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。