基本概念

  • join :用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
  • join和key:有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

基本使用

  • 请看 "Persons" 表:

  • 请注意,"Id_P" 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。
  • 接下来请看 "Orders" 表:

  • 请注意,"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons" 表中的人,而无需使用他们的确切姓名。
  • 请留意,"Id_P" 列把上面的两个表联系了起来。
  • 我们可以通过引用两个表的方式,从两个表中获取数据:谁订购了产品,并且他们订购了什么产品?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
  • 结果集:

SQL JOIN—使用JOIN:除了上面的方法,我们也可以使用关键词 JOIN 来从两个表中获取数据。如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

不同的SQL JOIN:除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

1、JOIN: 如果表中有至少一个匹配,则返回行

2、LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

3、RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

4、FULL JOIN: 只要其中一个表中存在匹配,就返回行

INNER JOIN:在表中存在至少一个匹配时,INNER JOIN 关键字返回行。INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行,例子在上面已经写过。

LEFT JOIN:会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  

RIGHT JOIN:会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。您可以使用下面的 SELECT 语句:

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764

FULL JOIN:只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  
    34764

参考:SQL JOIN

SQL基本操作——JOIN多表联查的更多相关文章

  1. 数据库sql的join多表

    摘录文章 SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据.注意,join后的数据记录数不一定就是左或右表的简单连接,图表只代表集合关系,在数量上并不准确,如这个条件后结果, ...

  2. SQL中的多表联查(SELECT DISTINCT 语句)

    前言:(在表中,可能会包含重复值.这并不成问题,不过,有时你也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值.) 如果不加DISTINCT 的话,主表本来 ...

  3. sql left join多表

    表A---------------------------------关联第一张表B-----------------------关联第二张表c select * fomr 表名A left join ...

  4. mysql|full join 多表联查,系统报错,无法解答!

    查询语句: select 分数 from cfull join don c.姓名=d.姓名 报错: [Err] 1054 - Unknown column 'c.姓名' in 'on clause' ...

  5. mybatis-plus注解版实现多表联查(sql)

    mybatis注解版实现多表联查 需求: 用户有角色,角色有权限,需要一次取用户信息包含角色信息及其对应权限 实体类: package cn.zytao.taosir.common.model.use ...

  6. mybatis.net 多表联查

    mybatis.net针对多表联查,其实不用讲联查出的所有的列全部做一个新的resultMap,我们完全可以通过集成关系来实现,真是上一次说的懒加载,在一定程度上可以提高其性能,但这并不是说懒加载性能 ...

  7. asp.net mvc 三层加EF两表联查

    首先打开vs软件新建项目创建web中的mvc项目再右击解决方案创建类库项目分别创建DAL层和BLL层再把DAL层和BLL层的类重命名在mvc项目中的Models文件夹创建model类在DAL创建ADO ...

  8. SQLServer多表联查,多表分页查询

    多表联查: select p.*,s.Sheng , i.Shifrom  [dbo].[ProductRecordInfo]   --表名 p left join [ShengInfo] s on ...

  9. .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示

    直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路 1.view页面 <link href="~/Content/bootstrap.css" ...

随机推荐

  1. 模拟赛 Problem 1 高级打字机(type.cpp/c/pas)

    Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...

  2. [JavaEE] Data Validation

    When we create Entity and Respority, we also need to do validations to protect our data. In Java, va ...

  3. UIView的层介绍

    UIView的层介绍 subview在西安市到屏幕上时,是位于superview上层的. 同一个view的subview时依照增加的顺序显示相应层的.越晚增加的subview显示在越上层,反之也是如此 ...

  4. webservice Connection timed out

    webservice Connection timed out,当发生webservice的链接超时错误时.我想原因无非就是webclient到webservice之间的链接通路发生了异常,那么该怎样 ...

  5. 用WebCollector爬取新浪微博数据

    教程已转移:http://datahref.com/archives/28 WebCollector爬取新浪微博等完整演示样例project可加群250108697或345054141从群文件里下载. ...

  6. Unity3d中相应各平台Path

    IOS: Application.dataPath :                      Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xx ...

  7. tomcat连接mysql的3个问题解决

    转载请标明出处: 本文出自:[ouyida3的博客] 1.BasicDataSourceFactory Caused by: java.lang.ClassNotFoundException: org ...

  8. Selenium-一个用于Web应用程序测试的工具

    Selenium.pptx

  9. Android分包MultiDex原理详解

    MultiDex的产生背景 当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt.DexOpt的执行过程是在第一次加载Dex文件的时候执行的 ...

  10. YTU 2776: 小壮的习惯

    2776: 小壮的习惯 时间限制: 1 Sec  内存限制: 128 MB 提交: 206  解决: 40 题目描述 小壮是一个英语初学者,一天,逗比的小壮看英语书,被其中的句子吸引了.他有个习惯,他 ...