MySQL JOIN 语法概述
SQL(MySQL)JOIN用于根据两个或多个表中的字段之间的关系,从这些表中得到数据。
JOIN通常与ON关键字搭配使用,基本语法如下:
... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
table1通常称为左表,table2称为右表。ON关键字用于设定匹配条件,用于限定在结果集合中想要哪些行。如果需要指定其他条件,后面可以加上 WHERE条件 或者 LIMIT 以限制记录返回数目等。
下面以最常见的两表连接来说明MySQLJOIN 的用法,关于多表JOIN请参见《MySQLJOIN 多表》。
MySQLJOIN 分类
JOIN按照功能大致分为如下三类:
-
INNERJOIN(内连接):取得两个表中存在连接匹配关系的记录。
-
LEFTJOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
-
RIGHTJOIN(右连接):与LEFTJOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。
关于MySQLFULL JOIN 全连接
MySQL没有提供SQL标准中的FULLJOIN(全连接):两个表记录都取出,而不管彼此是否有对应记录。要解决此问题,可以使用UNION关键字来合并LEFTJOIN 与RIGHTJOIN,达到模拟FULLJOIN 的目的。
MySQLINNER JOIN
INNERJOIN 用于取得两个表中存在连接匹配关系的记录。下面是两个原始数据表:
article文章表:
aid |
title |
content |
uid |
---|---|---|---|
1 |
文章1 |
文章1正文内容... |
1 |
2 |
文章2 |
文章2正文内容... |
1 |
3 |
文章3 |
文章3正文内容... |
2 |
4 |
文章4 |
文章4正文内容... |
4 |
user用户表:
uid |
username |
|
---|---|---|
1 |
admin |
admin@5idev.com |
2 |
小明 |
xiao@163.com |
3 |
Jack |
jack@gmail.com |
article表中文章的所属用户是通过uid这个字段与user表关联起来的。通过观察数据不难发现,对于uid=3的用户,并没有发表任何文章;而文章中aid=4却无法在uid表中找到对应记录(可能是该用户被删除而其所属的文章却被保留了下来)。
我们列出所用文章与用户一一对应的数据。
SELECT... INNER JOIN ... ON 语句如下:
SELECT article.aid,article.title,user.username FROM art