内部连接 inner join 两表都满足的组合

full outer--全连.两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有

A表没有的显示为(null)

A表 left join B表--左连,以A表为基础,A表的全部数据,B表有的组合。没有的为null

A表 right join B表--右连,以B表为基础,B表的全部数据,A表的有的组合。没有的为null

查询分析器中执行:

--建表table1,table2:

create table table1(id int,name varchar(10))

create table table2(id int,score int)

insert into table1 select 1,'lee'

insert into table1 select 2,'zhang'

insert into table1 select 4,'wang'

insert into table2 select 1,90

insert into table2 select 2,100

insert into table2 select 3,70

如表

-------------------------------------------------

table1|table2|

-------------------------------------------------

idname|idscore|

1lee|190|

2zhang|2100|

4wang|370|

-------------------------------------------------

以下均在查询分析器中执行

一、外连接

1.概念:包括左向外联接、右向外联接或完整外部联接

2.左连接:left join 或 left outer join

(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。

(2)sql语句

select * from table1 left join table2 on table1.id=table2.id

-------------结果-------------

idnameidscore

------------------------------

1lee190

2zhang2100

4wangNULLNULL

------------------------------

注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示

3.右连接:right join 或 right outer join

(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

(2)sql语句

select * from table1 right join table2 on table1.id=table2.id

-------------结果-------------

idnameidscore

------------------------------

1lee190

2zhang2100

NULLNULL370

------------------------------

注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示

4.完整外部联接:full join 或 full outer join

(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

(2)sql语句

select * from table1 full join table2 on table1.id=table2.id

-------------结果-------------

idnameidscore

------------------------------

1lee190

2zhang2100

4wangNULLNULL

NULLNULL370

------------------------------

注释:返回左右连接的和(见上左、右连接)

二、内连接

1.概念:内联接是用比较运算符比较要联接列的值的联接

2.内连接:join 或 inner join

3.sql语句

select * from table1 join table2 on table1.id=table2.id

-------------结果-------------

idnameidscore

------------------------------

1lee190

2zhang2100

------------------------------

注释:只返回符合条件的table1和table2的列

4.等价(与下列执行效果相同)

A:select a.*,b.* from table1 a,table2 b where a.id=b.id

B:select * from table1 cross join table2 where table1.id=table2.id (注:cross join后加条件只能用where,不能用on)

三、交叉连接(完全)

1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)

2.交叉连接:cross join (不带条件where...)

3.sql语句

select * from table1 cross join table2

-------------结果-------------

idnameidscore

------------------------------

1lee190

2zhang190

4wang190

1lee2100

2zhang2100

4wang2100

1lee370

2zhang370

4wang370

------------------------------

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

4.等价(与下列执行效果相同)

A:select * from table1,table2

UNION表示并集,union和join不一样,union这个运算子是将资料列合并,而join是将栏位合并!

如果从栏位合并来讲,full   join   算是并集,inner   join   算是交集!left   join   或right   join   不完全是差集,也包括交集的结果,具体你的语句的查询结果如何还是要看实际的语句,就如cross   join,加上where就变成inner   join,前后的结果相差甚远

网上找了一遍,发现一些新东西:

并集 :union select × from a union (all) select × from b  aUb

交集: intersect select × from a intersect select × from b  anb

差集: minus select × from a minus select × from b  a-b

多表联合查询(join、union等)相关推荐

  1. EF 表联合查询 join

    有两张表m_Dept.m_User,联合查询 linq方式.EF方式 private void Add(){List<m_Dept> lst = new List<m_Dept> ...

  2. 第四篇:Mysql查询-多表联合查询-及子查询

    mysql查询语句 多表联合查询 几子查询 1,单表查询:select * from 表名; eg:  select * from t1; 2,按条件查询: select 字段1,字段2,字段n... ...

  3. 多表联合查询、嵌套查询

    多表联合查询: 条件:连接到一起的两张表,必须存在公共字段(主外键关系的字段就是公共字段).名字可以不同,但是数据的含义.字段的类型.长度必须一致.(学生表和商品表就没有公共字段,两张表不适合做连接查 ...

  4. SpringBoot+MyBatis多表联合查询

    SpringBoot+MyBatis多表联合查询 写在前面 联合查询在实际工作中用的并不多,因为很多表的数据比较大,或者说未来比较大的表,都要谨慎使用联合查询 数据准备 建表语句 create tab ...

  5. oracle主从关系表查询,Oracle 主从表联合查询解决方法

    Oracle 主从表联合查询 表A id   type   name 1    E      AA 2    F 表B id   Aid    name 1    2      BB 2    2   ...

  6. ormlite 多表联合查询

    ormlite 多表联合查询 QueryBuilder shopBrandQueryBuilder = shopBrandDao.queryBuilder(); QueryBuilder shopQu ...

  7. mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解

    sqlserver多表联合查询和多表分页查询的代码讲解 发布时间:2020-05-14 14:42:07 来源:亿速云 阅读:700 作者:Leah 这篇文章主要为大家详细介绍了sqlserver多表 ...

  8. MyBatis 多表联合查询及优化

    关于优化 对于优化嘛,我这里简单的提几点,大家可以考虑一下.首先,就是对表的设计,在设计表初期,不仅仅要考虑到数据库的规范性,还好考虑到所谓的业务,以及对性能的影响,比如,如果从规范性角度考虑的话,可 ...

  9. MyBatis框架 多表联合查询实现

    三种方式: ①业务装配 对两个表编写单表查询语句,在业务层(Serivce)把查询的两个结果进行关联 ②使用Auto Mapping特性 在实现两表联合查询时通过别名完成映射,使用Maybatis的& ...

  10. android sqllite数据库的多表联合查询

    Android数据库有时候需要多表联合查询,经过学习,可以用以下代码 Currsor = db.rawQuery("select * from tablea as a left outer ...

最新文章

  1. Cocoapods的Podfile使用
  2. 收集:搜罗或看到的搞笑桥段
  3. 英特尔紧急召回SB主板,Intel 6系列芯片组设计缺陷
  4. c语言可变入参中的每个参数的类型可以不同,编程入门:浅谈C语言的可变参数
  5. 存储型xss漏洞怎么解决_FinDOMXSS:一款针对DOM型XSS漏洞的快速扫描工具
  6. [css] 你有使用过css的writing-mode属性吗?说说它有哪些应用场景?
  7. H5 与 IOS的爱恨情仇(兼容问题)
  8. python 键盘输入_跟我一起学python | 探究07
  9. 第一天:认识python
  10. RabbitMQ的问题
  11. Linux中文件目录写法
  12. c2000 电阻采样_常用超低阻值采样电阻阻值一览表
  13. 王者荣耀交流协会-小组互评Alpha版本
  14. 一篇文章让你搞懂如何通过Nginx来解决跨域问题
  15. ARC 128D - Neq Neq(dp+组合数学+思维)
  16. Linux useradd -M -s
  17. 移动网页支付(微信H5支付和支付宝网页支付)
  18. ATF:Gicv源码文件系列-gic_common.h
  19. 机器学习:《统计学习方法》笔记(一)—— 隐马尔可夫模型
  20. Covenant利用分析

热门文章

  1. SpringBoot集成TkMapper
  2. 【练习四 数组 编程题 7. 贪心的阿迪 】
  3. 【Android】锁屏/熄屏之后,与蓝牙设备的连接就会自动断开
  4. R语言学习笔记——入门篇:第一章-R语言介绍
  5. VMware虚拟机下安装RedHat Linux 9.0
  6. Android群英传读书笔记——第十二章:Android 5.X新特性详解
  7. IE6及IE8默认SSL设置
  8. 为什么优秀人才都离你而去
  9. 国内网站用香港服务器会被封吗?
  10. 小米新机红米与QNAP NAS TS-212P易迅网同时首发