一起聊聊SQL的表连接
时间:2022-06-16 [网络编程]作者:fabuyuan 浏览:4 次
推荐学习:《SQL教程》
SQL的表连接
在关系数据库中,数据分布在多个逻辑表。想要获得完整有意义的数据集,则需要使用连接来查询这些表中的数据。SQL Server中支持多种连接,包括内连接、左连接、右连接、交叉连接和全外连接。
一、内连接
内部连接子句用于查询来自两个或多个相关表的数据。INNER JOIN 子句的语法:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id
注意:要查询的字段,必须要在字段的前面加上表名或者表的别名,如:p.product_name
其中FROM后面的是主表,然后 INNER JOIN 后面的表是要连接的表。主表和连接表进行比较,查 找满足的条件的所有行。连接谓词的计算结果为true是,则将主表和连接表进行合并成新的结果 集,如下图所示:
内连接的多个表连接,如下所示:
SELECT p.product_name, p.list_price ,c.category_name, b.brand_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id INNER JOIN production.brands b ON b.brand_id = p.brand_id
二、左连接
在左连接中使用 LEFT JOIN 子句用于查询来自多个表的数据,它返回是左表中的所有行和右表中匹配行。若是右表中找不到匹配行,则使用NULL代替显示,如图所示:
使用 LEFT JOIN 语句进行连接:如下所示:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p LEFT JOIN production.categories c ON c.category_id = p.category_id
在上面的语法中 FROM 后面的表是左表(production.products),而 LEFT JOIN 后面紧跟的右 表(production.categories)。
三、右连接
在右连接中使用RIGHT JOIN子句来进行两个表或多个表进行查询。右查询刚好与左查询的是相反 的,返回右表的所有行和左表的匹配行,若左表找不到匹配行,则返回NULL代替显示,如图所示:
使用 RIGHT JOIN 语句进行连接:如下所示:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p RIGHT JOIN production.categories c ON c.category_id = p.category_id
在上面的语法中 FROM 后面的表是左表(production.products),而 RIGHT JOIN 后面紧跟的右 表(production.categories)。
四、交叉连接
CROSS JOIN 连接两个或多个不相关的表。 以下是两个表的CROSS JOIN 的语法,两种写法:
SELECT T1.select_list FROM T1 CROSS JOIN T2;
或者
SELECT T1.select_list FROM T1, T2;
CROSS JOIN 将第一个表(T1)中的每一行与第二个表(T2)中的每一行连接起来。 换句话说,交叉连 接返回两个表中行的笛卡尔积。与INNER JOIN或LEFT JOIN不同,交叉连接不会在连接的表之间 建立关系。
假设 T1 表包含三行: 1 , 2 和 3 , T2 表包含三行: A , B 和 C 。 CROSS JOIN 从第一个 表(T1)获取一行,然后为第二个表(T2)中的每一行创建一个新行。 然后它对 第一个 表(T1)中的 下一行执行相同操作,依此类推。在此图中, CROSS JOIN 总共创建了 9 行。
五、自连接
自联接用于将表连接到自身(同一个表)。 它对于查询分层数据或比较同一个表中的行很有用。
自联接使用内连接或左连接子句。 由于使用自联接的查询引用同一个表,因此表别名用于为查询 中的表分配不同的名称。
注意:如果在不使用表别名的情况下在查询中多次引用同一个表,则会出现错误。
示例:
SELECT t1.select_list FROM T1 t1INNER JOIN T1 t2 ON t1.category_id = t2.category_id
在 INNER JOIN 这里可以使用其他的子句,比如:LEFT JOIN ,RIGHT JOIN
六、全外连接
FULL OUTER JOIN当左表或右表中存在匹配项时,该命令将返回所有行。如图所示:
使用 FULL OUTER JOIN 查询 pm.projects 表和 pm.member 表中的数据:
SELECT m.name member, p.title project FROM pm.members m FULL OUTER JOIN pm.projects p ON p.id = m.project_id;
pm.projects 表数据:
pm.member 表数据:
查询结果:
推荐学习:《SQL教程》
以上就是一起聊聊SQL的表连接的详细内容,更多请关注站长家园其它相关文章!
本文标签: SQL
转载请注明来源:一起聊聊SQL的表连接
本文永久链接地址:https://www.adminjie.com/post/13567.html
免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。
更多精彩内容
- VUE中V-IF条件判断改变元素的样式操作
- Discuz如何解决安装时报错run_sql_error
- 低版本VS项目在VS2019无法正常编译的问题
- PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
- Oracle数据库的实例/表空间/用户/表之间关系简单讲解
- RSA2是啥?PHP-RSA2签名验证怎么实现?
- app是什么应用程序的简称
- 华为dubal20是什么型号
- 小程序大小超限除了分包还能怎么做?如何避免和解决大小限制?
- ana an00华为是什么型号
- 电脑显示信号线无连接是什么意思
- html5中onclick是什么意思
- 超清视效是什么意思
- vivov1818a是什么手机型号
- html5的标题标记一共有几个等级

- 最新文章
-
-
手把手带你使用Vue开发一个五子棋小游戏!
本篇文章带大家利用Vue基础语法来写一个五子棋小游戏,希望对大家有所帮助!在之前的文章中,用JS的基础语法写了一个五子棋小游戏,今天用Vue的基础语法来写一个,...
-
docker虚拟化是什么
docker虚拟化指的是一种资源管理技术,将计算机的实体资源予以抽象转换后呈现出来,主要用来解决高性能的物理硬件产生过生和老的旧硬件产能过低的重组重用;而Doc...
-
docker是哪个公司的产品
docker是dotCloud公司的产品;docker最初是dotCloud公司创始人“SolomonHykes”在法国期间发起的一个公司内部项目,它是基于d...
-
什么是装饰器?聊聊Angular中怎么使用方法装饰器?
什么是装饰器?本篇文章给大家介绍一下Angular中使用方法装饰器的方法,希望对大家有所帮助!方法装饰器并不是Angular的专属特性,在es6中也有着...
-
docker进程隔离是什么意思
在docker中,进程隔离是将每个容器都运行在自己的进程环境中的意思;Docker主要就是借助Linux内核技术Namespace来做到隔离的,“LinuxN...
-
- 热门文章
-
-
VUE中V-IF条件判断改变元素的样式操作
这篇文章主要介绍了VUE中V-IF条件判断改变元素的样式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧...
-
Discuz如何解决安装时报错run_sql_error
问题环境VMware虚拟机Centos7.3PHP7.0MySQL8.0NGINX1.14Discuz3.4问题还原本地环境为PHP5.6+MySQL5.6在安...
-
低版本VS项目在VS2019无法正常编译的问题
低版本VS项目在VS2019无法正常编译的问题这里指的编译并不准确,只是为了方便说明。后有(未安装),201?...
-
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
实现原理使用redis链表来做,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用。实现步骤第一步,先将商品库存入队列/**.trigge...
-
Oracle数据库的实例/表空间/用户/表之间关系简单讲解
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。我们用这些高级权限账号...
-