SQL连接查询基础知识点
什么是连接
连接(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连接查询基础知识点的更多相关文章
- sql连接查询中的分类
sql连接查询中的分类 1.内连接(结果不保留表中未对应的数据) 1.1等值连接:关联条件的运算符是用等号来连接的. 1.2不等值连接:连接条件是出等号之外的操作符 1.3自然连接:特殊的等值连接,在 ...
- sql连接查询(inner join、full join、left join、 right join)
sql连接查询(inner join.full join.left join. right join) 一.内连接(inner join) 首先我这有两张表 1.顾客信息表customer 2.消费订 ...
- SQLServer SQL连接查询深度探险(摘录
SQL连接查询深度探险[摘录] 测试环境: Windows XP Profession MySQL 5.0.45 Oracle 9i DB2 UDB 9.1 测试的SQL脚本如下:此脚本适合MySQL ...
- 【SQL】- 基础知识梳理(三) - SQL连接查询
一.引言 有时为了得到一张报表的完整数据,需要从两个或更多的表中获取结果,这时就用到了"连接查询". 二.连接查询 连接查询的定义: 数据库中的表通过键将彼此联系起来,从而获取这些 ...
- sql连接查询中on筛选与where筛选的区别
sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能. 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏. ...
- SQL高级查询基础
1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...
- sql 连接查询
什么是连接查询呢 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 分类 首先划分一下,连接分为三种:内连接.外连接.交叉连接 内连接(INNER JOIN): ...
- SQL连接查询、变量、运算符、分支、循环语句
连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join on 2.union 在关系数据库 ...
- MySQL学习(四) SQL连接查询
更多情况下,我们查询的数据来源于多张表,所有有必要了解一下MySQL中的连接查询. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 数据准备 student表 -- -------- ...
随机推荐
- [NOIP2018模拟赛10.23]发呆报告
闲扯 考场看了眼题目感觉很难,一个小时敲完了所有暴力...嗯然后就在那里发呆什么事也没做 T3考场上把数据结构想了个遍都不会完成1操作,现在看这种思路其实之前也接触过... 比较玄学的一件事情就是T1 ...
- VBA输入框(InputBox)(六)
InputBox函数提示用户输入值.当输入值后,如果用户单击确定 按钮或按下键盘上的ENTER 键,InputBox函数将返回文本框中的文本.如果用户单击“取消” 按钮,该函数将返回一个空字符串(&q ...
- 关于微信小程序使用watch监听数据变化的方法
众所周知,Vue中,可以使用监听属性 watch来观察和响应 Vue 实例上的数据变化,那么小程序能不能实现这一点呢? 监听器的原理,是将data中需监听的数据写在watch对象中,并给其提供一个方法 ...
- mysql 创建用户,授权,查询用户等
MySQL创建用户与授权 一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用 ...
- [LeetCode] 17. 电话号码的字母组合 ☆☆☆(回溯) ###
描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23"输出:[&q ...
- SuperMemo method
原文:https://www.supermemo.com/en/archives1990-2015/english/ol/sm2 别人的研究:http://wdxtub.lofter.com/post ...
- 集成IDE anaconda
Anaconda 下载安装完anaconda后,会生成如下工具: 安装Anaconda不需要使用管理员权限.安装完毕后,Anaconda附带一个图形启动器(Anaconda Prompt),可以使用他 ...
- centos下关闭自动锁屏
自己这段时间在学习Linux,选用的系统的为CentOS,在实际操作过程中遇到问题,在无任何操作情况下,系统过一段时间自动锁屏需要重新输入密码.经过多次尝试以后终于成功!解决方法如下: Setting ...
- 凌乱的yyy / 线段覆盖(贪心)
https://www.luogu.org/problemnew/show/P1803 题目链接 贪心,选择结束时间为关键字排序,相同时开始时间大的在前,然后for一遍比较就好了 #include& ...
- linux目录太长怎么办?分享一点小技巧
在linux使用cd的时候,可能会遇到目录比较深的时候,这个时候总是cd一个很长的目录会很麻烦,那有没有什么比较方便的方法呢? 若是在两个目录中来回切换,这个时候可以使用cd - 这个命令,可以完成在 ...