当前位置: 首页 > news >正文

乐昌门户网站pageadmin自助建站系统

乐昌门户网站,pageadmin自助建站系统,国家企业公示信息查询官网,哈尔滨seo网站管理多表数据联合查询 ​专栏内容#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献#xff1a; toadb开源库 个人主页#xff1a;我的主页 管理社区#xff1a;开源数据库 座右铭#xff1a;天行健#xff0c;君子以自强不息#xff1b;地势坤#x…多表数据联合查询 ​专栏内容 postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献 toadb开源库 个人主页我的主页 管理社区开源数据库 座右铭天行健君子以自强不息地势坤君子以厚德载物. 系列文章 入门准备postgrersql基础架构快速使用初始化集群数据库服务管理psql客户端使用pgAdmin图形化客户端数据库的使用创建数据库数据库操作表的使用表的创建表的操作数据查询数据查询多表联合查询 文章目录 多表数据联合查询系列文章前言概述原理介绍多表 join 连接操作1. 内连接INNER JOIN2. 左连接LEFT JOIN3. 右连接RIGHT JOIN4. 全连接FULL JOIN 多表union 操作联合类型说明1. union 2. union all3. except3. intersect总结结尾 前言 postgresql 数据库是一款通用的关系型数据在开源数据库中能与商业数据媲美在业界也越来越流行。 因为是开源数据库不仅公开源码还有很多使用案例好用的插件所以它的慢慢变成了数据库的先驱和标准通过postgresql可以很好从使用到原理彻底搞懂 如果是学习编程也可以学到丰富的编程知识数据结构编程技巧它里面还有很多精妙的架构设计分层思想可以灵活定制的思想。 本专栏主要介绍postgresql 入门使用数据库维护管理通过这些使用来了解数据库原理慢慢了解postgresql是什么样的数据库能做那些事情以及如何做好服务最关键的是这些知识都是面试的必备项。 概述 我们在实际应用中查询数据往往涉及到多表的数据如何使用一条SQL就能得到结果呢 本文就来分享一下多表数据的查询方法并举例说明它们使用的技巧 原理介绍 多表数据的联合查询在postgresql 中有两个基本方法 join 连接操作union 联合子查询 多表join连接其实就是通过某个列作为纽带将多个实际的表连接成一张大表然后在大表上进行查询 而union 与 join 完全不同 union 通过联合 多个子查询结果也就是说union 操作的是查询结果将多个结果集合并成一个结果集然后在这个总结果集上再进行二次查询处理 也就是我们数学中的集合的几种 而更加总结的话就涉及到关系代数中对于集合的操作 集合操作主要包括以下几种 并集操作Union将两个集合合并成一个集合包括所有属于两个集合的元素。交集操作Intersection将两个集合的公共元素组成一个新的集合。差集操作Difference从一个集合中去掉属于另一个集合的元素剩下的元素组成一个新的集合。对称差集操作Symmetric Difference将属于一个集合但不属于另一个集合的元素以及属于另一个集合但不属于一个集合的元素组成一个新的集合。笛卡尔积操作Cartesian Product将两个集合的所有可能有序对组成一个新的集合。 多表 join 连接操作 在PostgreSQL中多表查询是通过使用连接JOIN和交叉连接CROSS JOIN等操作来实现的。 连接操作是指将两个或多个表按照指定的条件进行关联以获得它们之间的关系数据。 下面我们举例来说明首先创建两张表custom 和 order; 以下是一个使用PostgreSQL进行JOIN操作的案例 假设我们有两个表customers和orders。customers表包含客户的信息而orders表包含订单的信息。这两个表通过一个共同的字段customer_id相关联。 首先让我们创建这两个表并插入一些数据 CREATE TABLE customers (customer_id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(50) );CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,total_amount DECIMAL(10,2) );INSERT INTO customers (customer_id, name, email) VALUES (1, John Doe, johnexample.com),(2, Jane Smith, janeexample.com),(3, Bob Johnson, bobexample.com),(4, Steven John, stevenexample.com),(5, Kenidy, Kenidyexample.com);INSERT INTO orders (order_id, customer_id, order_date, total_amount) VALUES (1, 1, 2023-01-01, 100.00),(2, 1, 2023-02-01, 200.00),(3, 2, 2023-02-15, 150.00),(4, 3, 2023-03-01, 75.00);1. 内连接INNER JOIN 将两个表中的行进行匹配返回满足连接条件的行。语法如下 postgres# SELECT * FROM customers INNER JOIN orders ON customers.customer_id orders.customer_id;customer_id | name | email | order_id | customer_id | order_date | total_amount ---------------------------------------------------------------------------------------------1 | John Doe | johnexample.com | 1 | 1 | 2023-01-01 | 100.001 | John Doe | johnexample.com | 2 | 1 | 2023-02-01 | 200.002 | Jane Smith | janeexample.com | 3 | 2 | 2023-02-15 | 150.003 | Bob Johnson | bobexample.com | 4 | 3 | 2023-03-01 | 75.00 (4 rows) 这里特意用 * 查出结果集中的所有列让我们可以清晰看到结果集的全貌可以看到join后的结果集是两表的所有列的合并 对于内联连只是列出了符合连接条件的行大家想一想还有什么写法可以达到这种效果 。 对于 条件写到where子句中也可以所以内联接与where条件是等价的 postgres# select * from customers,orders where customers.customer_id orders.customer_id;customer_id | name | email | order_id | customer_id | order_date | total_amount ---------------------------------------------------------------------------------------------1 | John Doe | johnexample.com | 1 | 1 | 2023-01-01 | 100.001 | John Doe | johnexample.com | 2 | 1 | 2023-02-01 | 200.002 | Jane Smith | janeexample.com | 3 | 2 | 2023-02-15 | 150.003 | Bob Johnson | bobexample.com | 4 | 3 | 2023-03-01 | 75.00 (4 rows) 2. 左连接LEFT JOIN 在内连接的基础上将左侧表中的所有行都包含在结果集中即使右侧表中没有匹配的行。语法如下 postgres# select * from customers left join orders on customers.customer_id orders.customer_id;customer_id | name | email | order_id | customer_id | order_date | total_amount -----------------------------------------------------------------------------------------------1 | John Doe | johnexample.com | 1 | 1 | 2023-01-01 | 100.001 | John Doe | johnexample.com | 2 | 1 | 2023-02-01 | 200.002 | Jane Smith | janeexample.com | 3 | 2 | 2023-02-15 | 150.003 | Bob Johnson | bobexample.com | 4 | 3 | 2023-03-01 | 75.005 | Kenidy | Kenidyexample.com | | | |4 | Steven John | stevenexample.com | | | | (6 rows)左联接后的结果集列也是两表的合并而行数与之前不同左边表列表出所有行而右边的表只列出了符合条件的行对于左表多出的行右表以空代替 3. 右连接RIGHT JOIN 在内连接的基础上将右侧表中的所有行都包含在结果集中即使左侧表中没有匹配的行。语法如下 postgres# select * from customers right join orders on customers.customer_id orders.customer_id;customer_id | name | email | order_id | customer_id | order_date | total_amount ---------------------------------------------------------------------------------------------1 | John Doe | johnexample.com | 1 | 1 | 2023-01-01 | 100.001 | John Doe | johnexample.com | 2 | 1 | 2023-02-01 | 200.002 | Jane Smith | janeexample.com | 3 | 2 | 2023-02-15 | 150.003 | Bob Johnson | bobexample.com | 4 | 3 | 2023-03-01 | 75.00 (4 rows) 右联接与左联接类似结果集的行包括右表的所有行左表只有符合联接表条件行 4. 全连接FULL JOIN 相当于在左连接和右连接的基础上同时做左连接和右连接并返回两侧表中所有满足条件的行。语法如下 postgres# select * from customers full join orders on customers.customer_id orders.customer_id;customer_id | name | email | order_id | customer_id | order_date | total_amount -----------------------------------------------------------------------------------------------1 | John Doe | johnexample.com | 1 | 1 | 2023-01-01 | 100.001 | John Doe | johnexample.com | 2 | 1 | 2023-02-01 | 200.002 | Jane Smith | janeexample.com | 3 | 2 | 2023-02-15 | 150.003 | Bob Johnson | bobexample.com | 4 | 3 | 2023-03-01 | 75.005 | Kenidy | Kenidyexample.com | | | |4 | Steven John | stevenexample.com | | | | (6 rows) 全联接就是包括左右两条的所有行没有符合条件的行以空代替 多表union 操作 PostgreSQL中的联合查询是一种将多个SELECT语句的结果组合成一个结果集的方法。它允许您从多个表或查询中获取数据并根据指定的条件将它们组合在一起。 联合查询的基本语法如下 SELECT column1, column2, ... FROM table1 UNION/UNION ALL/EXCEPT/INTERSECT SELECT column1, column2, ... FROM table2 WHERE condition;这里有几个关键部分 SELECT语句用于指定要检索的列和表。UNION、UNION ALL、EXCEPT和INTERSECT这些关键字用于指定要执行的联合操作类型。WHERE子句可选的条件用于筛选结果。 联合类型说明 UNION返回两个查询结果的并集但会删除重复的行。UNION ALL返回两个查询结果的并集包括重复的行。EXCEPT返回第一个查询结果中存在但在第二个查询结果中不存在的行。INTERSECT返回两个查询结果中共有的行。 请注意使用联合查询时确保每个查询中选择的列数和列类型是一致的否则可能会导致错误。 1. union 合并两个表的数据并删除重复行 postgres# select customer_id from customers union select customer_id from orders ;customer_id -------------23541 (5 rows) 这将返回一个结果集其中包含两个表中所有不重复的行 两个select 子句中的列数和类型必须一致才行这样两个结果集才能合并到一起。 2. union all 合并两个表的数据并保留重复行 如果我们希望保留两个表中的所有行包括重复的行那么可以使用 UNION ALL 运算符。 postgres# select customer_id from customers union all select customer_id from orders ;customer_id -------------123451123 (9 rows) 这将返回一个结果集其中包含两个表中所有的行包括重复的行。 同时如果想要对结果进行排序 可以使用 ORDER BY 子句。例如 postgres# select customer_id from customers union all select customer_id from orders order by customer_id asc;customer_id -------------111223345 (9 rows) 当然也可以加where 等其它子句 3. except 获得两个集合的差也就是前者集合中包括而不属于后者集合的行 postgres# select customer_id from customers except select customer_id from orders ;customer_id -------------54 (2 rows) 也就是查询还没有产生订单的客户ID列表 3. intersect INTERSECT运算符用于找出两个SELECT语句结果集的交集。它的语法如下 postgres# select customer_id from customers intersect select customer_id from orders order by customer_id asc;customer_id -------------123 (3 rows) 这个类似于inner join找到有订单的客户id列表 总结 相同之处是它们都是对结果集进行操作 但是有明显的区别join是将多表进行联接产生结果集然后再通过where等条件在联接后的结果集上再过滤 而union并不限于表与表之间而是对不同查询结果集再进行集合操作而且对于最终结果的列有要求必须参与的集合列数量和类型要相同 结尾 非常感谢大家的支持在浏览的同时别忘了留下您宝贵的评论如果觉得值得鼓励请点赞收藏我会更加努力 作者邮箱studysenllang.onaliyun.com 如有错误或者疏漏欢迎指出互相学习。 注未经同意不得转载
http://www.pierceye.com/news/954692/

相关文章:

  • 短期网站建设培训学校网页建站价格
  • 偏门网站建设做的网站被挂马
  • 三五互联网站自己做一个网站需要什么
  • wordpress博客网站深圳建工集团
  • 罗永浩做的网站房产网站设计方案
  • 创建个人网站多少钱模板速成网站
  • 晋江做网站的公司哪家好企业网站报价
  • 百度权重查询网站旅游公司的网站怎么做
  • 品牌网站建设小蝌蚪2a西安中交建设集团网站
  • 潍坊网页网站制作优畅 wordpress
  • 搜狗收录网站网站制作费用预算表
  • dede网站安全长沙营销型
  • 那些做电影视频网站的赚钱吗邯郸网站建设方案
  • 在线做app的网站wordpress 产品分类
  • seo网站建设规划网站模板视频教程
  • 沈阳网站制作策划wordpress 文章页调用
  • 网站开发和网络工程师方法网站目录
  • 用dw做网站的好处网页美工培训中心
  • 中文域名注册 .网站网站英文地图怎么做
  • 汽车行业网站建设维护服务wordpress改投票系统
  • 网站快照长期不更新wordpress 顶部高度
  • 雨颜色网站建设电器类网站设计
  • 网站建设模块化实现企业网站建设范文
  • 网站培训班有哪些课程中国工程建设标准化协会官方网站
  • 医院网站建设 费用做商业网站
  • 网站设计考虑因素wordpress录入表单写数据库
  • 个人博客网站设计网站优化方式有哪些
  • 网站建设文化教程网站开发建设成本
  • 洛阳做网站公司汉狮价格wordpress移动端悬浮导航
  • 免费网站的代码wordpress给分类添加自定义栏目