什么是连接

连接(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)

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

最新文章

  1. XML文档操作集锦(C#篇)
  2. 洛谷CON1041 NOIP模拟赛一试
  3. a:link a:visited a:hover a:active四种伪类选择器的区别
  4. const修饰
  5. [转]clrDateTime to Dynamics AX TransDate
  6. 修改PE文件的入口函数OEP
  7. GitHub教程--上传项目四步法 GitBash命令行下使用方法
  8. bzoj 1041: [HAOI2008]圆上的整点 数学
  9. 通过Java SE 7自带的监控服务(WatchService API)实现类似.NET FileWatcher的功能
  10. SQL给查询结果加序号
  11. java中的浮点(float)运算
  12. Scilab 的画图函数(1)
  13. C#快速随机按行读取大型文本文件
  14. 【59】Quartz+Spring框架详解
  15. csrf攻击与防范
  16. Suffix
  17. python pip 使用时错误: Patal error in launcher:Unable to create process using '"'
  18. 阿里云部署Java web项目
  19. 宝塔Linux面板 概述
  20. (转)ASP连接sql server实例解析

热门文章

  1. ROUTE: route addition failed
  2. oracle学习笔记:update一整列 关联更新
  3. Linux环境下Redis安装和常见问题的解决
  4. 从graphql endpoint获取schema文件
  5. Vscode ftp
  6. SAP Cloud Platform上Destination属性为odata_gen的具体用途
  7. mariadb-server安装问题(Error: MariaDB-common conflicts with 1:mariadb-libs-5.5.60-1.el7_5.x86_64)
  8. chkconfig 系统服务管理
  9. Python——DataFrame转list(包含两种)
  10. vue-cli3 配置全局less 、sass 变量