连接方式有三种分别是内连接、外连接、交叉连接。
表示例:
| id | name |
|---|---|
| 1 | t1 |
| 2 | t2 |
| 3 | t3 |
| id | age |
|---|---|
| 1 | 11 |
| 2 | 22 |
| 4 | 44 |
1. 内连接
用比较运算符比较要连接的列的值的连接,不匹配的行不会被显示。sql关键字JOIN 或者INNER JOIN,通常写成JOIN。
例:
select * from TableA JOIN TableB on TableA.id=TableB.id;
| id | name | id | age |
|---|---|---|---|
| 1 | t1 | 1 | 11 |
| 2 | t2 | 2 | 22 |
等效于
select * from TableA,TableB where TableA.id=TableB.id
2. 外连接
① 外连接又分为:左外连接、右外连接、全外连接。
② 对应的sql关键字:LEFT/RIGHT/FULL OUTER JOIN,通常省略OUTER关键字,写成LEFT/RIGHT/FULL JOIN。
③ 在左、右外连接中都会以一种表为基表,基表的所有行、列都会显示,外表如果和条件不匹配则所有的外表列值都为NULL。
全外连接则所有表的行、列都会显示,条件不匹配的值皆为NULL。
- 左外连接示例:
select * from TableA left join TableB on TableA.id=TableB.id
| id | name | id | age |
|---|---|---|---|
| 1 | t1 | 1 | 11 |
| 2 | t2 | 2 | 22 |
| 3 | t3 | NULL | NULL |
2. 右外连接示例:
select * from TableA right join TableB on TableA.id=TableB.id
| id | name | id | age |
|---|---|---|---|
| 1 | t1 | 1 | 11 |
| 2 | t2 | 2 | 11 |
| NULL | NULL | 4 | 44 |
3. 全连接示例:
select * from TableA full join TableB on TableA.id=TableB.id
| id | name | id | age |
|---|---|---|---|
| 1 | t1 | 1 | 11 |
| 2 | t2 | 2 | 22 |
| NULL | NULL | 4 | 44 |
| 3 | t3 | NULL | NULL |
注:mysql不支持FULL JOIN,解决办法:right join + union + left join
两张表时:
select * from A left join B on A.id = B.id (where 条件)
union
select * from A right join B on A.id = B.id (where条件);
3. 交叉连接
没有where条件的交叉连接将产生连接表所涉及的笛卡尔积,即TableA的行数*TableB的行数的结果集。如果带where,返回或显示的是匹配的行数。(cross join后只能用where不能是on)
select * from TableA cross join TableB;
| id | name | id | age |
|---|---|---|---|
| 1 | t1 | 1 | 11 |
| 2 | t2 | 2 | 22 |
| 3 | t3 | 3 | 33 |
| 1 | t1 | 1 | 11 |
| 2 | t2 | 2 | 22 |
| 3 | t3 | 3 | 33 |
| 1 | t1 | 1 | 11 |
| 2 | t2 | 2 | 22 |
| 3 | t3 | 3 | 33 |
等效于:
select * from TableA,TableB;
本文详细介绍了SQL中的三种连接方式:内连接、外连接和交叉连接。内连接仅显示匹配的行,外连接包括左外连接、右外连接和全外连接,会显示基表的所有行并补充NULL值。交叉连接产生笛卡尔积。
&spm=1001.2101.3001.5002&articleId=81271847&d=1&t=3&u=1c3a673585fb43cc92a05f084d924ded)
829

被折叠的 条评论
为什么被折叠?



