下面是小编为大家收集的关系型数据库基础之:简单的数据查询,本文共9篇,仅供参考,欢迎大家阅读,希望可以帮助到有需要的朋友。

篇1:关系型数据库基础之:简单的数据查询
关系型数据库基础之:简单的数据查询
关系型数据库基础之:使用DML语言更改数据
/database/04/17.html
5、简单的数据查询:
查询的基本结构:
select,from,where,orber by和distinct都是sql查询关键字,
数据库的查询操作分为3种:投影操作、选择操作、排序操作。
投影操作:
select 列名列表 from 表;
表名前缀:
select t_student.f_name from t_student;
如果从多张表中获取数据就用表名前缀。
列别名:
单表:select 列A as A,列B as B from 表名 as T;
多表:select T.列A as A,T.列B as B from 表名 as T;
计算列:
可以用于计算加、减、乘、除。
排除重复数据:
select distinct 列A from 表;
distinct的作用是把该列的重复值去掉,每一个值只保留一个。
返回限定行数的查询:
select 列A,列B from t_student limit 开始序号;
select 列A,列B from t_student limit 开始序号,结束序号;
一个参数:从第一行开始返回指定行数的结果。
两个参数:从指定行开始返回指定行数的结果。
limit后面加数字5代表从1开始显示5行结果;(m,n)代表从(m+1)开始显示n条记录。
limit的序号是从0开始,limit只能用于My SQL中。
limit写在所有语句后,返回语句在查询语句后。
选择操作:
select 列名列表 from 表 where 条件;
单条件选择操作:
select 列A,列B from 表 where 列c=值;
= :等于
!=,^=, :不等于:不等不要随便用,用过之后索引不起作用。
> :大于
>= :大于等于
< :小于
<= :小于等于
多条件选择操作:
select 列A,列B from 表 where 条件1 and或者or 条件2;
and是并且,or是或者,
执行范围测试(between):
select 列A,列B from 表
where 列C between 下限 and 上线;
between后面是开始值,and后面是结束值。
在between后面加not就是排除这个范围。
定义集合关系:
select 列A,列B from 表 where 列C in (值集合);
在指定的几个值中进行收索,用于一些不连续的数值。
也可以是独立的select查询:
select 列A,列B from 表
where 列C in (select 列D from 表2);
in与not一起组合使用,可以查询不在集合中的数据:
select 列A,列B from 表 where 列C not in (值集合);
模糊查询(like):
select 列A,列B from 表 where 列C like 模式;
%表示匹配包含零个或多个字符的任意字符串,可前缀和后缀。
_表示匹配任意单个字符,可前缀和后缀。
不能在里面加空格。空格是一个字符。
处理空值:
判断为空不能用=号。
select 列A,列B from 表 where 列C is not null;测试c不为空
select 列A,列B from 表 where 列C is null;测试c为空null也是返回false。
匹配null必须使用is null 或者is not null,使用其他任何比较运算符来匹配后得到的结果都是flase。
排序操作:
排序默认从小到大来排序的。
select 列A,列B from 表 order by 列A,列B……;
单列排序:
select 列A,列B from 表 order by 列A asc;
asc是按照升序排序,是默认的无需加上。
select 列A,列B from 表 order by 列A desc;
desc是降序排序。
多列排序:
select 列A,列B from 表 order by 列A,列B……;
在select子句后指定多个列名时,是根据后面列名的顺序来确定优先级的。
篇2:关系型数据库基础之:保证数据完整性
关系型数据库基础之:保证数据完整性
关系型数据库基础之:管理数据库和表
/database/201304/24.html
3、保证数据完整性:
数据完整性概述:
数据的完整性包含了数据的可靠性和数据的准确性,
根据数据完整性实施方法,我们可以将其分为四类:实体完整性、域完整性、引用完整性及自定义完整性。
实体完整性:保证一行数据是有效的;
域完整性:保证一列的数据是有效的;
引用完整性:保证引用的编号是有效的;
用户自定义完整性:保证自定义规则,
数据完整性的实现:
非空约束not null;
主键约束primary key是应用于表的列的一个约束。主键的列不能为空值,也不能重复。主键默认值为非空;
主键约束被定义后,一个唯一索引自动被创建。主键约束包含了非空和唯一索引;
唯一约束unique是指给定列的所有的值必须是唯一的。通常直接写在某个列的后面;
指定默认值default;
使用自动编号列,在语句中添加auto_incrernent,都是用在数字列上面,非数字列不能用,默认值从1开始,每次加1。
使用foreing key约束连接的两个列必须是相同的或者至少是相似的数据类型。
在My SQL中必须要给有外键约束的设置表的类型为InnoDB。
不能删除一个被其他表引用的表。如果要删除首先必须去掉引用关系。
实体完整性保证表中的每一行都是不同的实体。域完整性保证输入到每一列的数据的完整性和准确性,引用完整性保证表间关系的正确性和完整性。
篇3:关系型数据库基础之:数据库设计(附加)
,
E-R模型:
E-R (Entity-Relationship)实体关系。
三大范式理论:
(1)行不重复(定义主键),某些情况下列不可再分;
(2)表中的所有主键列必须依赖于所有主键列(非主依主);
(3)非主键列之间必须相互独立(非主独立)。
第一范式必须遵守,二和三是可以违反的。
篇4:关系型数据库V.S.非关系型数据库
关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统,
但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。
相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库,
关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。
于是,非关系型数据库应运而生,由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要一种关系数据库这员老将。
篇5:数据查询SELECT语句数据库教程
数据库是为更方便有效地管理信息而存在的人们,希望数据库可以随时提供所需要的数据信息,
数据查询SELECT语句数据库教程
。因此,对用户来说,数据查询是数据库最重要的功能。本章将讲述数据查询的实现方法。
在数据库中,数据查询是通过SELECT 语句来完成的。SELECT 语句可以从数据库中按用户要求检索数据,并将查询结果以表格的形式返回。我们在“Transact-SQL 语言”章节及前面的章节中已经初步接触到了SELECT 语句的一些用法,在本章中将分类讲述其具体用法。
本节讲述SELECT 语句完整的锓结构U馐且桓龇浅H叱ぁ⒖菰锏墓程。读者? 以跳过本节,从第二节开始阅读,而将本节作为理解、编写查询语句的语法参考资料。 SELECT 语句完整的语法结构如下:
SELECT statement ::=
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [,...n] ]
[ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,...n]
[ BY expression [,...n] ] ]
[ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ] }
[ OPTION (
{
[UNION [ALL]
SELECT [ ALL | DISTINCT ]
[ {TOP integer | TOP integer PERCENT} [ WITH TIES] ]
[ INTO new_table ]
[ FROM {} [,...n] ]
[ WHERE
[ GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ] ]
[ HAVING
由于SELECT 语句特别复杂,上述结构还不能完全说明其用法,因此我们将它拆分为若干部分来讲述。
10.1.1 SELECT 子句
SELECT 子句指定需要通过查询返回的表的列,其语法如下:
SELECT [ ALL | DISTINCT ]
[ TOP n [PERCENT] [ WITH TIES] ]
{ *
| { table_name | view_name | table_alias }.*
| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [AS] column_alias ]
| column_alias = expression
} [,...n]
各参数说明如下:
ALL
指明查询结果中可以显示值相同的列。ALL 是系统默认的。
DISTINCT
指明查询结果中如果有值相同的列,则只显示其中的一列。对DISTINCT 选项来说, Null 值被认为是相同的值。
TOP n [PERCENT]
指定返回查询结果的前n 行数据。如果PERCENT 关键字指定的话,则返回查询结果的前百分之n 行数据。
WITH TIES
此选项只能在使用了ORDER BY 子句后才能使用当指定此项时,除了返回由TOP n (PERCENT) 指定的数据行外,还要返回与TOP n (PERCENT) 返回的最后一行记录中由ORDER BY 子句指定的列的列值相同的数据行。
select_list
select_list 是所要查询的表的列的集合,多个列之间用逗号分开。
* 通配符,返回所有对象的所有列。
table_name | view_name | table_alias.*
限制通配符*的作用范围。凡是带*的项,均返回其中所有的列。
column_name
指定返回的列名
expression
表达式可以为列名、常量、函数或它们的组合。
IDENTITYCOL
返回IDENTITY 列。如果FROM 子句中有多个表含有IDENTITY 列,则在IDENTTYCOL 选项前必须加上表名,如Table1.IDENTITYCOL。
ROWGUIDCOL
返回表的ROWGUIDCOL 列。同IDENTITYCOL 选项相同,当要指定多个ROWGUIDCOL 列时,选项前必须加上表名,如Table1. ROWGUIDCOL。
column_alias
在返回的查询结果中用此别名替代列的原名。column_alias 可用于ORDER BY 子句,但不能用于WHERE GROUP BY 或HAVING 子句如果查询是游标声明命令DECLARE CURSOR 的一部分,则column_alias 还不能用于FOR UPDATE 子句(有关游标的介绍请参见“游标和视图”章节)。
10.1.2 INTO 子句
INTO 子句用于把查询结果存放到一个新建的表中。SELECT...INTO 句式不能与COMPUTE 子句一起使用。其语法如下:
INTO new_table
参数new_table 指定了新建的表的名称。新表的列由SELECT 子句中指定的列构成,新表中的数据行是由WHERE 子句指定的。但如果SELECT 子句中指定了计算列,在新表中对应的列则不是计算列,而是一个实际存储在表中的列,其中的数据由执行SELECT...INTO 语句时计算得出。如果数据库的“Select into/bulk copy” 选项设置为“True/On”,则可以用INTO 子句创建表和临时表,反之,则只能创建临时表。
10.1.3 FROM 子句
FROM 子句指定需要进行数据查询的表。只要SELECT 子句中有要查询的列,就必须使用FROM 子句。其语法如下:
FROM {} [,...n]
::=
table_name [ [AS] table_alias ] [ WITH ( [,...n]) ]
| view_name [ [AS] table_alias ]
| rowset_function [ [AS] table_alias ]
| OPENXML
| derived_table [AS] table_alias [ (column_alias [,...n] ) ]
|
| CROSS JOIN
|
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[
JOIN
各参数说明如下:
table_source
指明SELECT 语句要用到的表、视图等数据源。
table_name [ [AS] table_alias ]
指明表名和表的别名。
view_name [ [AS] table_alias ]
指明视图名称和视图的别名。
rowset_function [ [AS] table_alias ]
指明行统计函数和统计列的名称。
OPENXML
提供一个XML 文档的行集合视图。
WITH ([,...n])
指定一个或多个表提示。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。关于表提示table_hint 的设,定请参见下一章的“删除数据”部分。
derived_table [AS] table_alias
指定一个子查询,从数据库中返回数据行。
column_alias
指明列的别名,用以替换查询结果中的列名。
joined_table
指定由连接查询生成的查询结果。有关连接与连接查询的介绍参见本章的相关章节。
join_type
指定连接查询操作的类型。
INNER
指定返回两个表中所有匹配的行。如果没有join_type 选项,此选项就为系统默认。
LEFT [OUTER]
返回连接查询左边的表中所有的相应记录,而右表中对应于左表无记录的部分,用NULL 值表示。
RIGHT [OUTER]
返回连接查询右边的表中所有的相应记录,而左表中对应于右表无记录的部分,用NULL 值表示。
FULL [OUTER]
返回连接的两个表中的所有记录。无对应记录的部分用NULL 值表示。
join_hint
指定一个连接提示或运算法则。如果指定了此选项,则INNER LEFT RIGHT 或FULL选项必须明确指定。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。
join_hint 的语法如下:
其中LOOP | HASH | MERGE 选项指定查询优化器中的连接是循环、散列或合并的。REMOTE 选项指定连接操作由右边的表完成。当左表的数据行少于右表,才能使用REMOTE 选项。当左表和右表都是本地表时,此选项不必使用。
JOIN
指明特定的表或视图将要被连接。
ON
指定连接的条件。
CROSS JOIN
返回两个表交叉查询的结果。10.1.4 WHERE 子句
WHERE 子句指定数据检索的条件,以限制返回的数据行。其语法如下:
WHERE
::=
column_name { *= | =* } column_name
各参数说明如下:
search_condition
通过由谓词构成的条件来限制返回的查询结果,
old_outer_join
指定一个外连接。此选项是不标准的,但使用方便。它用“*=” 操作符表示左连接,用“=*” 操作符表示右连接。此选项与在FROM 子句中指定外连接都是可行的方法,但二者只能择其一。
注意:如果在WHERE子句中指定一个值为FALSE的条件,则可以用SELECT...INTO语句来创建一个表名不同,但结构和数据类型均和原表相同的表。
10.1.5 GROUP BY 子句
GROUP BY 子句指定查询结果的分组条件。其语法如下;
GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ]
各参数说明如下:
ALL
返回所有可能的查询结果组合,即使此组合中没有任何满足WHERE 子句的数据。分组的统计列如果不满足查询条件,则将由NULL 值构成其数据。ALL 选项不能与CUBE或ROLLUP 选项同时使用。
GROUP BY ALL is not supported in queries that access remote tables.
group_by_expression
指明分组条件。group_by_expression 通常是一个列名,但不能是列的别名。数据类型为TEXT、NTEXT、IMAGE 或BIT 类型的列不能作为分组条件。
CUBE
除了返回由GROUP BY 子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一个条件列排序显示,再按第二个条件列排序显示以此类推。统计行包括了GROUPBY 子句指定的列的各种组合的数据统计。
ROLLUP
与CUBE 不同的是,此选项对GROUP BY 子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行。改变列的顺序会使返回的结果的行数发生变化。
使用Distinct选项的统计函数,如AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、和SUM(DISTINCT column_name)等,不能在使用CUBE或ROLLUP选项时使用。
10.1.6 HAVING 子句
HAVING 子句指定分组搜索条件。HAVING 子句通常与GROUP BY 子句一起使用。TEXT、NTEXT 和IMAGE 数据类型不能用于HAVING 子句。其语法如下:
HAVING
HAVING 子句与WHERE 子句很相似,其区别在于其作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
10.1.7 UNION 操作符
UNION 操作符将两个或两个以上的查询结果合并为一个结果集。它与使用连接查询合并两个表的列是不同的。使用UNION 操作符合并查询结果需要遵循两个基本规则:
列的数目和顺序在所有查询中必须是一致的;
数据类型必须兼容。
其语法如下:
UNION [ALL]
[UNION [ALL]
各参数说明如下:
指明查询的详细说明或查询表达式。
UNION
合并操作符。
ALL
合并所有数据行到结果中,包括值重复的数据行。如果不指定此选项,则重复的数据行只显示一行。
10.1.8 ORDER BY 子句
ORDER BY 子句指定查询结果的排序方式。其语法如下:
ORDER BY {order_by_expression [ ASC | DESC ] } [,...n]
各参数说明如下:
order_by_expression
指定排序的规则。order_by_expression 可以是表或视图的列的名称或别名。如果SELECT 语句中没有使用DISTINCT 选项或UNION 操作符。那么ORDER BY 子句中可以包含select list 中没有出现的列名。或别名ORDER BY 子句中也不能使用TEXT、NTEXT 和 IMAGE 数据类型。
ASC
指明查询结果按升序排列。这是系统默认值。
DESC
指明查询结果按降序排列。
注意:Null值被作为最小的值。
10.1.9 COMPUTE 子句
COMPUTE 子句在查询结果的末尾生成一个汇总数据行。其语法如下:
COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP |VAR | VARP | SUM }
(expression) } [,...n]
[ BY expression [,...n] ]
各参数说明如下:
AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM以上参数与对应的函数有相同的含义。这些函数均会忽略NULL 值,且DISTINCT选项不能在此使用。
expression
指定需要统计的列的名称。此列必须包含于SELECT 列表中,且不能用别名。COMPUTE子句中也不能使用TEXT、NTEXT 和IMAGE 数据类型。
BY expression
在查询结果中生成分类统计的行。如果使用此选,项则必须同时使用ORDER BY 子句。expression 是对应的ORDER BY 子句中的order_by_expression 的子集或全集。
注意:在SELECT子句中使用统计函数,会覆盖COMPUTE子句中的相应选项。在SELECTINTO语句中不能使用COMPUTE子句。
10.1.10 FOR BROWSE 子句
FOR BROWSE 子句用于读取另外的用户正在进行添加、删除或更新记录的表。其语法如下:
FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ]
}
各参数说明如下:
BROWSE
BROWSE 选项指明当查看在使用DB-Library 的客户机应用程序中的数据时,可以更新数据。
使用此子句时对所操作的表有一些限制:
表必须包含一个timestamp 类型的时间标识列;
表必须有一个惟一索引。
注意:
在SELECT语句中:FOR BROWSE子句必须是SELECT语句的最后子句;FOR BROWSE子句不能与UNION操作符同时使用;FOR BROWSE子句不能与表提示HOLDLOCK选项同时使用。
XML
XML 选项指明查询结果以XML 文档模式返回XML。 模式分为RAW、AUTO、EXPLICIT 三种。
RAW
将查询结果每一行转换为以一个普通标识符 AUTO 以简单嵌套的XML 树方式返回查询结果。 EXPLICIT 指定查询结果的XML 树的形式被明确定义的。 XMLDATA 返回概要信息。它是附加在文档上返回的。 ELEMENTS 指明列将以子元素的方式返回。 BINARY base 64 指定查询返回的以base64 格式编码的二进制数据。 10.1.11 OPTION 子句 OPTION 子句用于指定在整个查询过程中的查询提示(Query Hint)。通常,用户不必使用OPTION 子句,因为查询优化器会自动选择一个最佳的查询计划。OPTION 子句必须由最外层的主查询来指定。各查询提示之间应使用逗号隔开。其语法如下: OPTION ( { { HASH | ORDER } GROUP | { CONCAT | HASH | MERGE } UNION | { LOOP | MERGE | HASH } JOIN | FAST number_rows | FORCE ORDER | MAXDOP number | ROBUST PLAN | KEEP PLAN | KEEPFIXED PLAN | EXPAND VIEWS } 各参数说明如下: {HASH | ORDER} GROUP 指定在GROUP BY 或COMPUTE 子句中指定的查询使用散列法或排序法。所谓散列法是指为存储和检索数据项或数据,把搜索关键字转换为一个地址的一种方法。该方法常作为数据集内的记录的一种算法,可以使记录分组均匀,减少搜索时间。 {MERGE | HASH | CONCAT} UNION 指定所有的UNION 操作符采用合并(Merge)、散列(Hash) 或连接(Concatenate)的方法执行操作。如果指定了多个UNION 提示,查询优化器会挑选一个最佳的提示方案。 {LOOP | MERGE | HASH |} JOIN 指定查询过程中的所有连接操作采取循环连接(Loop Join)、合并连接(Merge Join)或散列连接(Hash Join) 的方法。如果指定了多个JOIN 提示,查询优化器会挑选一个最佳的提示方案。 FAST number_rows 指定查询优化只用于迅速返回前number_rows 行数据,在number_rows 行以后的数据采用原查询方法。 FORCE ORDER 指定在查询语法中说明的连接顺序在查询优化的过程中保持不变。 MAXDOP number 忽略由Sp_configure 设定的针对查询的最大并行线程数目。 ROBUST PLAN 强制查询优化器尝试使用最大行容量的计划。 KEEP PLAN 强制查询优化器放松重新编译查询的阈值。指定此选项可以让一个表被多次更新而不必频繁地重新编译查询。 KEEPFIXED PLAN 强制查询优化器不重新编译查询。这样只有当表的概要改变或执行Sp_recompile 存储过程时,才会重新编译查询。 EXPAND VIEWS 扩展索引化视图(当一个视图的名称在查询文本中被视图定义替换时称这个视图被扩展了),并且查询优化器不再将索引化视图作为查询的某部分的替代品。如果视图使用了WITH (NOEXPAND) 说明,则不能被扩展。注意:SELECT语句中各子句的排列次序是很重要的,子句必须依相应的次序来使用。 当用SELECT命令读取TEXT和IMAGE类型数据时,一次所能读取的数据受限于@@TE-XTSIZE全局变量的值。 可以用SET TEXTSIZE命令来更改它。@@TEXTSIZE的初始值为4K,最大为231-1(2,147,483,647)个字节。
篇6:关系型数据库管理系统 NoSQL
NoSQL是一种快速、便携的关系型数据库管理系统,除内存和处理器速度外不受任意限制,
关系型数据库管理系统 NoSQL
,
NoSQL符合关系模型。
项目主页:www.open-open.com/lib/view/home/1322721362577
篇7:关系型数据库管理系统 DBMaker
DBMaker 是一个功能强大的关系型数据库管理系统,支持结构化查询语言 (SQL),Microsoft 开放式的数据链路接口 (ODBC),以及嵌C式的结构化查询语言 (ESQL/C),由于 DBMaker 完全遵循开放式架构,以ODBC 为基本程序接口,所以您可以轻松地利用市面上 ODBC 兼容应用软件来查询 DBMaker 数据库的内容和开发应用程序。
DBMaker 是一套优越的商用数据库管理系统,不仅功能完备、先进,而且操作简单、使用方便,DBMaker可以很容易地从个人计算机上的单用户数据库升级到分布式商 用数据库系统 ;不论您使用的是单一用户数据库还是商用数据库,DBMaker 都能提供给您最先进的安全性、完整性和可靠性管理。
DBMaker 的跨平台支持特性
保障硬件升级时,可以平滑过度,是您投资在 RDBMS 上节省时间、人力和金钱的最佳选择。
DBMaker 同时也提供了优异的多媒体处理能力,可以让您存取、查询和操作各种多媒体数据。利用 DBMaker 所提供的二进制大型对象 (BLOB, Binary large object) 数据类别,可以让您的多媒体数据完全享有 DBMaker 先进的安全性管理和溃损恢复 (Crash/Recovery) 功能;而利用文件对象 (File Object) 数据类别, 也可以让您的 DBMaker 数据库有能力管理外部文件。
产品特色:
标准
DBMaker 完全符合 ANSI/SQL 99 标准, 支持ODBC 程序接口、多人使用模式、数据一致性管理、安全管理、事务管理、在线备份、溃损恢复等数据库管理系统所具备的基本功能。
经济
DBMaker 提供了最经济的开发方式, 搭配的软硬件成本很低,
一般开发主从架构的应用系统, 要先将前后端软硬件架设完成, 才能进行开发, 如果使用DBMaker , 您只需在最简单的开发环境下, 比如 PC 上跑 Windows 95, 就可以开始开发工作, 初期投入并不是很大。
开放
DBMaker 的程序接口依据 ODBC 3.0 标准, 可以连接许多开发工具, 包括 Visual BASIC, Visual C++, Borland C++,Access, FoxPro, Visual FoxPro, PowerBuilder, Delphi等; 和其他的数据库管理系统一样, DBMaker很容易作数据移植, 它完全采用开放式架构, 从而提高了应用系统的存活率。
高速
DBMaker 的执行速度很快, 因为设计DBMaker时, 就已经把中文、多媒体及ODBC考虑在内, 通过 DBMaker的 ODBC 程序接口, 直接进入数据库的核心, 在过程中无需作多余的转换, 所以速度很快。
多媒体
DBMaker 是新一代的数据库管理系统, 因此很多特性直接设计在数据库引擎中, 包括多媒体管理、对象管理、中文处理等,所以在处理新类型的数据时,DBMaker有它的独到之处。
轻松
DBMaker 安装轻松, 管理容易, 不管在 Windows 还是UNIX环境下, DBMaker都提供了会话式的安装方式, 方便用户安装, 同时, DBMaker 提供了多种图形化的管理工具, 即使在不同的操作系统下, 也具备相同的操作方式, 所以您只需学会一套, 就可以在各种操作系统上使用。
项目主页:www.open-open.com/lib/view/home/1323579922765
篇8:利用工具进行数据库数据的复杂查询
利用工具进行数据库数据的复杂查询
利用工具进行数据库数据的复杂查询天津钢管公司 王保安摘要: 数据库应用系统中数据的复杂查询问题,长期困扰着使用者和开发者。本文通过具体问题,论述了实现复杂查询的方法,同时论证了各种方法的特点及适用范围。?
关键词:查询 动态 数据窗口
当今数据库技术已成为计算机应用的核心技术,可以认为当今任何计算机信息系统和计算机应用系统都与数据库的应用分不开,数据库已成为其核心和基础。建立数据库应用系统是要充分利用数据库中的数据。对数据库中的数据进行的操作除增加(Insert)、更改(update)和删除(delete)外,最常用,也是重要的是查询操作。即便是最简单的数据库应用系统,也离不开查询功能,查询可以说是进行数据管理的重要手段,不过也是数据库应用系统开发过程中较困难、花时间、有一定难度的部分。?
1. 问题的描述
某单位根据上级部门的要求建立人员信息管理应用系统,它是人事管理信息系统(Personnel Management Information System)的子系统。人员信息管理系统是对人员所有信息的全面管理,包括:基本信息、培训或进修信息、履历信息、工资变动信息、离退信息、家庭成员及社会关系信息等等。根据中共中央组织部颁布的全国组织、干部、人事管理信息系统信息结构体系的要求,对人员的信息描述共有43个信息集(对应43张表),426个数据项,本文根据数据库设计的要求进行加工,只列出3张表(table)。
1)表名:基本信息 编码:personnel?
主码 字段编码 数据类型 长度 字段名称
personnel_id char 9 人员代码
name varchar 20 姓名
?sex char? 1 性别
?birthday datetime 出生日期
?native_place char 6 籍贯
?nationality char ? 2 民族
marriage char 1 婚姻状况
? workday datetime 参加工作时间
? party char 2 政治面貌
? graduaton char 2 学历
? department char 30 所在单位?
? identification char 15 身份证号
? cul_field char 6 培训专业
(2)表名:工资变动信息 编码:wages?
主码 外码 字段编码 数据类型 长度 字段名称
* * personnel_id char 9 人员代码
sa_id char 3 人员内码?
change_day datetime 工资变动日期
sa_file_num char 3 工资变动文件
salary money ? ???工资?
3)表名:离退信息 编码:retirement
主码 外码 字段编码 数据类型 长度 字段名称
* * personnel_id char 9 人员代码
ret_day datetime 离退日期
rel_style char 2 离退类别?
pay money 离退休费
comment text 离退说明
在应用中为保证数据的规范化,需充分利用国际代码和组标代码,这样做也可以节省存储空间。将这些代码表建成数据库中的静态表,包括:性别(GB2261)、籍贯(ZB01)、民族(GB3304)、婚姻状况(GB4766)、政治面貌(GB4762)、学历(GB4658)、工资变动文件(ZB52)和离退状态(GB12405)。它们的结构基本相同,每个表中都有两个字段,分别存储代码及内容。以性别为例:?
表名:性别 编码:GB2261?
字段编码 数据类型 长度 字段名称
-------------------------------
code char 2 代码
comment char 4 内容
表中数据:?
code comment?
----------------
男性
女性?
这些代码表一旦建立,表中数据对应用来讲是相对不变的,所以称为静态表。在需要的时候,静态表的数据可以修改,一般放在维护中进行。?
当这些静态表建成后,可得到完善的人员信息管理系统的数据模型,如图1所示。(略)?
2.使用SQL语句
SQL(Structured Query Language)语言是1974年由Boyce和Chamberlin提出的,并在IBM公司San Jose Research Laboratory研制的System R上实现了这种语言。由于它功能丰富,语言简洁,使用方式灵活而倍受青睐,并扎根于计算机工业界及计算机用户。
SQL是集数据操纵(Data Manipulation)、数据定义(Data Definition)与数据
控制(Data Control)为一体的关系数据语言。查询是数据操纵语言中最主要的部分。从SQL的英文名称:结构化的查询语言,即能看出SQL在查询中的贡献,可以说数据库查询语句是SQL语言的核心。
? SQL查询语句只使用命令动词,SELECT?
一般格式: SELECT〈目标列〉?
FROM〈基本表(或视图)〉?
[WHERE〈条件表达式〉]?
[GROUP BY〈列名1〉[HAVING〈内部函数表达式〉]]?
[ORDER BY〈列名2〉ASC|DESC]
格式说明:〈〉中的内容为根据需要的具体内容;中的内容为可选项。
语句含义:根据WHERE子句中的条件表达式,从基本表(或视图)中找出满足条件的元组,按SELECT子句中的目标列,选出元组中的分量形成表。GROUP子句将结果按列名1分组,每个组产生结果表中的一个元组;ORDER子句使结果表按列名2升序或降序排列。? 这是最基本的方法,只要能够对库操作,就可以实施所需要的查询。例如:想了解所有离退休人员的基本情况及他们的离退休费,可以键入如下语句:?
SELECT DISTINCT retirement.personnel_id,name,sex,
birthday,workday,retirement.pay
FROM personnel,retirement
WHERE personnel.per
sonnel_id=retirement.personnel_id?
执行后得到下列列表,显示所需信息:?
personnel_id name sex birthday workday pay
-------------------------------------------
1 林立兰? 1 1919/03/21 1994/05/06 1,187.00
13 安 静? 2 1935/05/04 1954/11/13 457.30
2 付石龙 1 ?1928/03/21 1935/05/06 947.00
5 魏 芳? 2 1917/05/21 1933/05/21 937.00
8 李 四? 1 1939/05/31 1960/07/13? 1,128.80
9 王丽立 1 1917/05/21 1933/05/21 745.00
但这种方法要求操作者对数据库的结构有充分的了解,例此数据库有多少个表,有多少个数据项,这些数据项分别属于哪一个表等。显然,这是数据库管理员的工作范畴。对用户,即使了解SQL语法,也只能完成简单的查询,对复杂的查询工作简直是望尘莫及了。也就是说单单是SQL语句,并不能很好地完成数据库的复杂查询,必须要与其他技术配合使用。另外,使用SQL语句进行查询,只能直接反映每一列的信息,而我们的43张基本表是尽可能地保存代码以保证数据的规范且节约存储空间。也就是说,我们能得到准确的查询结果,但得到地却是整篇的代码(例上表中的sex列),这对开发者和使用者都难以接受。如果能够将整篇的代码自动转换成所表达的文字,那当然是再好不过了。?
3. 借助PowerBuilder实现综合信息的查询?
目前,随着工具软件的.发展和广泛采用,使数据库应用系统的开发如虎添翼,其中PowerBuilder以其独特的数据窗口(DataWindow)倍受欢迎。?
PowerBuider是美国著名的数据库应用开发工具生产厂家Powersoft公司于1991年6月推出的功能强大、性能优异的开发工具,它是一种面向对象的、具有可视图形界面的、快速的交互开发工具。智能化的数据窗口对象是其精华所在。利用此对象可以操作关系数据库的数据而无需写入SQL语句,即可以直接检索、更新和用多种形式表现数据源中的数据。但要注意,必须使数据窗口成为窗口(Window)下数据窗口控制的一个连接对象,数据窗口才能使用户在应用执行期间访问数据库中的数据。?
利用PowerBuilder提供的内部查询机制,我们即可以让数据窗口作为查询条件的输入,又可以让该数据窗口作为查询结果的输出,这样就可以使数据窗口中的所有数据项进行自由组合的查询。例如:在窗口W_que上建立两个数据窗口控制dw_1和dw_2,分别连接两个数据窗口对象dw_que1与dw_que2,其中dw_1用于输入查询条件,而dw_2用于显示满足查询条件的所有元组。事实上条件的输入及元组的显示完全可以在一个数据窗口中实现,考虑到这两种操作的差别(例:条件输入可编辑,而元组显示不可编辑;条件输入可为某一范围,而元组显示仅为满足条件的所有纪录……)将其用两个数据窗口控制来实现。这就要求dw_2与dw_1数据共享,即要求dw_que1与dw_que2两数据窗口的数据源完全相同,如图2所示。(略)?
用这种方法实现查询优点突出,例:通过设置数据窗口中对应列的编辑风格(
Edit Styles)为相应的下拉式数据窗口(DropDownDataWindow),使显示的元组文字化。注意,这要事先建好下拉式数据窗口。设置数据窗口中对应列的编辑风格同样可满足其它显示需要。利用数据窗口的风格特点:查询表的列宽、列序可自由改变,甚至可以覆盖掉一些列,以达到更满足查询显示的需要。?
综合查询的信息来自多个表,改变数据窗口的数据源,采用多表连接的数据源即可实现。但是如我们问题的描述,如果我们需要的查询项随机地来自这43张表中的数据项,显示项也是随机地。这种任意条件的组合,可选输出项的显示称为动态查询(Dynamic Query)依然采用上述方法,数据窗口dw_que1与dw_que2的数据源将是这43张表的连接,先不说效率问题,单从这426个项中输入查询条件,又显示这426个项,就使人敬而远之。因为,在每一次查询前,都不了解此次查询的要求是什么,这样,每张表中的每一个数据项都缺一不可;另一方面,每一次的查询,一旦查询条件确定、显示条目也确定后,我们会发现,每一次有意义的查询并不是需要全部的43张表,换言之,每一次查询没有必要将43张表全部连结,而应只连接那些被选中数据项所在的表,即数据源是动态产生的。由于数据源不确定,数据窗口就无法设计,动态查询无法用这种方法实现。?
4. 动态查询的实现?
在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。?
动态地创建一个数据窗口,应用程序需要执行下列任务:?
・动态地构造SQL语句。?
・用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。具体实现如下:?
1)动态地生成SQL语句,根据SQL的语法:SELECT stringa?
FROM stringb
WHERE stringc?
也就是动态地生成 stringa, stringb, stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,...,columnr”,则动态地生成stringa;同样由用户输入查询条件,包括相应的列、满足的条件或范围、逻辑关系等,将这些条件拚成一个串,即为stringc,显然,所有的列名都确定了,他们所在的表名也确定了,按照stringb的语法规则即可构造。?
注意:上面的stringc由两部分(表间关系stringc1及查询条件stringc2)组成;表名串stringb与表间关系stringc1、查询条件stringc2及显示条目stringa均有关。?
在实现的过程中:为贴近实际应用,习惯上,先输入查询条件,再输入显示条目。即在输入查询条件后,生成strinc2,stringb,stringc1;然后,再在输入显示条目后生成stringa,并修改stringc1,stringb。最后形成SQL语法:?
str=“select”+stringa+“f
rom”+stringb+“where”+stringcl+stringc2?
2)在现在的事物对象里利用相关的SyntaxFromSQL函数生成符合数据窗口语法的字符串:
? exp=syntaxfromsq1(sq1ca,str,strsty,error)生成数据窗口的源代码?
其中:strsty为数据窗口的显示风格,例:?
strsty=“style(type=grid)datawindow(units=lcolor=12632256)text(font.face='system')”?
3) 创建数据窗口对象?
dw_que.create(exp)?
这样就实现了用户要求的随机查询。?
在真实系统中,用户在输入查询条件时希望通过选项方式录入查询信息,由于库表中存放的大量信息为代码,这就需要在程序中先把录入的文字信息转化成相应的代码再连接到查询条件中。为简化输入,提高准确性,可采用代码输入,即动态地嵌套下拉式数据窗口。在显示查询结果的数据窗口中,事先不能嵌套下拉式数据窗口,可预先做一个函数,在程序运行中根据所选的列把代码转化成所对应的汉字显示,这样更完善了用户要求的随机查询。?
根据数据窗口的动态特性,对于那些运行时才能确定的数据窗口采用动态方式创建,使应用程序能更灵活地满足用户的需求。?
5. 小结?
使用SQL语句是查询操作的基础,但如何根据查询的要求自动的构造最贴切的SQL语句是问题的关键。利用PowerBuilder中的数据窗口使问题简化,如何通过嵌入动态生成的SQL语句动态地生成数据窗口是解决问题的根本。将查询条件的输入实现多级菜单选择将查询结果文字化,使复杂查询问题解决得更完善。动态查询的方法,不仅能应用于人事管理信息系统,同时也是解决其他需要复杂查询的数据库应用系统的途径。这种动态查询方法的在数据库应用系统的使用,避免了应用系统开发中开发者冥思苦想所有可能的查询条件,而系统运行中用户总遇到有些查询要求无法满足的矛盾。动态查询的实现,缩短了开发周期,减少了产品维护的工作。
篇9:关于开发新一代大数据分布式关系数据库的倡议
关于开发新一代大数据分布式关系数据库的倡议
李万鸿
当今时代已进入大数据时代,而nosql数据库对sql和事物的支持不给力,因此,开发新一代大数据分布式关系数据库迫在眉睫,这是一个新的历史机遇,笔者建议全国的it人士组织起来从事这一伟大的工程,
开源精神推动了软件的发展,我们应该发扬开源精神,大家群策群力一起动手搞架构,写代码,把这个数据库搞起来。建议这个工程命名为gospelLight----真理之光,表达对真理的追求和奉献。这是一个国际化的时代,我们欢迎外国的工程师加入这一工程,大家齐心协力把新一代数据库设计出来,共享共担!建议用java开发,把项目放在github上,全世界的工程师都可以加入开发,做出贡献,
设计这一数据库要综合运用it所有技术的成果,继承关系数据库、nosal、分布式、容错、复制、并行、key-value、timestamp、事物管理、cap、内存计算以及系统工程等多种技术,以及借鉴spanner、oracle等现有系统,开发支持大数据的分布式关系数据库,直接可以用在现有业务系统上,无缝升级到大数据时代。
总之,这是一个激动人心的天才创意,希望得到大家的支持,红红火火地搞起来,相信一定会取得伟大的成功!
2014-11-12
文档为doc格式