SQL中有几种连接?有啥区别?(左连右连内连和外连?)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中有几种连接?有啥区别?(左连右连内连和外连?)相关的知识,希望对你有一定的参考价值。

是不是分 左连右连内连和外连? 他们有什么区别 ?

两个主要的连接类型是内连接和外连接。到目前为止,所有示例中使用的都是内连接。内连接只保留交叉积中满足连接条件的那些行。如果某行在一个表中存在,但在另一个表中不存在,则结果表中不包括该信息。
外连接是内连接和左表和/或右表中未包括内连接中的那些行的并置。当对两个表执行外连接时,可任意将一个表指定为左表而将另一个表指定为右表。外连接有三种类型:

左外连接包括内连接和左表中未包括在内连接中的那些行。

右外连接包括内连接和右表中未包括在内连接中的那些行。

全外连接包括内连接以及左表和右表中未包括在内连接中的行。

参考资料:http://server.chinabyte.com/360/2602860.shtml

参考技术A 呵呵,你说的对。
内连接一般是检索两个表里连接字段都存在的数据。
左连接的意思是,查询左(语句前面)表里的所有内容,无论右边表里有没有。右边表里没有的内容用NULL代替。
右连接和左连接相反。
参考技术B 数据表的连接有:
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2、外连接: 包括
(1)左外连接(左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
3、自连接(连接发生在一张基表内)

SQL 右连接到 JSON/数组

【中文标题】SQL 右连接到 JSON/数组【英文标题】:SQL right join to JSON/array 【发布时间】:2017-01-27 09:38:18 【问题描述】:

我正在尝试将来自 MySql right join 的行数组转换为 nodeJS 上的 array/json 格式。考虑通用 mysql 表:

emp_id  name
1       john
2       bill
3       anna


fk_emp_id   project
1           p1
1           p2
1           p3
2           p1
2           p4

以及它们的正确连接:

id  name fk_emp_id  project
1   john    1       p1
1   john    1       p2
1   john    1       p3
2   bill    2       p1
2   bill    2       p4
3   anna    3       null

这是:

rows = [
    "id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p1",
    "id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p2",
    "id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p3",
    "id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p1",
    "id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p4",
    "id":3, "name":"anna", "fk_emp_id" : "3" , "project" : null
]

如何将它们转换成这个 JSON:

result = [
    id: '1',
     name: 'john',
     projects: [p1, p2, p3]
    
    ,
    id: '2',
     name: 'bill',
     projects: [p1, p4]
    
    ,
    id: '3',
     name: 'anna',
     projects: []
    
]

【问题讨论】:

您可以使用下面 url 中的 Json-lib 将其转换为格式化的 JSON。 json-lib.sourceforge.net 【参考方案1】:

如果您只寻找将rows 转换为result 数组的版本,则可以使用Map 作为给定id 的参考哈希表。

var rows = [ id: 1, name: "john", fk_emp_id: "1", project: "p1" ,  id: 1, name: "john", fk_emp_id: "1", project: "p2" ,  id: 1, name: "john", fk_emp_id: "1", project: "p3" ,  id: 2, name: "bill", fk_emp_id: "2", project: "p1" ,  id: 2, name: "bill", fk_emp_id: "2", project: "p4" ,  id: 3, name: "anna", fk_emp_id: "3", project: null ],
    result = [];

rows.forEach(function (a) 
    var reference = this.get(a.id);
    if (!reference) 
        reference =  id: a.id, name: a.name, fk_emp_id: a.fk_emp_id, projects: [] ;
        this.set(a.id, reference);
        result.push(reference);
    
    a.project && reference.projects.push(a.project);
, new Map);
console.log(result);
.as-console-wrapper  max-height: 100% !important; top: 0; 

【讨论】:

以上是关于SQL中有几种连接?有啥区别?(左连右连内连和外连?)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 表的内连和外连

MySQL从青铜到王者第七篇:MySQL内外连接

SQL 内连接到左连接表

SQL Server中内连接和外连接的区别

WIN7有几种版本?都有啥区别?

sql server 2005 中的内连接和外连接 怎么理解?