SQL Server表连接

  • 在关系数据库中,数据分布在多个逻辑中,要获得完整有意义的数据集,需要使用连接来查询这些表中的数据。
  • SQL Server支持多种连接,连接方式有内连接,左连接,右连接,自连接,全外连接和交叉连接。每种连接类型指定SQL Server如何使用一个表中的数据来选择另一个表中的行。
  1. SQL Server内连接:是最常用的连接之一。内部连接字句用于查询来自两个或多个相关表的数据。

Eg:

   SELECT

      Select_list

   FROM

      T1

   INNER JOIN T2 on join_predicate

2.在以上示例中,从T1和T2表中查询检索数据。

(1)第一步:在FROM字句中指定主表(T1)。

(2)第二步:在INNER JOIN字句和连接谓词中指定第二个表(T2)。只有连接谓词计算为TRUE的行才包含在结果集中。

(3)第三步:INNER JOIN字句将表T1的每一行与表T2的行进行比较,以查找满足连接谓词的所有行对。如果连接谓词的计算结果为TRUE,则匹配的T1和T2行的列值合并为一个新行并包含在结果集中。

(4)SQL Server内连接的结果集示意图像分析:假设一共有A和B两个椭圆,A椭圆代表T1,B椭圆代表T2,两个椭圆相交(相连接)的数据重合部分,就是内连接结果集的部分。

3.SQL Server左连接:LEET JOIN子句用于查询来自多个表的数据。

(1)会返回A表中的所有行和B表中的匹配行。如果在B表中找不到匹配的行,则使用NULL代替显示。

     Eg:

SELECT

         Select_list

      FROM

        T1

      LEET JOIN T2 on join_predicate;

(2)在以上示例中,T1和T2分别是A表和B表。

(3)对于T1表中的每一行,查询将其与T2表中的所有行进行比较。

(4)如果有一行导致连接谓词计算为TRUE,则将组合这些行中的列值以形成新行,然后将其包含在结果集中。

(5)如果在A表(T1)中的行没有与来自B表(T2)的任何匹配行,则查询将A表中的行的列值与来自B表的每个列值的NULL组合,简而言之,LEET JOIN子句返回A表(T1)中的所有行以及B表(T2)中匹配的行或NULL值。

(6)也可以使用WHERE子句和ON与WHERE子句来过滤结果集,但是需要注意的是,对于INNER IOIN子句来说,如果将on子句中的条件放在WHERE子句中,则它在功能上是等效的。

4.SQL Server右链接:RIGHT JOIN子句组合来自于两个或多个表的数据。

      Eg:

SELECT

    Select_list

FROM

T1

        RIGHT JOIN T2 on join_predicate;

(1)在以上示例中,T1是左表,T2是右表。

(2)需要注意的是,RIGHI JOIN和RIGHT OUTER JOIN是相同的,OUTER关键字是可选的。

(3)RIGHT JOIN开始从右表中选择数据并与左表中的行匹配。RIGHI JOIN返回一个结果集,该结果包含右表中的所有行,无论是否具有左表中的匹配行。

(4)如果右表中的行没有来自右表的任何匹配行,则结果集中右表的列将使用NULL值。

5.SQL Server交叉连接:CROSS JOIN连接两个或多个不相关的表。

Eg:

  SELECT

   Select_list

  FROM

    T1

  CROSS JOIN T2

  1. CROSS JOIN将第一个表(T1)中的每一行与第二个表中(T2)中的每一行连接起来。换句话来说,交叉连接返回两个表中行的笛卡尔积。
  2. 与INNER JOIN或LEET JOIN的不同,交叉连接不会在连接的表之间建立关系。
  3. 假设T1表包含三行:1,2,3。T2表包含三行:A,B,C。

CROSS JOIN从第一个表(T1)获取一行,然后为第二个表(T2)中的每一行创建一个新行。 然后它对第一个表(T1)中的下一行执行相同操作,依此类推。

(4)ROSS JOIN总共创建了9行。 通常,如果第一个表有n行,第二个表有m行,则交叉连接将产生n x m行。

6.SQL Server自连接:用于将表连接到自身(同一个表中)。它对于查询分层数据或比较同一个表中的行很有用。

(1)自联接使用内连接或左连接子句。由于使用自联接的查询引用同一个表,因此表别名用于为查询中的表分配不同的名称。

(2)注意:如果在不使用表别名的情况下,查询中多次引用同一个表,则会出现错误。

 (3)在下面的例子中,是将表T连接到自身的语法。

(4)下面查询语句中两次引用表T。表别名t1和t2用于为T表分配不同的名称。

(5)staffs表存储员工信息,如身份证,名字,姓氏和电子邮件。

     Eg:

      SELECT

         Select_list

      FROM

         T t1

      [INNER | LEET]  JSON T t2 on

          join_predicate;

(6)它还有一个名为manager_id的列,用于指定直接管理者。例如,员工Mireya向管理者Fabiola汇报工作,因为Mireya的manager_id列中的值是Fabiola。Fabiola没有经理,因为它的manager_id列是一个NULL值。

6,SQL Server全外连接:FULL OUTER JOIN当左表或右表中存在匹配项时,该命令将返回所有行。

  1. 首先,创建一个名为pm的新模式,代表着项目管理。接下来,在pm模式中创建名为projects和members的新表。
  2. 输入查询条件后,将表连接起来,将会得到查询出来的结果集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值