赞
踩
目录
SQL中JOIN相关子句是用于将两个或者多个表结合起来,进行相关关操作。下面是一些关于JOIN的的功能描述,后面会进行详细的分析对比总结。
类型 | 作用 | |
---|---|---|
1 | Join(Inner Join)内连接 | 如果表之后至少有一个匹配,则返回行 |
2 | Left Join左连接 | 返回左表所有的行,右表返回匹配行,不匹配的返回NULL |
3 | Right Join右连接 | 返回由表所有的行,左表返回匹配行,不匹配的返回NULL |
4 | Full Join全连接 | 只要其中一个表存在匹配,则返回行 |
测试表分别为:
city表
school表
Join和Inner Join是相同的,表示在表中存在至少一个匹配时返回行,他们操作图如下:
其对应的语法如下:
- SELECT column_name(s)
- FROM table1
- INNER JOIN table2
- ON table1.column_name = table2.column_name;
-
- -- 或者
-
- SELECT column_name(s)
- FROM table1
- JOIN table2
- ON table1.column_name = table2.column_name;
- -- Inner Join
- SELECT city.`name`,city.city,school.school
- FROM city
- INNER JOIN school
- ON city.`name` = school.`name`
从结果中可以发现,他返回的是满足ON条件(city.`name` = school.`name`)的,where后面的目标查询(city.`name`,city.city,school.school)内容。
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。他们的操作图如下:
语法:
- -- 常用
- SELECT column_name(s)
- FROM table1
- LEFT JOIN table2
- ON table1.column_name = table2.column_name;
-
- -- 或者(在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN)
- SELECT column_name(s)
- FROM table1
- LEFT OUTER JOIN table2
- ON table1.column_name = table2.column_name;
- -- Left JOIN
- SELECT city.`name`,city.city,school.school
- FROM city
- LEFT JOIN school
- ON city.`name` = school.`name`
从结果可以发现,返回的内容中,以左表city为准全部返回,右表school中满足条件的则返回对应目标查询内容,不满足的返回NULL。
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。他和Left Join刚好相反。其对应的操作图如下:
语法:
- -- 常用
- SELECT column_name(s)
- FROM table1
- RIGHT JOIN table2
- ON table1.column_name = table2.column_name;
-
- -- 或者
- SELECT column_name(s)
- FROM table1
- RIGHT OUTER JOIN table2
- ON table1.column_name = table2.column_name;
- -- Right JOIN
- SELECT city.`name`,city.city,school.school
- FROM city
- RIGHT JOIN school
- ON city.`name` = school.`name`
从结果可以发现,Right Join是以右表为准,返回所有目标查询数据,左表中满足ON条件的返回对应目标查询数据,不满足的返回NULL。
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.它相当于是 LEFT JOIN 和 RIGHT JOIN的结合。其对应的操作图如下:
语法:
- SELECT column_name(s)
- FROM table1
- FULL OUTER JOIN table2
- ON table1.column_name = table2.column_name;
Full Join使用相对较少,这里不进行演示,感兴趣的同学,可以自行进行操作。
数据库在通过连接两张或多张表的相关操作时候,会生成一张中间的临时表,然后再将这张临时表返回给用户。
下面以Left Join为例,使用ON和Where条件的区别如下:
两张表分别如下:
tab1表
tab2表
- select *
- from tab1
- left join tab2
- on (tab1.size = tab2.size)
- where tab2.name='AAA'
- select *
- from tab1
- left join tab2
- on (tab1.size = tab2.size
- and tab2.name='AAA')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。