SQL连接查询(最全面)

连接查询是关系数据库中最主要的查询,主要包括内连接外连接交叉连接等。通过连接运算符可以实现多个表查询。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。
连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。

  • 内连接
    • 等值连接
    • 不等连接
    • 自然连接
  • 外连接
    • 左连接
    • 右连接
    • 全连接

内连接


    内连接是一种最常用的连接类型。内连接查询实际上是一种任意条件的查询。使用内连接时,如果两个表的相关字段满足连接条件,就从这两个表中提取数据并组合成新的记录,也就是在内连接查询中,只有满足条件的元组才能出现在结果关系中。

--例如:要查询每个已经选课的学生的情况,查询语句为
--等值连接
SELECT *
FROM Student INNER JOIN SC 
ON S.Sno = SC.Sno
--实际使用中常常省略inner join
SELECT * FROM Student,SC WHERE S.Sno = SC.Sno

--自然连接
SELECT *
FROM Student NATURAL JOIN SC 
ON S.Sno = SC.Sno


根据比较方式不同,内连接又可以分为三种:
1)等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2)不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3)自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

自连接

如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询就称为自连接查询。同一张表在FROM字句中多次出现,为了区别该表的每一次出现,需要为表定义一个别名。
自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。

--要求检索出学号为20210的学生的同班同学的信息,查询语句为
SELECT S.*
FROM S JOIN S AS S1 ON S.class = S1.class
WHERE S1.Sno='20210'

外连接

内连接的查询结果都是满足连接条件的元组。但有时我们也希望输出那些不满足连接条件的元组信息。比如,我们想知道每个学生的选课情况,包括已经选课的学生(这部分学生的学号在学生表中有,在选课表中也有,是满足连接条件的),也包括没有选课的学生(这部分学生的学号在学生表中有,但在选课表中没有,不满足连接条件),这时就需要使用外连接。
外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式。

注:以下例子实际使用中Outer关键字通常会省略。

1)左外连接(LEFT OUTER JOIN)
    如果在连接查询中,连接管子左端的表中所有的元组都列出来,并且能在右端的表中找到匹配的元组,那么连接成功。如果在右端的表中,没能找到匹配的元组,那么对应的元组是空值(NULL)。这时,查询语句使用关键字LEFT OUTERJOIN,也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不关左端的表中的数据是否满足连接条件,均输出左端表中的内容。

--左外连接查询中左端表中的所有元组的信息都得到了保留。
--要查询所有学生的选课情况,包括已经选课的和还没有选课的学生,查询语句为
SELECT Sno,Sname,Class,Cno,Grade
FROM S LEFT OUTER JOIN SC 
ON S.Sno = SC.Sno


2)右外连接(RIGHT OUTER JOIN)
    右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的数据是否满足连接条件,均输出表中`的内容。

--右外连接查询中右端表中的所有元组的信息都得到了保留
--同上例内容,查询语句为
SELECT Sno,Sname,Class,Cno,Grade
FROM S RIGHT OUTER JOIN SC
ON S.Sno = SC.Sno


3)全外连接(FULL OUTER JOIN)
    全外连接查询的特点是左、右两端表中的元组都输出,如果没能找到匹配的元组,就使用NULL来代替。

--全外连接查询中所有表中的元组信息都得到了保留。
--同左外连接例子内容,查询语句为
SELECT Sno, Sname, Class,Cno,Grade
FROM S FULL OUTER JOIN SC 
ON S.Sno = SC.Sno

交叉连接


    交叉连接即笛卡儿乘积,是指两个关系中所有元组的任意组合。一般情况下,交叉查询是没有实际意义的。(实际应用中不会使用到)

--如果希望得到学生表和选课表两个关系模式的笛卡尔乘积,查询语句为
SELECT*
FROM S CROSS JOIN SC

参考资料:
http://www.cnblogs.com/still-windows7/archive/2012/10/22/2734613.html(适合快速入门)

https://baike.baidu.com/item/%E8%BF%9E%E6%8E%A5%E6%9F%A5%E8%AF%A2/3450616?fr=aladdin

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
连接(outer join)是一种SQL查询语句中的连接类型,它允许在两个或多个表之间进行连接,并返回两个表中满足连接条件的所有记录,同时还返回未匹配的记录。具体来说,SQL Server中的外连接有左外连接(left outer join)、右外连接(right outer join)和全外连接(full outer join)三种类型。 左外连接(left outer join)是指返回左表中的所有记录以及与右表中满足连接条件的记录,如果右表中没有匹配的记录,则返回NULL值。 右外连接(right outer join)与左外连接相反,返回右表中的所有记录以及与左表中满足连接条件的记录,如果左表中没有匹配的记录,则返回NULL值。 全外连接(full outer join)是指返回左表和右表中的所有记录,无论是否满足连接条件,如果某个表中没有匹配的记录,则返回NULL值。 使用外连接可以在查询中包含未关联的数据,从而更全面地获取所需的结果。这对于需要分析数据之间的关系和差异非常有用。 例如,如果我们有一个"Customers"表和一个"Orders"表,我们可以使用外连接查询来检索所有的客户以及每个客户对应的订单,即使某些客户没有订单或某些订单没有关联的客户。 SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID; 这个查询将返回所有客户的姓名以及他们对应的订单ID,如果某些客户没有订单,则返回NULL值。 总结:SQL Server中的外连接允许在两个或多个表之间进行连接,并返回满足连接条件的所有记录,同时还返回未匹配的记录。外连接有左外连接、右外连接和全外连接三种类型,可以用于获取更全面查询结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [YouTube || 油管十大中文频道,没有关注你就out啦](https://blog.csdn.net/SocialBook/article/details/90546483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值