前面主要介绍了单表操作时的相关查询语句,接下来介绍一下多表之间的关系,这里主要是多表数据记录的查询,也就是如何在一个查询语句中显示多张表的数据,这也叫多表数据记录的连接查询。

在实现连接查询时,首先是将两个或两个以上的表按照某种关系连接起来(连接后形成一个新的关系表),然后再查询到所要求的的数据记录。连接查询分为外连接查询和内连接查询。

一、表和表之间的关系

并(UNION):并操作是把具有相同字段数目和字段类型的两个或多个表合并到一起。

2.笛卡尔积:两个表之间进行笛卡尔积后形成新的关系中字段两个表中的会合并在一起,数据记录会进行组合,比如第一个表中有3条记录,第二个表中有5条记录,两个表经过笛卡尔积操作后将一共会产生3*5=15 种数据记录。

3.连接操作(JOIN):在表关系的笛卡尔积数据记录中,按照两个表中相应字段值的比较条件进行选择生成一个新的关系。其实就是将笛卡尔积后的数据记录进行筛选得到相应的数据,根据筛选方式不同,分为内连接(INNER JOIN),外连接 (OUTER JOIN),交叉连接(CROSS JOIN)。这些连接的基础都是笛卡尔积。

二、查询操作

1. 内连接查询:保留表关系中所有匹配的数据记录,舍弃不匹配的记录,注意,是只会保留符合匹配条件的记录,根据匹配条件分为:自然连接(NATURAL JOIN)、等值连接、不等连接。

自然连接:在笛卡尔积的数据记录中,首先自动根据表关系中相同名称的字段进行记录匹配(即只保留两个同名的字段下值相同的这条记录),然后去除重复字段(重复的字段保留一个),使用关键字 NATURAL JOIN来进行自连接查询操作,自连接自动完成,无法指定连接条件。查询举例:

等值连接:内连接查询中的等值连接,使用INNER JOIN...ON...的方式来实现,就是在关键字ON后面使用关系运算符“=”来指定等值条件,顾名思义,就是两个字段的值相等的条件,举例如下:

如图中结果,等值连接相比自然连接,只是没有去掉重复的字段deptno。

不等连接:使用INNER JOIN...ON...的方式来实现,就是在关键字ON后面可以使用>、<、>=、<=、!=这些运算符来指定不等值的条件,所以叫不等连接,举例说明:

2. 外连接查询(OUTER JOIN):在表关系的笛卡尔数据记录中,不仅保留所有匹配的数据记录,而且还会保留部分不匹配的数据记录,按照保留不匹配条件数据记录的来源可分为:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN),外连接查询会返回操作表中至少一个表的所有数据记录。

左外连接(LEFT JOIN):外连接查询中的左外连接,使用关键字 LEFT JOIN....ON....来实现,就是在笛卡尔积新关系中执行匹配条件时,除了保留满足ON关键字后条件的记录外,还会以关键字 LEFT JOIN左边的表为参考表,保留左边表中未匹配的所有记录。举例说明:

右外连接(RIGHT JOIN):外连接查询中的右外连接,使用关键字 RIGHT JOIN....ON....来实现,就是在笛卡尔积新关系中执行匹配条件时,除了保留满足ON关键字后条件的记录外,还会以关键字 RIGHT JOIN右边的表为参考表,保留右边表中未匹配的所有记录。举例说明:

全外连接(FULL JOIN):在表关系的笛卡尔积中,除了选择相匹配的数据记录,还会包含左右两边表中不匹配的所有数据记录,举例说明:

3.交叉连接(CROSS JOIN):交叉连接,实际上就是表关系笛卡尔积后的没有经过条件筛选后所有数据记录,不需要任何匹配条件。

以上为表的连接查询操作,主要分为内连接和外连接,用来进行多表查询。

数据库常用SQL语句(二):多表连接查询的更多相关文章

  1. GP数据库 常用SQL语句

    GP数据库 常用SQL语句 --1,查看列名以及类型 select upper(column_name) ,data_type from information_schema.columns wher ...

  2. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  3. Oracle数据库常用Sql语句大全

    一,数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSE ...

  4. 数据库常用SQL语句(三):子查询

    一.为什么会使用子查询 虽然可以通过连接查询来实现多表查询数据记录,但不建议使用,因为连接查询的性能很差,为什么呢?我们来进行分析,例如 我们要查询部门表t_dept 和雇员表t_employee中的 ...

  5. ios数据库常用sql语句

    SQlite常用语句 由于sql语句在程序代码中以字符串的形式存在,没有代码提示,不细心很容易出错,而且不容易被查出来.sql语句字符串是单引号. 写sql语句的时候一定要细心呀.如果写不好可以找公司 ...

  6. Mysql常用sql语句(3)- select 查询语句基础使用

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 针对数据表里面的每条记录,select查询语句叫 ...

  7. Mysql常用sql语句(20)- 子查询重点知识

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 子查询语句可以嵌套在 sql 语句中任何表达式出现的位 ...

  8. sql语句回忆录1-多表连接子查询

    --多表连接查询,在多张表中查询符合条件的记录--注意:给表起简短的别名select * from emp e--给字段起别名:字段名 别名,当别名为数字(包括数字开头)或者有空格时需要用双引号括起来 ...

  9. 数据库常用SQL语句(一):常用的数据库、表操作及单表查询语句

    以MySql数据库为例进行说明 1.数据库操作语句 2.表的操作语句 3.表中的字段操作语句 4.MYSQL支持的完整性约束 数据库管理系统提供了一致机制来检查数据库表中的数据是否满足规定的条件,以保 ...

随机推荐

  1. python3学习--文件读写

    这一篇我们来看文件读写操作. 打开和创建文件主要是open()函数: f = open('filename','r') # 读模式 f = open('filename','w') # 写模式 f = ...

  2. Web前端开发工程师课程大纲

    PHP程序员雷雪松整理出来的一套独一无二的Web前端开发课程.本套Web前端开发课程专门为想励志成为优秀web前端工程师的学习者而总结归纳的,本套Web前端课程舍弃了一些不常用的即将废弃的HTML标签 ...

  3. WebService—— IDEA创建WebServices

    一.File–>New–>Project 弹出这个对话框后,照下图的勾选然后点击Next,然后填写项目名和项目路径后,点击finish. 二.生成目录如下 需要注意的有HelloWorld ...

  4. Spark 系列(十五)—— Spark Streaming 整合 Flume

    一.简介 Apache Flume 是一个分布式,高可用的数据收集系统,可以从不同的数据源收集数据,经过聚合后发送到分布式计算框架或者存储系统中.Spark Straming 提供了以下两种方式用于 ...

  5. .net软件日常开发规范-基本标准

    一. 基本标准 代码和SQL脚本均不要出现无意义的空格和空行. 所有SQL脚本确保可以重复运行不出错,添加数据的脚本重复运行不会重复添加数据. 能用一行代码或脚本解决的不要写出两行,能用一个方法解决的 ...

  6. 基于UDP的socket tcp和udp的区别(小白进击篇)

    目录 16.基于udp协议的socket通信 为什么udp不会有粘包现象 DGRAM datagram#数据报文 发送sento (发送的信息,发送给的地址) 接收revefrom 客户端 服务端 t ...

  7. 通过Blazor使用C#开发SPA单页面应用程序(4) - Ant Design Button

    前面学习了Blazor的特点.环境搭建及基础知识,现在我们尝试的做个实际的组件. Ant Design是蚂蚁金服是基于Ant Design设计体系的 UI 组件库,主要用于研发企业级中后台产品.目前官 ...

  8. 解决pyinstaller打包可执行文件,存放路径包含中文无法运行的问题

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.问题描述 1.使用 ...

  9. iView表格行验证问题

    iView Table 3.2.0 版本 需求: 验证前两行的姓名不能为空: 解决方案: 判断是否前两行,如是则增加校验规则: 需在<FormItem>前加<Form>标签否则 ...

  10. HBase 系列(四)—— HBase 集群环境配置

    一.集群规划 这里搭建一个 3 节点的 HBase 集群,其中三台主机上均为 Regin Server.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoo ...