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中有几种连接?有啥区别?(左连右连内连和外连?)的主要内容,如果未能解决你的问题,请参考以下文章