sql server 什么是全外连接,左外连接,右外连接,它们的区别又是什么?

sql server 什么是全外连接,左外连接,右外连接,它们的区别又是什么?,第1张

简单来讲,随便来个例子:

A表

B表

id

name

id

name

1

a

1

b

2

b

3

c

4

c

左外连接就是以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据

select

*

from

A

left

join

B

on

A.id=B.id

id

name

id

name

1

a

1

b

2

b

null

null

4

c

null

null

右外连接就是与左外连接反之,以右表为准,去匹配左表,右表有多少条数据,结果就是多少条数据

select

*

from

A

right

join

B

on

A.id=B.id

id

name

id

name

1

a

1

b

null

null

3

c

全外连接数据条数不一定,相当与是左外连接

和右外连接

的综合

select

*

from

A

full

join

B

on

A.id=B.id

id

name

id

name

1

a

1

b

2

b

null

null

null

null

3

c

4

c

null

null

希望你能明白!!!

内连接又分为等值连接、自然连接和不等连接三种。

外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接 *** 作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info

FROM pub_info AS p1 INNER JOIN pub_info AS p2

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一) 内连接

内连接查询 *** 作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!&lt和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

SELECT a.*,p.pub_id,p.pub_name,p.country

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

(二) 外连接

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b

ON a.username=b.username

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*

FROM city as a FULL OUTER JOIN user as b

ON a.username=b.username

(三) 交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48 行。

SELECT type,pub_name

FROM titles CROSS JOIN publishers

ORDER BY type

介绍了表连接,更确切的说是inner joins内连接.

内连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。

为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表 (msp)。

party(Code,Name,Leader)

Code: 政党代码

Name: 政党名称

Leader: 政党领袖

msp(Name,Party,Constituency)

Name: 议员名

Party: 议员所在政党代码

Constituency: 选区

不知道你用什么语言连接mongodb,以下是用mongo的shell打开数据库:

#创建一个库:

use mytest

#添加一个用户account,pwd

db.addUser("wangming","1234")

#查看当前库中的用户

db.system.users.find()

#连接时候通过auth命令进行连接(account,pwd)

db.auth("wangming","1234")

如果是用pymongo连接mongo,如下

#连接mongodb服务

con = MongoClient(host,port)

#选择数据库

db = con[dbname]

#用用户名登陆

db.authenticate(account, pwd)

mongodb还是挺好用的,祝你快速上手。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9891600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存