内连接和外连接

  • 内连接 

合并具有同一列的两个或两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。

通过JOIN...ON 连接,语法:

SELECT table1.column, table2.column,table3.column
FROM table1
    JOIN table2 ON table1 和 table2 的连接条件
        JOIN table3 ON table2 和 table3 的连接条件

 

 

employees表中有一人部门id为null,所以只有106条记录。

  • 外连接

合并具有同一列的两个或两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行之外,还查询到了左表或右表中不匹配的行。

分类:左外连接,右外连接,满外连接。

  •  左外连接:除了返回满足连接条件的行以外,还返回左表中不满足条件的行。

 通过LEFT LEFT JOIN 连接,语法:

#实现查询结果是A
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句;

 

 此时可以查询到完整左表信息。

  • 右外连接:除了返回满足连接条件的行以外,还返回左表中不满足条件的行。

 使用RIGHT JOIN 连接。其余同上。

  • 满外连接

满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。

SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。

但是,MySQL不支持FULL JOIN,但是可以用 UNION或UNION ALL 实现。

语法:

SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2

UNION操作符

UNION 操作符返回两个查询的结果集的并集,去除重复记录。

UNION ALL操作符

UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。

尽可能使用UNION ALL,提高效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值