数据库操作-内连接外连接

内连接: 只连接匹配的行

左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行

右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行

全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

/**************************************************************************************/

表A

id   name

1    张

2    李

3    王

表B

id   address   A_id

1    北京      1

2    上海      3

3    南京      10

/******************************** left join  左连接*****************************************/

包容性:A表包容B表,左连接左表是全的.(left join 或 left outer join )

SQL语句如下:

SELECT A.name, B.address

FROM A

LEFT JOIN B ON A.id = B.A_id

查询结果为:

name     address

张     北京

李     NULL

王     上海

/******************************** right join  右连接*****************************************/

包容性:B表包容A表,右连接右表是全的.(right join 或 right outer join )

SQL语句如下:

SELECT A.name, B.address

FROM A

RIGHT JOIN B ON A.id = B.A_id

查询结果为:

name     address

张     北京

王     上海

NULL     南京

/******************************** inner join  内连接*****************************************/

排他性:A,B表中至少有1个匹配时,才返回行。两表的交集

SQL语句如下:

select A.name,B.address from A

inner join B

on A.id = B.A_id

查询结果为:

name     address

张     北京

王     上海

inner join  内连接等价于下面的sql:

SELECT A.name, B.address

FROM A, B

WHERE A.id = B.A_id

/******************************** full join  全连接*****************************************/

注释:全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于

对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集

。(full join 或 full outer join )

SQL语句如下:

select * from A

full join B

查询结果为:

id     name     id     address A_id

1     张     1     北京     1

2     李     1     北京     1

3     王     1     北京     1

1     张     2     上海     3

2     李     2     上海     3

3     王     2     上海     3

1     张     3     南京     10

2     李     3     南京     10

3     王     3     南京     10

/******************************** CROSS JOIN(不带条件where...)***********************************/

注释:返回3*3=9条记录,即笛卡尔积

SQL语句如下:

SELECT * FROM A

CROSS JOIN B

查询结果为:

id     name     id     address A_id

1     张     1     北京     1

2     李     1     北京     1

3     王     1     北京     1

1     张     2     上海     3

2     李     2     上海     3

3     王     2     上海     3

1     张     3     南京     10

2     李     3     南京     10

3     王     3     南京     10

CROSS JOIN等价于:

select * from A,B

原文地址:https://www.cnblogs.com/menghen/p/12569473.html

时间: 2024-07-29 21:34:12

数据库操作-内连接外连接的相关文章

内连接 外连接 交叉连接

数据库表连接大致分为三种:交叉连接.内连接.外连接 交叉连接(CROSS JOIN):其实就是内连接的一种特例,不带查询条件 内连接(INNER JOIN):相等连接.不等连接.自然连接 外连接(OUTER JOIN):左外联接.右外链接.全外连接(全外连接只有部分RDBMS系统可以做到,例如Oracle.做不到的有MySQL.SQL Server.Access) 交叉连接: 最简单,返回多张表每一行相乘的结果,也就是笛卡尔积.关键字是 CROSS JOIN 写法有三种:CROSS JOIN ,

内连接 外连接 自连接 交叉连接

======================================================== My SQL如下: ======================================================== 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行. 2.外联接.外联接

sql 内连接 外连接 左连接 右连接

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF

Oracle学习笔记(一)----------内、外连接

这么久终于可以静下来整理一下工作上学到的东西了(主要还是自己太懒了..) 废话少说,正文开始 在公司里,数据库用的基本都是Oracle,所以就学了一下Oracle的一点知识,现在整理一下自己遇到的问题和学到的一些东西. 先说说自己经常搞混的内连接.外连接(大学里一直没搞懂..) 数据表之间有很多种连接方式,如:内外连接等 一(内连接): 内连接就是我们经常说的等值连接或者自然连接. 内连接用连接 inner join(join)关键字连接表(或者直接用where和“=”号). 直接上例子: 设有

SQL中的内连接外连接和交叉连接是什么意思?

内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种.与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时).右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行. 交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,

SQL内连接-外连接join,left join,right join,full join

1.创建测试表test1及test2 SQL> CREATE TABLE TEST1(ID NUMBER,NAME VARCHAR2(20)); 表已创建. SQL> create table test2(id number, country varchar2(10)); 表已创建. INSERT INTO TEST1 VALUES(1,'name1'); INSERT INTO TEST1 VALUES(2,'name2'); INSERT INTO TEST1 VALUES(3,'name

【cl】多表查询(内、外连接)

交叉连接(cross join):该连接产生的结果集笛卡尔积 a有7行,b有8行    a的第一行与b的每一行进行连接,就有8条a得第一行 7*8=56条 select a.real_name,s.unix_host,s.os_username from account a cross  join service s:(56条) select a.real_name,s.unix_host,s.os_username from account a cross  join service s wh

mysql 内连接 左连接 右连接 外连接

mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| ID | int(11) | NO | PRI | 0 | || NAME | varchar(16) | YES | | NULL | || A

左连接,右连接,内连接,外连接, join, left join, right join ,mysql ,oracle

2016-6-12 22:35:51 工作用了一年多的oracle,最近在学mysql, 仔细想想 各种连接,感觉这些概念还是蛮烦人的! 最近整理了一下,分享一下自己的理解,有些东西是借鉴网上并自己吸收了的. 1.不管是什么连接,oracle和mysql的原理是一模一样的,只是有些写法不一样而已.说到写法,这里提一下, select * from A, B where a.filed1=b.filed2; --这是第1种写法, 内连接,这样写,很方便, oracle和mysql通用 select