CSDN乘风破浪的 SQL( 四 )
以下查询返回了 Bill 一周中的前两天计划里的第一项内容:
select schedule[1:2][1:1] from sal_emp where name = 'bill';name |-----|Carol|使用下标可以访问数组的元素 , PostgreSQL 中的数组元素从 1 开始编号 。 以下语句用于修改数组中的数据切片:
update sal_empset pay_by_quarter[1:2] = '{27000,27000}'where name = 'carol';PostgreSQL 为数组数据提供许多函数和运算符 , 例如以下查询使用 && 运算符查找曾经拿过 10000 报酬的员工:
select name from sal_emp where pay_by_quarter && array[10000];name|----|Bill|unnest 函数可以将数组转换为关系表 , 例如:
select name, unnest(pay_by_quarter), unnest(schedule) from sal_emp;name |unnest|unnest |-----|------||Bill | 10000|meeting |Bill | 10000|lunch |Bill | 10000|training |Bill | 10000|presentation|Carol| 20000|breakfast |Carol| 25000|consulting |Carol| 25000|meeting |Carol| 25000|lunch |PostgreSQL 还为数组提供了 GiST 和 GIN 类型的索引 , 可以优化数组数据的查询 。
除此之外 , 基于 PostgreSQL 的 PostGIS Raster、Oracle GeoRaster 以及 rasdaman 数组数据库则提供了更加完善的多维数组应用场景支持 。
SQL 与图形数据库
图形数据库(graph database)属于 NoSQL 的一种 , 使用节点、边和属性来表示和存储数据 , 使用图结构进行语义查询 。 图形数据库非常适合社交网络、人工智能、欺诈检测、推荐系统等领域中的复杂关系处理 。 Neo4j 是目前最著名的图形数据库 。
本文插图
2019 年 9 月 17 图形查询语言(GQL)成为了继 SQL 之后另一种新的 ISO 标准数据库查询语言 。 与此同时 , SQL 标准将会出现一个新的第 16 部分(SQL/PGQ)(Property Graph Query) , 在 SQL 中直接提供一些 GQL 功能 。
目前 , MariaDB(OQGRAPH)、Oracle、Microsoft SQL Server 等关系型数据库都提供了图结构存储支持 。 上图是 Oracle 中一个金融交易系统的图形数据库示例 , 其中 Account、Person 和 Company 是顶点 , ownerOf、worksFor 和 transaction 是边;另外 , name 和 number 是顶点的属性 , amount 是边的属性 。 它们可以使用以下数据表进行存储:
本文插图
基于这些表可以创建以下属性图形:
CREATE PROPERTY GRAPH financial_transactionsVERTEX TABLES (Accounts LABEL Account,Persons LABEL Person PROPERTIES ( name ),Companies LABEL Company PROPERTIES ( name ))EDGE TABLES (TransactionsSOURCE KEY ( from_account ) REFERENCES AccountsDESTINATION KEY ( to_account ) REFERENCES AccountsLABEL ( transaction ) PROPERTIES ( amount ),PersonOwnerOfAccountSOURCE PersonsDESTINATION AccountsLABEL ownerOf NO PROPERTIES,CompanyOwnerOfAccountSOURCE CompaniesLABEL ownerOf NO PROPERTIES,PersonWorksForCompanySOURCE PersonsDESTINATION CompaniesLABEL worksFor NO PROPERTIES);接下来我们就可以直接使用 SQL 语句查询图结构 , 例如以下语句查找所有和名叫 Nikita 的人有过交易的人员和信息:
SELECT owner.name AS account_holder, SUM(t.amount) AS total_transacted_with_Nikita FROM MATCH (p:Person) -[:ownerOf]-> (account1:Account) , MATCH (account1) -[t:transaction]- (account2) /* match both incoming and outgoing transactions */ , MATCH (account2:Account) <-[:ownerOf]- (owner:Person|Company) WHERE p.name = 'Nikita'GROUP BY owner
推荐阅读
- 海峡网|伊能静蓝盈莹淘汰将离开,《乘风破浪的姐姐》四公淘汰名单
- 大熊猫河里冲浪上演国宝式狗刨|大熊猫河里冲浪上演国宝式狗刨
- 教育|每一位中年女性,都是“乘风破浪的姐姐”
- 「大熊猫河里冲浪上演国宝式狗刨」大熊猫河里冲浪上演国宝式狗刨
- 综艺|从《乘风破浪的姐姐》看原创综艺走出去
- 文汇|《忘不了餐厅》《乘风破浪的姐姐》等综艺凭借现实主义表达,收获巨大关注
- 节目|拒绝《乘风破浪的姐姐》的刘忻后悔了么?
- 女性|从《乘风破浪的姐姐》看原创综艺走出去
- 人民日报海外版|从《乘风破浪的姐姐》看原创综艺走出去
- 乘风破浪的姐姐|《浪姐》复活团7选2,阿朵孟佳成功晋级,宁静现场发飙:直接解散吧
