CN104714952B - 一种数据库的多重查询方法 - Google Patents
一种数据库的多重查询方法 Download PDFInfo
- Publication number
- CN104714952B CN104714952B CN201310680366.3A CN201310680366A CN104714952B CN 104714952 B CN104714952 B CN 104714952B CN 201310680366 A CN201310680366 A CN 201310680366A CN 104714952 B CN104714952 B CN 104714952B
- Authority
- CN
- China
- Prior art keywords
- serial number
- inquired
- last
- value
- key word
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种数据库的多重查询方法,包括以下步骤:a,将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合;b,针对所述集合中的序号,将其作为所要查询的首个序号,将其与所述序号集合中下一序号之间的序号作为所要查询的第二个序号到最后一个序号,重复步骤a;c,重复步骤a、b,直至所得到的序号集合为空集,获取每个空集对应的所述序号集合的最后一个序号,即得到查询关键字段的值重复出现的切割点。
Description
技术领域
本发明涉及数据查询技术领域,特别是涉及一种数据库的多重查询表中数据的方法。
背景技术
设计数据库和创建数据库的最终目的是使用数据库。与数据一起工作是SQL(Structured Query Language,结构化查询语言,简称SQL)数据操作语言的工作。DML(Datamanipulation language,数据操作语言)的核心是select(选择,这里指一条计算机SQL数据库中中常用的函数,用来选择对象)命令,它也是查询数据库的唯一命令。select是SQL命令中最大、最复杂的命令。select的很多操作都来源于关系代数,并且包含了关系代数的很多内容。即使在SQLite(SQLite是一款开源的、嵌入式关系型数据库,它没有独立运行的进程,与所有服务的应用程序在应用程序进程内共生共存。SQLite在便携性、易用性、紧凑型、高效性和可靠性方面有突出的表现。其设计目标是嵌入式的,目前在很多嵌入式产品得到广泛使用)这样精简而高效的环境中,select语句的能力和复杂性依然是巨大的。SQLite数据库的主要特点是:占用系统资源非常低,支持Windows/Linux/Unix等主流的操作系统,可与很多程序语言相结合,并具有ODBC(Open Database Connectivity,开放数据互联)接口,处理速度更快。SQLite通向select命令的方法非常具有逻辑性,它具备支持关系数据库的底层关系理论的坚实基础。
目前,我们常用的查询表格数据的方法,当查询条件为确定时,我们可以明确用SQL语句来实现,但是当查询条件为多个条件的动态组合时,查询语句会由于分支太多及IF语句的多重嵌套而变得相当复杂,特别是在嵌入式操作系统下,消化内存有限。
因此,本发明提供一种数据库的优化的多重查询的方法。
发明内容
本发明提出一种数据库的多重查询方法,包括以下步骤:
将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合;
针对所述序号集合中的序号,将其作为所要查询的首个序号,将其与所述序号集合中下一序号之间的序号作为所要查询的第二个序号到最后一个序号,重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤;
重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤,及所述针对所述序号集合中的序号,将其作为所要查询的首个序号,将其与所述序号集合中下一序号之间的序号作为所要查询的第二个序号到最后一个序号,重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤的步骤,直至所得到的序号集合为空集,获取每个空集对应的所述序号集合的最后一个序号,即得到查询关键字段的值重复出现的切割点。
其中,所述数据库为SQLite数据库。
其中,如果所述序号集合中的最后一个序号是数据库中所查询段的最后一个序号,则停止根据该序号进行查询,并将该序号作为一个切割点。
其中,如果所述序号集合中的最后一个序号不是数据库中所查询段的最后一个序号,则将其作为所要查询的首个序号,将其与数据库中所查询段的最后一个序号之间的序号作为所要查询的第二个序号到最后一个序号,重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤。
其中,根据所得到的查询关键字段的值重复出现的切割点,与所要查询的最后一个序号一起构成查询结果的切割点的序号值,获取与其对应的信息,并以表格的形式呈现给用户。
与现有技术相比,本发明提出一种多重查询的方法,利用select查询命令,以及SQL中的别名和限定、排序功能封装一种方法,方便有效查询重复字段在表的分割的序号,再根据序号做相应的数据操作,有效地减少查询语句的分支和数量以及IF条件语句的嵌套层数,从而提高程序的运行效率。
附图说明
图1为本发明一个实施例的一种数据库的多重查询方法的流程图。
具体实施方式
下面通过具体实施例,对本发明的技术方案进行清楚、完整的描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明一个实施例的一种数据库的多重查询方法的流程图。提出的一种数据库的多重查询方法,包括以下步骤:
a,将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合;
b,针对所述序号集合中的序号,将其作为所要查询的首个序号,将其与所述序号集合中下一序号之间的序号作为所要查询的第二个序号到最后一个序号,重复步骤a;
c,重复步骤a、b,直至所得到的序号集合为空集,获取每个空集对应的所述序号集合的最后一个序号,即得到查询关键字段的值重复出现的切割点。
具体实施时,所述数据库为SQLite数据库。
具体实施时,如果所述序号集合中的最后一个序号是数据库中所查询段的最后一个序号,则停止根据该序号进行查询,并将该序号作为一个切割点。
具体实施时,如果所述序号集合中的最后一个序号不是数据库中所查询段的最后一个序号,则将其作为所要查询的首个序号,将其与数据库中所查询段的最后一个序号之间的序号作为所要查询的第二个序号到最后一个序号,重复步骤a。
具体实施时,根据所得到的查询关键字段的值重复出现的切割点,与所要查询的最后一个序号一起构成查询结果的切割点的序号值,获取与其对应的信息,并以表格的形式呈现给用户。
下面通过一个简单的实施例,来说明本发明的显著进步。
假设有一个名为hotel的表,为了查询“NAME”为餐费的项目,首先我们要从其中查询表中NAME的值重复出现的切割点数据,如表1所示:
表1.hotel
NO | NAME | Price | … |
1 | 餐费 | … | … |
2 | 餐费 | … | … |
3 | 房费 | … | … |
4 | 房费 | … | … |
5 | 房费 | … | … |
6 | 餐费 | … | … |
7 | 其他 | … | … |
8 | 其他 | … | … |
9 | 房费 | … | … |
10 | 餐费 | … | … |
根据表1数据,我们要得到的查询结果如表2所示:
表2.查询结果
NO | NAME |
2 | 餐费 |
5 | 房费 |
6 | 餐费 |
8 | 其他 |
9 | 房费 |
10 | 其他 |
为了解决上述问题,我们首先提出一种普通查询方法,步骤如下:
S1:查询数据库表HOTEL中NO=1的NAME值,语句是:
Select NO,NAME from HOTEL where NO=1;
S2:递增字段NO的值,查询NAME值;
S3:循环重复步骤S2,直到NO=N的NAME值与NO=1的不相同,记录分隔段为(1,N),并记录NO=N的NAME值;
Select NO,NAME from HOTEL where(NO=1).NAME<>NAME;
S4:根据步骤S3记录的NAME值,重复步骤S2;
S5:循环重复步骤S2~S4,最终查询表中分隔段。
显然此方法是比较烦琐的,在条件增多时,其复杂程度将大大增加。
我们对其进行优化,提出第二种方法:定义一个字符串Str_Name为查询NO的name的值。用程序语言描述如下:
if Str_Name1<>Str_Name2then
if Str_Name2<>Str_Name3then
if Str_Name3<>Str_Name4then
…
if Str_Name=""then
…
end if
end if
end if
显然,这种方法组合的分支和if语句的多重嵌套,降低程序的效率,增加对数据查询的次数。对于在嵌入式系统开发的程序,资源要求比较高,这样查询是不允许的,对程序的消耗过大。
于是,本发明继续对其优化,提出一种数据库的多重查询方法,具体实施时,所述数据库为SQLite数据库,所述多重查询方法包括以下步骤:
a,将所要查询的第二个序号到最后一个序号(NO为2~10)对应的查询关键字段(NAME)的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值(NO=1时NAME的值,即“餐费”)相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合(3、7、9);
b,针对所述序号集合中的每个序号,将其作为所要查询的首个序号,将其与所述序号集合中下一序号之间的序号作为所要查询的第二个序号到最后一个序号(如NO为1~2或3~6或7~8),重复步骤a;所述序号集合中的最后一个序号(9)不是数据库中所查询段的最后一个序号(10)时,则将其作为所要查询的首个序号,将其与数据库中所查询段的最后一个序号之间的序号(NO为9~10)作为所要查询的第二个序号到最后一个序号,重复步骤a。所述序号集合中的最后一个序号是数据库中所查询段的最后一个序号时,则停止根据该序号进行查询,并将该序号作为一个切割点(如:NO为3~6时,查询时所得序号集合的最后一个序号为6,则停止该序号的查询,序号为6作为一个分割点)。
c,重复步骤a、b,直至所得到的序号集合为空集(如NO为1~2,NAME值都相同,所得结果为空集),获取每个空集对应的所述序号集合的最后一个序号,即得到查询关键字段的值重复出现的切割点。
最后,根据所得到的所有查询关键字段的值重复出现的切割点,与所要查询的最后一个序号(NO为10)一起构成查询结果的切割点的序号值,获取与其对应的信息,并以表格的形式呈现给用户(如表2所示)。
具体实施时,定义一个字符串Str_Name为查询NO的name的值,把表HOTEL别名为A,利用程序循环查询数据库表HOTEL中NO的NAME值为Str_NameA。用程序语言描述如下:
通过SQL语句中的别名条件是:
NAME=A.NAME AND NO>aa.NO order by NO limit1
通过比较NO=1的NAME的值不同的NO值有3,7,9,取NO为3值,需要查询上一条同样的Name值的NO,所以再查询的NO的值减去1,再循环查询。直至把联系不同的NAME值的序号都查询出来。最终列出封装的SQL语句如下:
select NO,NAME from HOTEL as A where(NO<>((select NO from HOTELwhereNAME=A.NAME AND NO>aa.NO order by NO limit1)-1));
根据上述的封装的SQL语句查询重复数据出现的分割点,用程序中循环查询的方法代替逐条判断,这样可以节约查询时间。根据此封装的方法,结合应用程序实际使用,用户通过调用此封装,可以快速方便地完成对数据库的多重查询,方便为用户解决问题。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。
Claims (3)
1.一种数据库的多重查询方法,其特征在于,包括以下步骤:
将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合;
针对所述序号集合中的序号,将其作为所要查询的首个序号,将其与所述序号集合中下一序号之间的序号作为所要查询的第二个序号到最后一个序号,重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤;
重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤,及所述针对所述序号集合中的序号,将其作为所要查询的首个序号,将其与所述序号集合中下一序号之间的序号作为所要查询的第二个序号到最后一个序号,重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤的步骤,直至所得到的序号集合为空集,获取每个空集对应的所述序号集合的最后一个序号,即得到查询关键字段的值重复出现的切割点;
如果所述序号集合中的最后一个序号是数据库中所查询段的最后一个序号,则停止根据该序号进行查询,并将该序号作为一个切割点;
如果所述序号集合中的最后一个序号不是数据库中所查询段的最后一个序号,则将其作为所要查询的首个序号,将其与数据库中所查询段的最后一个序号之间的序号作为所要查询的第二个序号到最后一个序号,重复所述将所要查询的第二个序号到最后一个序号对应的查询关键字段的值,逐一判断其是否与所要查询的首个序号对应的查询关键字段的值相同,获取判断结果为不同的至少一个连续序号中的第一个序号,得到序号集合步骤。
2.根据权利要求1所述的数据库的多重查询方法,其特征在于,所述数据库为SQLite数据库。
3.根据权利要求1所述的数据库的多重查询方法,其特征在于,根据所得到的查询关键字段的值重复出现的切割点,与所要查询的最后一个序号一起构成查询结果的切割点的序号值,获取与其对应的信息,并以表格的形式呈现给用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310680366.3A CN104714952B (zh) | 2013-12-11 | 2013-12-11 | 一种数据库的多重查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310680366.3A CN104714952B (zh) | 2013-12-11 | 2013-12-11 | 一种数据库的多重查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104714952A CN104714952A (zh) | 2015-06-17 |
CN104714952B true CN104714952B (zh) | 2018-07-06 |
Family
ID=53414296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310680366.3A Active CN104714952B (zh) | 2013-12-11 | 2013-12-11 | 一种数据库的多重查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104714952B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109614082B (zh) * | 2018-09-28 | 2022-03-04 | 创新先进技术有限公司 | 一种针对数据查询脚本的翻译方法、装置及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101145162A (zh) * | 2007-10-31 | 2008-03-19 | 金蝶软件(中国)有限公司 | 一种数据库动态查询的方法和系统 |
CN101556620A (zh) * | 2009-05-21 | 2009-10-14 | 中国建设银行股份有限公司 | 一种信息管理系统数据库查询方法、系统及相关设备 |
CN103136364A (zh) * | 2013-03-14 | 2013-06-05 | 曙光信息产业(北京)有限公司 | 集群数据库系统及其数据查询处理方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8433701B2 (en) * | 2009-11-19 | 2013-04-30 | 21Ct, Inc. | System and method for optimizing pattern query searches on a graph database |
US8527497B2 (en) * | 2010-12-30 | 2013-09-03 | Facebook, Inc. | Composite term index for graph data |
US8965904B2 (en) * | 2011-11-15 | 2015-02-24 | Long Van Dinh | Apparatus and method for information access, search, rank and retrieval |
-
2013
- 2013-12-11 CN CN201310680366.3A patent/CN104714952B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101145162A (zh) * | 2007-10-31 | 2008-03-19 | 金蝶软件(中国)有限公司 | 一种数据库动态查询的方法和系统 |
CN101556620A (zh) * | 2009-05-21 | 2009-10-14 | 中国建设银行股份有限公司 | 一种信息管理系统数据库查询方法、系统及相关设备 |
CN103136364A (zh) * | 2013-03-14 | 2013-06-05 | 曙光信息产业(北京)有限公司 | 集群数据库系统及其数据查询处理方法 |
Non-Patent Citations (2)
Title |
---|
"多重查询优化技术在移动数据库中的应用";杨晓宇 等;《小型微型计算机系统》;20040831;第25卷(第8期);论文第1538-1541页 * |
"数据库多重条件查询的方法探讨";张蔚;《厦门理工学院学报》;20060331;第14卷(第1期);论文第102-104页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104714952A (zh) | 2015-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10970270B2 (en) | Unified data organization for multi-model distributed databases | |
US11068439B2 (en) | Unsupervised method for enriching RDF data sources from denormalized data | |
CN106202207B (zh) | 一种基于HBase-ORM的索引及检索系统 | |
CN107491561B (zh) | 一种基于本体的城市交通异构数据集成系统及方法 | |
US9317557B2 (en) | Answering relational database queries using graph exploration | |
CN109299102A (zh) | 一种基于Elastcisearch的HBase二级索引系统及方法 | |
CN103412924B (zh) | 日志多语言查询方法和系统 | |
US20170147541A1 (en) | Converting portions of documents between structured and unstructured data formats to improve computing efficiency and schema flexibility | |
CN104731945B (zh) | 一种基于HBase的全文检索方法及装置 | |
US20140025684A1 (en) | Indexing and searching a data collection | |
Hamouda et al. | Document-oriented data schema for relational database migration to NoSQL | |
CN111506621B (zh) | 一种数据统计方法及装置 | |
WO1998004980A1 (en) | Database apparatus | |
CN110688397B (zh) | 一种基于sql的分布式数据统一访问系统及方法 | |
CN111008020B (zh) | 将逻辑表达式解析为通用查询语句的方法 | |
CN104462161A (zh) | 基于分布式数据库的结构化数据查询方法 | |
CN107077496A (zh) | 用于索引编译以优化索引使用的系统、方法和设备 | |
CN102819600B (zh) | 面向电力生产管理系统关系数据库的关键词搜索方法 | |
JPWO2009095981A1 (ja) | 表からツリー構造データを構築する方法及び装置 | |
Yafooz et al. | Managing unstructured data in relational databases | |
WO2017096155A1 (en) | Methods and systems for mapping object oriented/functional languages to database languages | |
KR101244466B1 (ko) | NoSQL 기반 데이터 모델링 방법 | |
CN104714952B (zh) | 一种数据库的多重查询方法 | |
CN110019306A (zh) | 一种基于xml格式文件的sql语句查找方法及系统 | |
CN108121807B (zh) | Hadoop环境下多维索引结构OBF-Index的实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |