LEFT OUTER JOIN 使用实况

本文通过具体示例展示了 LEFT OUTER JOIN 在 SQL 中的应用。通过创建两个测试表并进行连接操作,详细解释了 LEFT OUTER JOIN 的行为特点:如何仅包含左表中存在的记录,以及当右表没有匹配项时如何处理。
 

定义就不用说了吧!

测试数据 test_table

create   table  test_table
(u_id 
int ,u_name  varchar ( 20 ))
insert  test_table  select   1 , ' a1 '
union   all   select   2 , ' b2 '
union   all   select   3 , ' c3 ' ;

测试数据 test_table_link

create   table  test_table_link
(u_id 
int ,u_other  varchar ( 50 ))
insert  test_table_link  select   1 , ' each month '
union   all   select   1 , ' each day '
union   all   select   1 , ' each year '
union   all   select   55 , ' each day '
union   all   select   55 , ' each year '
union   all   select   3 , ' each day '
union   all   select   3 , ' each year '
union   all   select   88 , ' each day '
union   all   select   88 , ' each month ' ;

结果

select  a.u_id,a.u_name,b.u_other
from  test_table a  LEFT   OUTER   JOIN  test_table_link b
ON   a.u_id = b.u_id;

测试环境为sql server 2005

原本以为只是显示test_table中的每3条记录,实际上不是这样的(为什么多了记录了呢?),只要第一个表(test_table)中有,而第二个表与之相关联得上的都会显示的,但是一定要在第一个表(test_table)中存在,如第二个表(test_table_link)中的uid55,88的不会出现,若第二个表没有找到与第一个表相匹配的那当然为null了!right outer join就与之相反了.

在 MySQL 等关系型数据库中,`LEFT JOIN` 和 `LEFT OUTER JOIN` 在功能上没有本质区别,它们都用于从左表(左连接中左边的表)返回所有记录,即使右表中没有匹配的记录,右表中不匹配的字段将显示为 `NULL`。以下是关于它们的详细信息: ### 语法与示例 在 SQL 中,`LEFT JOIN` 和 `LEFT OUTER JOIN` 的语法基本一致,以引用[1]的示例来说,`LEFT OUTER JOIN` 的写法如下: ```sql SELECT ta.*, tb.Result ResultB FROM TableA ta LEFT OUTER JOIN TableB tb ON ta.Result = tb.Result; ``` 如果使用 `LEFT JOIN`,则语法如下: ```sql SELECT ta.*, tb.Result ResultB FROM TableA ta LEFT JOIN TableB tb ON ta.Result = tb.Result; ``` ### 使用场景 - **数据完整性查询**:当需要查询左表的所有记录,同时获取右表中与之匹配的关联信息时,可以使用这两种连接方式。例如,在一个员工表和部门表的关系中,要查询所有员工及其所在部门信息,即使有些员工可能还未分配部门,就可以使用左连接。 ```sql SELECT employees.employee_name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id; ``` - **数据对比分析**:可以通过左连接将两个表的数据进行对比,找出左表中有但右表中没有匹配的数据。例如,对比订单表和支付记录表,找出哪些订单还未支付。 ```sql SELECT orders.order_id, payments.payment_status FROM orders LEFT JOIN payments ON orders.order_id = payments.order_id WHERE payments.payment_id IS NULL; ``` ### 性能考虑 由于 `LEFT JOIN` 和 `LEFT OUTER JOIN` 功能相同,在性能上没有差异。其性能主要取决于表的大小、索引的使用情况等因素。为了提高查询性能,通常会在连接字段上创建索引。 ### 区别总结 虽然 `LEFT JOIN` 和 `LEFT OUTER JOIN` 功能相同,但 `LEFT JOIN` 是 `LEFT OUTER JOIN` 的简写形式,在实际应用中,`LEFT JOIN` 使用更为普遍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值