什么是连接

连接(join)查询是基于多个表中的关联字段将数据行拼接到一起,可以同时返回多个表中的数据。

下面以两个表为例子,举例说明一下不同的连接。

SELECT * FROM products
id name price detail vender_id
1 苹果 3.5 花牛苹果 1
2 蜜桃 3.5 秦安蜜桃 1
3 香蕉 2.5 海南香蕉 2
4 椰子 4.5 海南椰子 2
5 火龙果 3.5 红心火龙果 NULL
6 柚子 红柚 3.5 NULL
SELECT * FROM vendors
id name phone location
1 秦安水果王 666999 秦安县
2 海南水果 666888 海南岛
3 泰国进口水果 123456 泰国
4 菲律宾进口水果 321654 菲律宾

SQL连接类型

内连接(inner join)

用于返回两个表中满足连接条件的数据行。

SELECT
p.id, p.name, p.vender_id, v.id, v.name
FROM
products AS p
JOIN
vendors AS v ON p.vender_id = v.id
id name vender_id id name
1 苹果 1 1 秦安水果王
2 蜜桃 1 1 秦安水果王
3 香蕉 2 2 海南水果
4 椰子 2 2 海南水果

左外连接(left outer join)

返回左表中所有的数据行,对于右表中的数据,如果没有匹配的值,返回空值。

SELECT
p.id, p.name, p.vender_id, v.id, v.name
FROM
products AS p
LEFT JOIN
vendors AS v ON p.vender_id = v.id
id name vender_id id name
1 苹果 1 1 秦安水果王
2 蜜桃 1 1 秦安水果王
3 香蕉 2 2 海南水果
4 椰子 2 2 海南水果
5 火龙果 NULL NULL NULL
6 柚子 NULL NULL NULL

右外连接(right outer join)

返回右表中所有的数据行,对于左表中的数据,如果没有匹配的值,返回空值。

SELECT
p.id, p.name, p.vender_id, v.id, v.name
FROM
products AS p
RIGHT JOIN
vendors AS v ON p.vender_id = v.id
id name vender_id id name
1 苹果 1 1 秦安水果王
2 蜜桃 1 1 秦安水果王
3 香蕉 2 2 海南水果
4 椰子 2 2 海南水果
NULL NULL NULL 3 泰国进口水果
NULL NULL NULL 4 菲律宾进口水果

全外连接(full outer join)

等价于左外连接加上右外连接,返回左表和右表中所有的数据行,MySQL 不支持全外连接。

交叉连接(cross join)

交叉连接,也称为笛卡尔积,两个表的笛卡尔积相当于一个表的所有行和另一个表的所有行两两组合,结果的数量为两个表的行数相乘。

自连接(self join)

是指连接操作符的两边都是同一个表,没什么特别的,可以认为是把一个表复制一份后,和它原来的表进行各种连接操作。

SQL连接查询基础知识点的更多相关文章

  1. sql连接查询中的分类

    sql连接查询中的分类 1.内连接(结果不保留表中未对应的数据) 1.1等值连接:关联条件的运算符是用等号来连接的. 1.2不等值连接:连接条件是出等号之外的操作符 1.3自然连接:特殊的等值连接,在 ...

  2. sql连接查询(inner join、full join、left join、 right join)

    sql连接查询(inner join.full join.left join. right join) 一.内连接(inner join) 首先我这有两张表 1.顾客信息表customer 2.消费订 ...

  3. SQLServer SQL连接查询深度探险(摘录

    SQL连接查询深度探险[摘录] 测试环境: Windows XP Profession MySQL 5.0.45 Oracle 9i DB2 UDB 9.1 测试的SQL脚本如下:此脚本适合MySQL ...

  4. 【SQL】- 基础知识梳理(三) - SQL连接查询

    一.引言 有时为了得到一张报表的完整数据,需要从两个或更多的表中获取结果,这时就用到了"连接查询". 二.连接查询 连接查询的定义: 数据库中的表通过键将彼此联系起来,从而获取这些 ...

  5. sql连接查询中on筛选与where筛选的区别

    sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能. 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏. ...

  6. SQL高级查询基础

    1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...

  7. sql 连接查询

    什么是连接查询呢 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 分类 首先划分一下,连接分为三种:内连接.外连接.交叉连接 内连接(INNER JOIN): ...

  8. SQL连接查询、变量、运算符、分支、循环语句

    连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join   on 2.union 在关系数据库 ...

  9. MySQL学习(四) SQL连接查询

    更多情况下,我们查询的数据来源于多张表,所有有必要了解一下MySQL中的连接查询. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 数据准备 student表 -- -------- ...

随机推荐

  1. 如何判断是否是ssd硬盘?win10查看固态硬盘的方法

    转自:http://www.w10zj.com/Win10xy/Win10yh_7732.html 如何判断是否是ssd硬盘?在win10操作系统中我们该如何查看当前主机中安装的是固态硬盘还是机械硬盘 ...

  2. 为什么加了jquery mobile 会有 Loading 字样在页面底部?【已解决】

    这是一个奇怪的问题,用了jquery mobile js库,页面底部就会出现Loading字样, 解决办法如下: 1,正常加上css样式 2,一定要在jquery mobile js库加载之前,设置 ...

  3. leetcode-64. 最小路径和 · vector + DP

    题面 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right wh ...

  4. h5常见

    Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面//一.HTML页面结构<meta name="viewport" content="widt ...

  5. Java基础加强-反射机制

    反射的基石 -> Class 类(字节码)/*只要是在源程序中出现的类型,都要各自的Class实例对象,例如:int,int[],void*/如何得到各个字节码对应的实例对象(Class类型) ...

  6. Linq以本周和本月为条件的Sql,Liqn查询本周,Linq查询本月

    //计算本周时间 时间 > DateTime.Now.AddDays(-Convert.ToInt32(DateTime.Now.Date.DayOfWeek) //计算本月时间 时间 > ...

  7. ES extended_stats 函数

    在进行ES聚合分析的时候,发现了一个非常有用的函数,extended_stats,可以对聚合的结果进行更近一步的分析 ,常见的 count sum avg  min max 等都可以一目了然 GET ...

  8. Linux命令——diff、patch

    简介 diff以行为单位比较不同ASCII文件差异,可以输出一组指令,用于指导如何更改一个文件使其与第二个文件相同.diff在软件开发时多用于比较新旧版本代码,和patch连用可以将文件间区别做成补丁 ...

  9. 个人作业-Alpha项目测试—luomei1547

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...

  10. Service Broker 消息队列的方式实现数据同步

    SQL Server 2008中SQL应用系列--目录索引 导读:本文主要涉及Service Broker的基本概念及建立一个Service Broker应用程序的基本步骤. 一.前言: Servic ...