文章目录

  • 数据库连接
    • 准备数据
    • 内连接(inner join)
    • 外连接(outer join)
      • 外连接之左连接(left join)
      • 外连接之右连接(right join)
      • 外连接之全外连接(full join )
      • 交叉连接(cross join)
    • UNION
    • UNION ALL

数据库连接

准备数据

  • 标题表(title)
DROP TABLE IF EXISTS `title`;
CREATE TABLE `title` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;INSERT INTO `title` VALUES (1,'孙中明'),(2,'公众号'),(3,'大数据'),(4,'数据库');
id name
1 孙中明
2 公众号
3 大数据
4 数据库
  • 内容表(article)

DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (`id` int(11) NOT NULL AUTO_INCREMENT,`text` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;INSERT INTO `article` VALUES (1,'孙中明是一个公众号'),(2,'公众号是一个平台'),(3,'大数据是一个技术'),(5,'Java 是一种语言');
id text
1 孙中明是一个公众号
2 公众号是一个平台
3 大数据是一个技术
5 Java 是一种语言

内连接(inner join)

用比较运算符根据每个表共有的列的值匹配两个表中的行(=或>、<)也叫等值连接,得到的满足条件的A和B表内部的数据(必须两边都满足才查出)。

select * from  article inner join title  on  title.id = article.id
id text id name
1 孙中明是一个公众号 1 孙中明
2 公众号是一个平台 2 公众号
3 大数据是一个技术 3 大数据

这个是交集,4 和 5 没有对应的所以没有出来。

如果不添加 ON条件约束的话,取得的是表的笛卡尔积。在添加了ON条件约束后,获取的是同时符合ON条件的 A表和B表数据。

  • where的区别,

    where 子句中过滤的条件记录都不会加入到最后的结果集;

    on字句如果过滤的条件的数据任然会加入;被驱动的表没有的字段被当做null和驱动表一起加入到结果集里面

    但是如果on自己放在内连接中那样的话就和where的作用是等价的。

外连接(outer join)

外连接之左连接(left join)

首先是左表数据全部罗列,然后有满足条件的右表数据都会全部罗列出。若两条右表数据对左表一条数据,则会用对应好的左表数据补足作为一条记录。

以左表为驱动表,取得左表全部的数据
然后右表满足条件的数据会对应在左表数据后面,作为添加的外部行列出。

如果没有满足左表的数据,则会用NULL全部填充到外部行。

如果有多条满足左表数据,那么会用左表对应的数据补足,按行逐条对应右表数据。(也就是左表数据重复生成,右表的每条记录都生成一行,然后对应同一个左表数据)


SELECT*
FROMtitleleft JOIN article ON title.id = article.id

查询数据如下:

id name id text
1 孙中明 1 孙中明是一个公众号
2 公众号 2 公众号是一个平台
3 大数据 3 大数据是一个技术
4 数据库 null null

left joinleft outer join的缩写,所以作用是一样的。

left join + where B.column is null, 查出和两张表中没有关联的数据。


SELECT*
FROMtitleleft JOIN article ON title.id = article.idwhere article.id is null

查询数据如下:

id name id text
4 数据库

外连接之右连接(right join)

跟左连接相反,会以右表为驱动表。与左连恰恰相反,首先是右表数据全部罗列,然后有满足条件的左表数据都会全部罗列出。若两条左表数据对右表一条数据,则会用对应好的右表数据补足作为一条记录。


SELECT*
FROMtitleright  JOIN article ON title.id = article.id

查询数据如下:

id name id text
1 孙中明 1 孙中明是一个公众号
2 公众号 2 公众号是一个平台
3 大数据 3 大数据是一个技术
5 Java 是一种语言

外连接之全外连接(full join )

full join (mysql不支持,但是可以用 left join union right join代替)


SELECT*
FROMtitleleft  JOIN article ON title.id = article.idunionSELECT*
FROMtitleright  JOIN article ON title.id = article.id
id name id text
1 孙中明 1 孙中明是一个公众号
2 公众号 2 公众号是一个平台
3 大数据 3 大数据是一个技术
4 数据库
5 Java 是一种语言

因为只要满足 union上面的sql或者下面的sql一种情况就ok了。 如下我们可以升级,查询出两种表中没有关系的数据:


SELECT*
FROMtitleleft  JOIN article ON title.id = article.idwhere article.id is nullunionSELECT*
FROMtitleright  JOIN article ON title.id = article.idwhere title.id is null

查询数据如下:

id name id text
4 数据库
5 Java 是一种语言

交叉连接(cross join)

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。

显式的交叉连接:A,B表记录的排列组合,即笛卡儿积。

将查询的结果和里那个一个表的结果相互匹配的组合。

select * from  school.student  stucross join school.scoreorder by stu.id
id name id text
1 孙中明 1 孙中明是一个公众号
1 孙中明 2 公众号是一个平台
1 孙中明 3 大数据是一个技术
1 孙中明 5 Java 是一种语言
2 公众号 1 孙中明是一个公众号
2 公众号 2 公众号是一个平台
2 公众号 3 大数据是一个技术
2 公众号 5 Java 是一种语言
3 大数据 1 孙中明是一个公众号
3 大数据 2 公众号是一个平台
3 大数据 3 大数据是一个技术
3 大数据 5 Java 是一种语言
4 数据库 1 孙中明是一个公众号
4 数据库 2 公众号是一个平台
4 数据库 3 大数据是一个技术
4 数据库 5 Java 是一种语言

可以看到, 左边的表4条数据, 每一条对应右边的4条数据, 4x4=16条数据。

SELECT*
FROMtitleCROSS JOIN article
WHEREtitle.id = article.id
ORDER BYtitle.id

转成内连接,查询如下数据:

id text id name
1 孙中明是一个公众号 1 孙中明
2 公众号是一个平台 2 公众号
3 大数据是一个技术 3 大数据

UNION

超大型数据尽可能尽力不要写子查询,使用连接(JOIN)去替换它,使用联合(UNION)来代替手动创建的临时表。

UNION是会把结果排序,union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中(即把两次或多次查询结果合并起来。)。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要想同。

要求

两次查询的列数必须一致

推荐

列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样

可以来自多张表的数据

多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。

如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。如果不想去掉重复的行,可以使用union all。

如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。

SELECT*
FROMtitleUNIONSELECT*
FROMarticle
id name
1 孙中明
2 公众号
3 大数据
4 数据库
1 孙中明是一个公众号
2 公众号是一个平台
3 大数据是一个技术
5 Java 是一种语言

1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名。

2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

UNION ALL

默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。

数据库的内外链接和左右链接相关推荐

  1. 主机屋 mysql 数据库名_主机屋php链接数据库

    主机屋对于一个php初学者是一个不错的选择,在主机屋中可以实名注册后,可以拥有一个免费的域名空间和数据库,在主机屋中链接数据库和在本地链接数据库一样,通过$conn=mysql_connect(&qu ...

  2. SQL SERVER访问Access数据库,出现错误:无法初始化链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Jet.OLEDB.4.0 的数据源对象

    SQL SERVER访问Access数据库,出现错误: 无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4. ...

  3. sql怎么连接mysql数据库服务器_MSSQL数据库的跨库查询与链接服务器

    各位小伙伴们,关于MSSQL的基本技能篇前面一共写了10篇,也基本上算是告一段落,接下来将开始介绍进阶技能篇.在构思这个进阶技能篇的时候,一直在考虑先写哪个,其实到看到这部分内容能理解的人,基本上对S ...

  4. 京东城市时空数据引擎JUST亮相中国数据库技术大会(附PPT链接)

    受疫情影响,第十一届中国数据库技术大会(DTCC2020)从原定的5月份,推迟到了8月份,再推迟到了12月份.尽管如此,依然没有减退国人对数据库技术的热情.2020年12月21日-12月23日,北京国 ...

  5. SQL SERVER访问Access数据库,出现错误:无法初始化链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Jet.OLEDB.4.0 的数据源对象...

    SQL SERVER访问Access数据库,出现错误: 无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4. ...

  6. 浅谈死链接和错误链接,如何防范死链接发生

    最近我想我学了这么长时间的seo了,也该总结一下,每天一小总结,也作为自己的seo路程的一个总结.下面呢,我现在稍微介绍一下在seo概念性问题. 什么事死链接和错误链接,如何防范死链接发生? 死链接是 ...

  7. c++定义一个动态全局变量_静态链接与动态链接的宏观概述及微观详解

    静态链接与动态链接的宏观概述及微观详解 第一部分 宏观概述 1. 静态链接 静态链接就是在程序运行前,链接器通过对象文件中包含的重定位表,完成所有重定位操作,并最终形成一个在运行时不需要再次进行依赖库 ...

  8. TCP 短链接 和 长链接

    TCP短链接和长链接: 一.简介 TCP在真正的读写操作(数据传输)之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立通过三 ...

  9. 长URL链接转短链接算法

    引言 很多大型网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责就是把原始链接很长的地址压缩成只有6 个 ...

  10. URL长链接转短链接

    开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成原始链接的.后来尝试了下压缩算法(gzip 压缩算法),发现对于url 这种字符串越是压缩,长度就越长.通过对压缩算法的一些 ...

最新文章

  1. [JS]视频总结-第三部分_深入javascript
  2. Android 5.1上MultiDex异常: DexPathList NoSuchMethodException makeDexElements
  3. php svn up,php中执行svn update问题
  4. spring 的权限控制:security
  5. Struts的几个精细之处
  6. Visual Studio 支持 Java?谣言止于智者
  7. 车牌识别数据集_行人再识别数据集
  8. $_FILES['userfile']['error'] 错误码
  9. 当机器人具有自我知觉,并能自适应环境,真的不可怕吗?
  10. node主要应用场景是在大前端
  11. vim 安装_vim实战:插件安装(Vundle,NerdTree)
  12. 关于区块链通证模型,你想知道的都在这
  13. 30种EMC标准电路分享,再不收藏就晚了!
  14. DM数据库查询错误码
  15. 天网防火网的安装与使用
  16. GUI界面设计学渣笔记———使用PyQt做深度学习的可视化界面
  17. Python:实现random forest regressor随机森林回归器算法(附完整源码)
  18. python神经网络模型调用后预测值不变_用R语言实现神经网络预测股票实例
  19. 绝妙一招 教你如何拍出烟雾缥缈的作品
  20. 管理信息系统需求调研分析指南-软件工程-www.knowsky.com

热门文章

  1. windows服务与计划任务
  2. 火车头采集器基本用法
  3. [Elasticsearch]4.可伸缩性解密:集群、节点和分片
  4. 怎样用matlab做复数运算,MATLAB面向复数运算的设计.doc
  5. 计算机组装涉及哪些硬件,12级计算机组装和维修期中考试题
  6. Java中常用的Dos命令
  7. from用法 prepare_MySQL之prepare用法
  8. 数据挖掘思维和实战06 数据建模:该如何选择一个适合我需求的算法?
  9. 论文写作技巧----公式
  10. MySQL实现7种 SQL JOINS