Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中,当一个表具有大量数据而另一个表具有少量数据时,连接两个表_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

在SQL Server中,当一个表具有大量数据而另一个表具有少量数据时,连接两个表

在SQL Server中,当一个表具有大量数据而另一个表具有少量数据时,连接两个表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,若我想联接两个表(而不是内部联接),左表有大量数据(数百万条记录),右表几乎并没有记录。我应该选择什么(左或右外部联接)以及为什么。首先,联接独立于表的大小 我认为这取决于你们想要从左表还是右表中得到什么数据,让我们假设你们有两个表,员工有数百万条记录,让我们把它放在右边,部门有10条记录,放在左边,现在每个员工有一个部门 员工 埃皮德 部门ID 部门 部门ID 部门名称 现在假设您想知道哪个员工属于哪个部门使用此查询 Select e.empId,d.DepartmentName from

若我想联接两个表(而不是内部联接),左表有大量数据(数百万条记录),右表几乎并没有记录。我应该选择什么(左或右外部联接)以及为什么。

首先,联接独立于表的大小

我认为这取决于你们想要从左表还是右表中得到什么数据,让我们假设你们有两个表,员工有数百万条记录,让我们把它放在右边,部门有10条记录,放在左边,现在每个员工有一个部门

员工

  • 埃皮德
  • 部门ID

    部门

  • 部门ID

  • 部门名称

现在假设您想知道哪个员工属于哪个部门使用此查询

Select e.empId,d.DepartmentName
from employee e
join department d
on e.departmentid=d.departmentid
现在假设您想知道哪个员工现在分配了任何部门 使用下面的查询

 Select e.empId,d.DepartmentName
from employee e
left join department d
on e.departmentid=d.departmentid
where d.departmentid is null
Select d.[Department Name],COUNT(e.empID) from Employee e
left join Department d
on e.DepartmentId=d.DepartmentId
group by d.[Department Name]
现在假设您想知道哪个部门有多少员工使用下面的查询

 Select e.empId,d.DepartmentName
from employee e
left join department d
on e.departmentid=d.departmentid
where d.departmentid is null
Select d.[Department Name],COUNT(e.empID) from Employee e
left join Department d
on e.DepartmentId=d.DepartmentId
group by d.[Department Name]
有关联接的更多信息,请使用下图

SQL中连接表的常用方法是使用
join
关键字。这一事实与表的大小无关。谢谢Gordon,这意味着当连接两个表时,大小并不重要。。。不管我是左外线还是右外线。这不会对性能造成任何影响。两个方向的外部联接不会花费相同的时间,因为A中的每一行都必须与BYU中的每一行进行比较。您很少有理由在查询中使用
右联接。您需要确定的是哪个表应该是左联接的外部表。无论较大的表位于哪一侧,优化器都会找出最佳匹配方法。