二十五.Sql server中join的使用方法

这一节讲解下sql中join的使用,join指令来用来多表查询,它可以实现将多个表格连接起来,有如下几种使用方法:

1. 左连接 left join或left outer join

2.右连接 right join或right outer join

3.全连接 full join或full outer join

4.内连接inner join

5.交叉连接 cross join

6.自连接

下面举例一一说明

假如我们有tb_employeeInfotb_employeeSalary

tb_employeeInfo

tb_employeeSalary

Left join(左连接)是由左向外连接的结果集包括left join子句指定 的左表的所有行,如果左表的某行在右表没有相匹配的行,则在右表 相关联结果集行中的所有选择列表为null

例:SQL 语句:select *from tb_employeeInfo i leftouterjoin tb_employeeSalary s on i.employeeId=s.employeeId;

输出结果:

Right join(右连接)是由右向外连接,它刚好与leftjoin相反,如果右表的某行在左表没有相匹配的行,则在左表相关联结果集行中的所有选择列表为null

SQL 语句:select *from tb_employeeInfo i rightouter join tb_employeeSalary s on i.employeeId=s.employeeId;

输出结果:

Full join(全连接)是外部连接返回左表和右表的所有行。如果某行在另一表没有匹配的值,则为null

SQL语句:select i.employeeId, s.employeeSalary from tb_employeeInfo i full join tb_employeeSalary s on i.employeeId=s.employeeId;

输出结果:

Inner join(内连接)匹配左表和右表共有的列,才显示出来,否则不显示,即取它们的交集

SQL语句:select i.employeeId, s.employeeSalary from tb_employeeInfo i innerjoin tb_employeeSalary s on i.employeeId=s.employeeId;

输出结果:

Cross join(交叉连接)返回左表的所有行,即左表的每一行与右表的所有行进行连接组合。也就是所谓的称笛卡尔积(值为table1*table2,这是笛卡尔积的计算方法)

SQL语句:select i.employeeName, s.employeeSalary from tb_employeeInfo i crossjoin tb_employeeSalary s where s.employeeSalary is not null;

输出结果:

Self join(自连接)是使用自身表当作另一个表来连接,即是自己连接自己

SQL 语句:select *from tb_employeeInfo;

这就是一个简单的 自连接

输出结果:


<think>好的,我需要回答用户关于SQL ServerJOIN ON语法的问题,包括作用、使用场景和示例。首先,我得回顾一下JOIN的基本概念,然后整理不同类型JOIN的区别,比如INNER JOIN、LEFT JOIN等。用户提供的引用中有提到LEFT JOIN的语法示例,可以引用那个例子。同时,引用4提到了ON条件后接AND和WHERE的区别,这部分也需要解释清楚。 首先,JOIN ON的主要作用是根据两个表的共同列连接数据。需要说明它用于关联表,形成临时结果集。使用场景包括需要从多个表组合数据的查询,比如订单和客户信息关联。然后,要给出每种JOIN类型的示例,特别是用户提到的LEFT JOIN,并且用代码块展示。 接下来,要注意用户提供的引用内容,比如引用2中的LEFT JOIN示例,需要正确引用并标注[^2]。同时,关于ON和WHERE的区别,引用4提到过,这部分需要详细说明,比如ON是连接条件,WHERE是过滤结果集。 还要检查是否需要遵守系统级指令,比如数学表达式用$...$,但这个问题可能不涉及数学公式,所以可能不需要。但需要确保中文回答,结构清晰,分点说明。最后生成相关问题,可能涉及其他JOIN类型、性能优化、实际应用案例等。 现在需要组织内容,确保每个部分都涵盖,并正确引用提供的资料。可能的结构是: 1. 作用:关联表,组合数据 2. 使用场景:多表查询,统计分析,数据整合 3. 语法示例:不同JOIN类型的例子,特别是LEFT JOIN 4. ON与WHERE的区别:引用4的解释 5. 其他注意事项:索引优化,性能影响(引用3提到ALTER INDEX,可能相关) 最后生成相关问题,比如不同JOIN的区别,优化方法,实际案例等。</think>### SQL ServerJOIN ON语法详解 #### 一、作用 `JOIN ON` 是 SQL Server 中用于**关联多个表**的关键语法,通过指定连接条件将不同表中的行组合成临时结果集。其核心作用包括: - **数据关联**:基于共同列(如外键)将多个表的数据横向拼接。 - **结果筛选**:通过 `ON` 后的条件过滤有效关联数据[^4]。 #### 二、使用场景 1. **多表数据查询**:例如查询订单表时关联客户表以获取客户姓名。 2. **统计分析**:如统计每个部门的销售额时需要连接部门表和销售表。 3. **数据整合**:将分散在不同表中的信息合并为完整视图(如商品信息+库存信息)。 #### 三、语法示例 ##### 1. 基础语法 ```sql SELECT 列名 FROM 表1 [INNER/LEFT/RIGHT/FULL] JOIN 表2 ON 表1.共同列 = 表2.共同列; ``` ##### 2. 不同JOIN类型示例 - **INNER JOIN**(默认):仅返回匹配的行。 ```sql SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID; ``` - **LEFT JOIN**:返回左表所有行,右表无匹配时填充`NULL`。 ```sql SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.CommonColumn = 表2.CommonColumn; ``` - **RIGHT JOIN**:与LEFT JOIN相反,返回右表所有行。 - **FULL JOIN**:返回左右表全部行,无匹配时填充`NULL`。 #### 四、`ON`与`WHERE`的区别 - **ON**:定义表连接时的匹配条件,影响关联过程。 - **WHERE**:在连接完成后过滤结果集。 例如,以下查询会保留左表所有行,但仅筛选右表满足条件的匹配: ```sql SELECT * FROM 表A LEFT JOIN 表B ON 表A.ID = 表B.ID AND 表B.Status = 'Active' -- ON中定义连接和部分过滤 WHERE 表A.Amount > 100; -- WHERE过滤最终结果 ``` #### 五、性能注意事项 1. **索引优化**:确保连接列(如`CustomerID`)已建立索引,可加速关联过程[^3]。 2. **避免过多JOIN**:超过3个表的连接可能影响性能,需评估是否需要冗余字段或临时表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值