当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


MySQL INNER JOIN用法及代码示例


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表中返回fnamelnameage信息,并从extracurricular表中返回相应的club信息。

使用别名,上述查询可以缩短为:

SELECT fname, lname, age, club
FROM students s
INNER JOIN extracurricular e
ON s.student_id = e.student_id;

不明确的列名

student_id 列出现在studentsextracurricular 表中。在这种情况下,如果我们不指定我们引用的是哪个表的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;

我们提供带有别名 sstudents 表和带有别名 eextracurricular 表。这允许我们在查询的其他地方使用提供的别名来引用这些表。

相关用法


注:本文由纯净天空筛选整理自Arthur Yanagisawa大神的英文原创作品 MySQL | INNER JOIN。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。