【问题标题】:Joining two tables in SQL Server when one table has huge data and other has few data当一个表有大量数据而另一个表有少量数据时,在 SQL Server 中连接两个表
【发布时间】:2016-07-30 16:53:17
【问题描述】:

如果我想连接两个表(不是内连接),左表有大量数据(数百万条记录),右表有很少的记录。我应该更喜欢什么(左外连接或右外连接)以及为什么。

【问题讨论】:

  • 在 SQL 中连接表的常用方法是使用 JOIN 关键字。这个事实与表格的大小无关。
  • 谢谢 Gordon,这意味着在加入两张桌子时,大小并不重要......无论我是左外还是右外。不会对性能产生任何影响。
  • 如果 A 中的每一行都必须与 B 中的每一行进行比较,那么任何一个方向的外连接都不会花费这么长的时间
  • 您很少有理由在查询中使用right join。您需要确定的是哪个表应该是左连接的外部表。
  • 优化器会找出最佳的匹配方式,不管大表在哪一边。

标签: sql sql-server sql-server-2008


【解决方案1】:

首先,连接与表的大小无关

好吧,我认为这取决于您想要从左表或右表中获得什么数据让我们假设您有两个表Employees 有数百万条记录让我们把它放在右边,有 10 条记录的 Department 现在把它放在左边每个员工都有一个部门。

员工

  • EmpID
  • 部门编号

    部门

  • 部门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]

有关连接的更多信息,请使用下图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2011-09-30
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多