连接查询分类

1.自连接查询,对同一个表进行连接操作
2.内连接查询,【又分为:自然连接(就是等值连接去除重复的行,或者说select 后面选择要表示的列,而不是使用"*",列出所有列)、等值连接(就是where后使用"="来做逻辑判断)、不等值连接三种】

【内连接时,返回的结果集仅是符合查询条件和连接条件的行。】
3.外连接查询,【又分为:左外连接、右外连接、全外连接三种】

【采用外连接时,它返回到结果集合不仅包含符合连接条件的行,而且还包括的指定外连接中表的所有数据行。】
4.交叉连接查询,也作无条件查询。

【返回表的笛卡尔集】
5.联合查询

【返回的不是交集而是并集】

示例表

t1

id name  sales date

1 los 1500 2011-01-05 00:00:00.000
2 san 250 2011-01-07 00:00:00.000
3 los 320 2011-01-08 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000

t2

id  sales  date

1 250 2011-01-07 00:00:00.000
2 535 2011-01-10 00:00:00.000
3 320 2011-01-11 00:00:00.000
4 750 2011-01-12 00:00:00.000

多表连接

1,自连接查询

语法:【select 表1.字段名1,表2.字段名2,... from 表1,表2  where 连接条件】

select * from t1 ,t2 where t1.sales=t2.sales

id name sales date id sales date
2 san 250 2011-01-07 00:00:00.000 1 250 2011-01-07 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000

2.内连接查询

语法:【select 表1.字段名1,表2.字段名2,...  FROM 表1  join_type 表2 [ON (连接条件)]】

inner join

等值连接

select * from t1 inner join  t2 on t1.sales=t2.sales

id name sales date id sales date
2 san 250 2011-01-07 00:00:00.000 1 250 2011-01-07 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000

非等值连接

select * from t1  inner join  t2 on t1.sales!=t2.sales

id name sales date id sales date
1 los 1500 2011-01-05 00:00:00.000 1 250 2011-01-07 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 1 250 2011-01-07 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 1 250 2011-01-07 00:00:00.000
1 los 1500 2011-01-05 00:00:00.000 2 535 2011-01-10 00:00:00.000
2 san 250 2011-01-07 00:00:00.000 2 535 2011-01-10 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 2 535 2011-01-10 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 2 535 2011-01-10 00:00:00.000
1 los 1500 2011-01-05 00:00:00.000 3 320 2011-01-11 00:00:00.000
2 san 250 2011-01-07 00:00:00.000 3 320 2011-01-11 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000
1 los 1500 2011-01-05 00:00:00.000 4 750 2011-01-12 00:00:00.000
2 san 250 2011-01-07 00:00:00.000 4 750 2011-01-12 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 4 750 2011-01-12 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 4 750 2011-01-12 00:00:00.000

自然连接

select t1.sales,t1.date from t1  inner join  t2 on t1.sales=t2.sales

sales date
250 2011-01-07 00:00:00.000
320 2011-01-08 00:00:00.000

left join

select * from t1 left join  t2 on t1.sales=t2.sales

id name sales date id sales date
1 los 1500 2011-01-05 00:00:00.000 NULL NULL NULL
2 san 250 2011-01-07 00:00:00.000 1 250 2011-01-07 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 NULL NULL NULL

right join

select * from t1 right join  t2 on t1.sales=t2.sales

id name sales date id sales date
2 san 250 2011-01-07 00:00:00.000 1 250 2011-01-07 00:00:00.000
NULL NULL NULL NULL 2 535 2011-01-10 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000
NULL NULL NULL NULL 4 750 2011-01-12 00:00:00.000

full outer join

select * from t1 full outer join  t2 on t1.sales=t2.sales

1 los 1500 2011-01-05 00:00:00.000 NULL NULL NULL
2 san 250 2011-01-07 00:00:00.000 1 250 2011-01-07 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 NULL NULL NULL
NULL NULL NULL NULL 2 535 2011-01-10 00:00:00.000
NULL NULL NULL NULL 4 750 2011-01-12 00:00:00.000

cross join

select * from t1 cross join  t2

id name sales date id sales date
1 los 1500 2011-01-05 00:00:00.000 1 250 2011-01-07 00:00:00.000
2 san 250 2011-01-07 00:00:00.000 1 250 2011-01-07 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 1 250 2011-01-07 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 1 250 2011-01-07 00:00:00.000
1 los 1500 2011-01-05 00:00:00.000 2 535 2011-01-10 00:00:00.000
2 san 250 2011-01-07 00:00:00.000 2 535 2011-01-10 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 2 535 2011-01-10 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 2 535 2011-01-10 00:00:00.000
1 los 1500 2011-01-05 00:00:00.000 3 320 2011-01-11 00:00:00.000
2 san 250 2011-01-07 00:00:00.000 3 320 2011-01-11 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 3 320 2011-01-11 00:00:00.000
1 los 1500 2011-01-05 00:00:00.000 4 750 2011-01-12 00:00:00.000
2 san 250 2011-01-07 00:00:00.000 4 750 2011-01-12 00:00:00.000
3 los 320 2011-01-08 00:00:00.000 4 750 2011-01-12 00:00:00.000
4 boston 800 2011-01-08 00:00:00.000 4 750 2011-01-12 00:00:00.000

union 指令表示将多个表合并显示,并不是连接显示。union只是把结果集并集起来,而不是交集出来。

union的限制是多个表的列必须是相同的种类

union 并起来的结果集自动执行distincd,去除重复的列。

union all 则把重复列保留,完整显示多个结果集的并集

下面看实例

执行:select date from t1 union all  select date from t2

date
2011-01-05 00:00:00.000
2011-01-07 00:00:00.000
2011-01-08 00:00:00.000
2011-01-08 00:00:00.000
2011-01-07 00:00:00.000
2011-01-10 00:00:00.000
2011-01-11 00:00:00.000
2011-01-12 00:00:00.000

可以看出完整的现实了8个行

执行:select date from t1 union   select date from t2

date
2011-01-05 00:00:00.000
2011-01-07 00:00:00.000
2011-01-08 00:00:00.000
2011-01-10 00:00:00.000
2011-01-11 00:00:00.000
2011-01-12 00:00:00.000

只显示6个行,有重复日期的7,8月份都只保留了一个唯一值

如果执行:select date,sales from t1 union   select date,sales from t2

date sales
2011-01-05 00:00:00.000 1500
2011-01-07 00:00:00.000 250
2011-01-08 00:00:00.000 320
2011-01-08 00:00:00.000 800
2011-01-10 00:00:00.000 535
2011-01-11 00:00:00.000 320
2011-01-12 00:00:00.000 750

可以看出7月份,sales为250的数据有重复,被去除了,只保留了一个

如果执行:select date,sales from t1 union all  select date,sales from t2

date sales

2011-01-05 00:00:00.000 1500
2011-01-07 00:00:00.000 250
2011-01-08 00:00:00.000 320
2011-01-08 00:00:00.000 800
2011-01-07 00:00:00.000 250
2011-01-10 00:00:00.000 535
2011-01-11 00:00:00.000 320
2011-01-12 00:00:00.000 750

转载于:https://www.cnblogs.com/fslnet/archive/2011/12/29/2306132.html

数据库的几种联结,union,union all ,inner jion ,left jion,right jion ,cross jion相关推荐

  1. 数据库的8种优化方式

    前言: 关于数据库的优化方案,网上有不少资料和方法,但众说纷纭,作品良莠不齐,不是缺斤少两,就是过于冗余. 在浏览了很多文章之后觉得这篇文章,总结得很经典,文章流量也很大,所以拿来和大家分享,积累优质 ...

  2. 数据库优化几种常见方式

    数据库优化几种常见方式 一.数据库编码规范 1)从 JDBC 编程的角度讲,用 PreparedStatement 一般来说比 Statement 性能高,因为在使用 时,SQL 语句被预编译并存储在 ...

  3. mysql创建库几种方法_MySQL创建数据库的两种方法

    本文为大家分享了两种mysql创建数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 创建数据库使用普通用户,你可能需要特定的权限来创建或者删除 mysql 数据库. 所以 ...

  4. Navicat Premium无法连上ORACLE数据库的几种问题解决方法

    Navicat Premium无法连上ORACLE数据库的几种问题解决方法 参考文章: (1)Navicat Premium无法连上ORACLE数据库的几种问题解决方法 (2)https://www. ...

  5. FMDB使用的数据库的三种形式

    FMDB使用的数据库的三种形式 FMDB是iOS平台下一款优秀的第三方SQLite数据库框架.它以Objective-C的方式封装了SQLite的C语言API.使用起来,它更加面向对象,避免冗余的C语 ...

  6. Silverlight与数据库的三种互操作[源代码]

    Silverlight与数据库的三种互操作 简介 本章节提供Silverlight与后台数据库的三种技术实现基本的互操作(Silverlinght Interoperability),构建一个Silv ...

  7. 数据库的定义、关系型数据库的四种约束。。

    今天离开C#开始进入数据库的学习,初步认识了一下:1,什么是数据库  2,数据库表的创建  3,关系型数据库的四种约束方法 1,什么是数据库: (1)定义:数据库是存储在计算机硬盘上,有组织,可以共享 ...

  8. 用什么方式链接oracle数据库,使用cx_Oracle 连接oracle数据库的几种方式

    连接oracle数据库的几种方式: 语法: cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME') import cx_Oracl ...

  9. mysql+数据库连接标识_新人必看!连接到MySQL数据库的两种方法

    原标题:新人必看!连接到MySQL数据库的两种方法 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysq ...

最新文章

  1. 合并果子(贪心,优先队列)
  2. 二十一世纪贫穷人的2008条语录
  3. Chrome开发者工具中Elements(元素)断点的用途
  4. android webview loadurl本地,Android WebView 使用loadUrl方法执行本地JavaScript
  5. Windows系统CMD下常用命令
  6. OD的 CC断点,内存访问断点,硬件断点 解析
  7. 项目进度管理和项目成本管理的重点梳理
  8. 数据结构专题:数据结构的学习困境
  9. 学习 MFC 的好网站
  10. govendor用法
  11. 普通html优化处理,iOS 数据优化之处理HTML字符串
  12. 自动化部署关于在ubuntu下的docker容器折腾小记
  13. VMware vSphere下载
  14. JAVA中(PO,VO,TO,BO,DAO,POJO)分别是指什么
  15. C语言pow()函数:求x的y次方(次幂)
  16. 用pyinstaller打包python文件(.py)为可执行文件(.exe)
  17. 在LLVM中编写pass的详细教程(2)
  18. 爬虫—爬取微博热搜榜
  19. 七、jsp基础(七)-- 总结
  20. 【UE4从零开始 027】插槽 Slot

热门文章

  1. C# Note27: GetHashCode方法
  2. PVUVIP之间的区别和联系
  3. 使用Wine 1.6.2 在OS X El Capitan下运行Galgame
  4. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
  5. B/S模式下如何使软件屏蔽系统热键
  6. 设计模式(二)工厂模式
  7. C# 常用类-IO-ClassXML
  8. iOS设备屏幕像素总览
  9. POJ 1236 学校网络间的强连通
  10. 在 Delphi 下使用 DirectSound (9): 效果器初步及 IDirectSoundFXGargle8 效果器