首页 > 数据库 >SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析

SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析

时间:2023-11-27 20:44:07浏览次数:41  
标签:OrderID FULL OUTER 表中 SQL JOIN Orders

SQL RIGHT JOIN关键字

SQL RIGHT JOIN关键字返回右表(table2)中的所有记录以及左表(table1)中的匹配记录。如果没有匹配,则左侧的结果为0条记录。

RIGHT JOIN语法

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

注意:在某些数据库中,RIGHT JOIN被称为RIGHT OUTER JOIN。

SQL RIGHT JOIN

演示数据库

在本教程中,我们将使用著名的Northwind示例数据库。

以下是“Orders”表的部分选择:

OrderID CustomerID EmployeeID OrderDate ShipperID
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2

以及“Employees”表的部分选择:

EmployeeID LastName FirstName BirthDate Photo
1 Davolio Nancy 12/8/1968 EmpID1.pic
2 Fuller Andrew 2/19/1952 EmpID2.pic
3 Leverling Janet 8/30/1963 EmpID3.pic

示例

假设我们想要检索所有订单以及与之关联的员工信息(如果有的话)。我们可以使用RIGHT JOIN将两个表连接在一起,以便即使某些订单没有关联的员工信息,它们仍然会在结果中显示。

SELECT Orders.OrderID, Orders.OrderDate, Employees.EmployeeID, Employees.FirstName, Employees.LastName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID;

在这个例子中,RIGHT JOIN确保了所有的员工信息都会出现在结果中,而与之关联的订单信息(如果存在的话)也会被检索出来。如果某个员工没有订单,相应的OrderID和OrderDate列将显示为NULL。

SQL FULL OUTER JOIN关键字

SQL FULL OUTER JOIN关键字在左表(table1)或右表(table2)记录中有匹配时返回所有记录。

FULL OUTER JOIN语法

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;

注意:FULL OUTER JOIN和FULL JOIN是相同的。FULL OUTER JOIN可能返回非常大的结果集!

SQL FULL OUTER JOIN

演示数据库

在本教程中,我们将使用著名的Northwind示例数据库。

以下是“Customers”表的部分选择:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

以及“Orders”表的部分选择:

OrderID CustomerID EmployeeID OrderDate ShipperID
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2

SQL FULL OUTER JOIN示例

以下SQL语句选择所有客户和所有订单:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

结果集的一部分可能如下所示:

CustomerName OrderID
Null 10309
Null 10310
Alfreds Futterkiste Null
Ana Trujillo Emparedados y helados 10308
Antonio Moreno Taquería Null

注意:FULL OUTER JOIN关键字返回两个表中所有匹配的记录,无论另一表是否匹配。因此,如果“Customers”中有没有在“Orders”中有匹配的行,或者如果“Orders”中有没有在“Customers”中有匹配的行,这些行也会被列出。

SQL Self Join

SQL自连接是一个普通的连接,但是表与自身连接。

自连接语法

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

T1和T2是同一表的不同表别名。

演示数据库

在本教程中,我们将使用著名的Northwind示例数据库。

以下是“Customers”表的部分选择:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

SQL Self Join示例

以下SQL语句选择两个不同客户之间的订单:

SELECT DISTINCT A.CustomerName AS Customer1, B.CustomerName AS Customer2, A.OrderID
FROM Orders A, Orders B
WHERE A.CustomerID < B.CustomerID AND A.OrderID = B.OrderID
ORDER BY A.OrderID;

在这个例子中,我们使用了两个别名,A和B,来表示同一张“Orders”表的不同实例。通过比较CustomerID和OrderID,我们选择了两个不同客户之间的订单,并使用DISTINCT确保结果中没有重复的行。

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

image

标签:OrderID,FULL,OUTER,表中,SQL,JOIN,Orders
From: https://www.cnblogs.com/xiaowange/p/17860414.html

相关文章

  • 报表中常用的一个时间段内按照不同周期划分时间段,同时也命名每个时间段名称
    用Java写的,基于若依的玩意,有需要拿去用或优化一下 首先建立返回的实体对象和周期枚举publicclassChartLine{privateDatebeginTime;privateDateendTime;privateStringlineName;}publicenumSplitWay{/***天*/Day(0),......
  • SQL JOIN 子句:合并多个表中相关行的完整指南
    SQLJOINJOIN子句用于基于它们之间的相关列合并来自两个或更多表的行。让我们看一下“Orders”表的一部分选择:OrderIDCustomerIDOrderDate1030821996-09-1810309371996-09-1910310771996-09-20然后,看一下“Customers”表的一部分选择:CustomerID......
  • CaltechCS122 笔记:Assignment 2: SQL Translation and Joins
    Assignment2:SQLTranslationandJoinsTranslationandjoinPlanNode及其子类,如图所示:......
  • python 中实现对列表中各元素的个数进行统计
     001、方法1>>>list1=["aa","aa","bb","aa","cc","cc"]##测试列表>>>list1.count("aa")##借助内置函数输出单个元素的次数3>>>s......
  • std::thread方法join与detach
    1、std::joinstd::join是std::thread类的成员函数之一,用于等待线程的执行完成。#include<iostream>#include<utility>#include<thread>#include<chrono>#include<atomic>voidprocess(std::stringstr_info){for(inti=0;i<500;++i)......
  • C# 实现FULL JOIN 效果
    参考:https://dotnettutorials.net/lesson/full-outer-join-in-linq/思路就是先leftjoin再rightjoin,最后unionnamespaceTest{internalclassProgram{staticvoidMain(string[]args){//创建测试数据varlistA=n......
  • Full GC
    1、fullgc主要干了什么?JVMFullGC(FullGarbageCollection)是一种垃圾回收的机制,用于回收整个堆内存中的所有未使用对象,包括年轻代和老年代中的对象。在进行FullGC时,主要会做以下几件事情:(1)停止所有的应用程序线程:为了避免在FullGC期间产生新的垃圾对象,JVM需要先暂停所有的应......
  • Joint Autoregressive and Hierarchical Priors for Learned Image Compression
    abstruct最近的图像压缩模型基于自编码器,学习近似可逆的映射(从像素到量化的可逆表示),这些与熵模型(潜在表示的先验)结合,可以与标准算术编码算法一起使用产生压缩比特流。与简单的全因子先验相比,分层熵模型可以利用更多潜变量中的结构,从而在保存端到端优化的同时提高压缩性能。众所周......
  • 删除有序链表中重复的元素-I
    publicListNodedeleteDuplicates(ListNodehead){//writecodehereListNodecur=head;while(cur!=null){while(cur.next!=null&&cur.val==cur.next.val){ListNodetemp=cur.next.next;//这里牵扯到内存......
  • Oracle、达梦:获取两个表中差异的数据:minus(减法)
    Oracle、达梦:获取两个表中差异的数据:minus(减法)mysql没有。需要用别的方式替换表结构必须一致,数据也必须一致才能减去真实意思:T_1中的数据减去T_2中的数据。返回还多余的数据相当于3-2=1、3-0=3。这个例子中的0、1、2、3表示的是一行一行的数据SELECT*fromT_1m......