欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

什么是数据仓库数据库教程

时间:2022-05-24 08:43:25 其他范文 收藏本文 下载本文

【导语】下面小编为大家带来什么是数据仓库数据库教程(共6篇),希望大家能够受用!

什么是数据仓库数据库教程

篇1:什么是数据仓库数据库教程

数据

目前,数据仓库一词尚没有一个统一的定义,著名的数据仓库专家W.H.Inmon在其著作《Building the Data Warehouse》一书中给予如下描述:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策,

什么是数据仓库数据库教程

。对于数据仓库的概念我们可以从两个层次予以理解,首先,数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。

根据数据仓库概念的含义,数据仓库拥有以下四个特点:

1、面向主题。操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织。主题是一个抽象的概念,是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。

2、集成的。面向事务处理的操作型数据库通常与某些特定的应用相关,数据库之间相互独立,并且往往是异构的。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

3、相对稳定的。操作型数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

4、反映历史变化。操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测,

企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础。数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。因此,从产业界的角度看,数据仓库建设是一个工程,是一个过程。

整个数据仓库系统是一个包含四个层次的体系结构,具体由下图表示。

数据仓库系统体系结构

·数据源:是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据。外部信息包括各类法律法规、市场信息和竞争对手的信息等等;

·数据的存储与管理:是整个数据仓库系统的核心。数据仓库的真正关键是数据的存储和管理。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。要决定采用什么产品和技术来建立数据仓库的核心,则需要从数据仓库的技术特点着手分析。针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。

·OLAP服务器:对分析需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:ROLAP、MOLAP和HOLAP。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。

·前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。其中数据分析工具主要针对OLAP服务器,报表工具、数据挖掘工具主要针对数据仓库。

篇2:怎样去宣传数据仓库?数据库教程

数据

主 题:怎样去宣传数据仓库?

作 者:hem

所属论坛:数据仓库

问题点数:300

回复次数:1

人气指数:6

发表时间:-9-13 16:38:32

数据仓库是 面向主题的、集成的、随时间变化的非易失的数据集合,用于支持管理层的决

策分析,

数据仓库对历史的数据做分析,以得出所分析主题的发展趋势,来支持决策层的决策分析。用于联机分析处理。

数据库 普通关系型数据库 大多用于联机事务处理,处理当前的事务、交易。

集成的例子:

就拿一家百货公司来说, 公司有好多的分公司,每个分公司有自己的日常交易纪录数据。

有真实的详细的交易历史纪录、也有月度、年度归总数据。总公司需要了解公司的运营状

况,以决定以后如何拓展业务,了解客户购物趋势,推广新产品等系列决策。试想想,如果

每个子公司将所有的历史数据都送到总公司,请问,总公司需要多少磁盘、多少资源来存储

这些数据? 总公司要这些数据干什么?总公司不需要这些详细的数据,如果子公司根据一

定的周期归总之后在送到总公司,这样一来,数据量小了,有利于分析了,

但是,这么多子

公司里面,每个公司的数据结构定义可能不相同。需要统一数据定义。

送到总公司来的数据是比较全面的。这样一来,公司可以对用户购物趋势、购物能力等主题

做一个比较全面的分析,以发掘客户、扩大公司规模。

面向主题:

通讯公司可能只是纪录用户的应收款、预付款、通话纪录、费率。如果建立一个客户主题区

域,用来纪录用户所购买的服务、用户所在地域。这个主题区域可以帮助通讯公司预测客户

增长率、客户的地域分布、客户购买服务的倾向以增加新的服务,在那些区域出售什么通讯

产品等等的决策。

随时间变化:

上面两个例子都提到这个。百货公司的记账系统、通讯公司的记账系统都是随时间变化的最

好的例子,记账系统定期归总数据,然后将归总数据不断加到数据仓库里面来,这样数据仓

库也就是随时间变化的。

非易失性的:

一般的,追加到数据仓库里面的数据是不允许更改的,它不同于联机事务处理系统,允许修改数据库纪录。这样数据仓库的数据一般不会丢失。

数据仓库有几个要点:

集成 (抽取、转换、装载) ETL

元数据 (描述数据的数据) MetaData

主题 星型结构

数据仓库中 数据的查询是最重要的。 视图、索引是提高查询的选择。

代码库是统一、集成的前提。

篇3:Informix数据仓库解决方案数据库

根据Informix数据仓库系统实施方法学,我们可以将数据仓库的实施分为以下几个步骤: 1.业务需求分析 业务需求分析是数据仓库建设的基础,应该同用户进行充分沟通,了解用户的真实需求,避免理解的误差,同时,应该界定好项目 开发 范围, 在此阶段,主要工作

根据Informix数据仓库系统实施方法学,我们可以将数据仓库的实施分为以下几个步骤:

1.业务需求分析

业务需求分析是数据仓库建设的基础,应该同用户进行充分沟通,了解用户的真实需求,避免理解的误差,同时,应该界定好项目开发范围。

在此阶段,主要工作包括:

(1)设定可以达到的目标并明确所有需求

(2)确定系统体系结构

从实施的角度来看,设计数据仓库系统体系结构有多种方式:

构造部门级的数据集市DataMart

直接构造企业级的数据仓库DataWarehouse系统

先建立部门级数据集市,然后发展成企业级数据仓库系统

(3)确定数据源

列出向数据仓库提供数据的数据源清单。源数据的复杂性、规模、完整性对建立数据仓库的影响比其它因素要大。要格外注意哪些数据源的数据类型、粒度和内容是兼容的。

(4)容量规划

除了体系结构之外,硬件和软件资源对数据仓库也至关重要。作为需求定义的一部分,估计数据仓库将要存储的数据量以及将对数据进行的处理很重要。

(5)技术评价

在选择软件和硬件平台时,最好听取专家的建议,尤其是对与您相似的环境有经验的专家。InformixDecisionFrontier数据仓库实现套件,为用户提供了快速、集成、完整的数据仓库实现工具。

2.逻辑模型设计

逻辑模型设计主要是指数据仓库数据的逻辑表现形式。从最终应用的功能和性能的角度来看,数据仓库的数据模型也许是整个项目最重要的方面。为数据仓库和数据集市定义数据模型是一项复杂的工作,需要领域专家的参与。

3.物理模型设计

在进行物理模型设计时,主要是将数据仓库的逻辑模型转换为在数据库中的物理表结构。在物理模型设计时,可以采用ERWin等辅助设计工具。

Informix采用ROLAP方式,数据仓库数据的存储主要采用InformixIDS(InformixDynamicServer)数据库,

InformixIDS数据库是业界领先的数据库引擎,它具有并发性、可伸缩性、多进程/多线索等特性,是Informix数据仓库应用的核心。

4.数据抽取、清洗、集成、装载等

数据抽取是数据仓库建立中的一个非常重要的步骤。它负责将分布在用户业务系统中的数据进行抽取、清洗、集成。

(1)定义数据载入和维护策略

(2)数据抽取/清洗/转换/装载

Informix提供了一系列工具访问存储在异构数据库中的业务系统数据。Informix还提供了数据复制产品,这样,系统会通过同步或异步方式自动将符合规则的数据定时进行传递,保证数据的完整性、一致性。

用户利用Informix的InfoMover可以轻松定义数据抽取、清洗、集成、装载过程,并可以对该过程进行定期调度,减轻数据增量装载的复杂度。同时,Informix数据装载策略支持第三方厂家丰富的工具,如Prism、Carleton、ETI等。

5.数据仓库的管理

数据仓库元数据的管理也是极为重要的环节。Informix的MetacubeWarehouseManager提供GUI,用户只须使用鼠标托拽方式即可对元数据进行管理。

6.数据的分析、报表、查询等数据的表现

用户分析、报表、查询工具是用户进行分析决策使用的工具。因此,其所有操作要非常简单,但提供的功能却要十分强大。Informix相应地提供了一套完善的工具。

此外,数据挖掘技术也是数据仓库系统中一个重要部分。Informix提供RedBrickDataMine以及第三方厂商产品,支持数据挖掘应用。

7.数据仓库性能优化及发布

数据仓库性能的好坏直接影响系统查询、分析响应速度。Informix提供MetaCube等工具支持汇总查询、抽样查询和后台查询,以提高数据仓库查询效率。

总之,Informix为用户数据仓库应用提供了一个快速、完整的解决方案。采用Informix数据仓库解决方案可以使您的数据仓库系统具有高性能、高可扩展性,高开放性,可以自己进行定制等特性,同时,Informix还提供专业数据仓库咨询服务,这将充分保证您的数据仓库系统建设快速、及时,保证它能真正发挥作用。

原文转自:www.ltesting.net

篇4:浅谈DataSet数据库教程

DataSet是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的, 而且一旦移到下一行,就不能查看上一行的数据,DataSet则可以自由移动指针,DataSet的数据是与数据库断开的。DataSet还可用于多层应用程序中,如果应用程序运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程序。

DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作,而DataTable中又包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,而需将操作结果返回给数据库的话,则可以调用DataAdapter的Update方法。

DataSet的操作:

DataSet ds=new DataSet;

DataTable dt=new DataTable(“newTable”);

ds.Tables.Add(dt);DataSet ds=new DataSet();

DataTable dt=ds.Tables.Add(“newTable”);

上述两种方法都可以在DataSet中添加一个DataTable,看需要而进行选择。添加DataTable后,需向其中添加行和列。

DataSet ds=new DataSet();

DataTable dt=ds.Tables.Add(“newTables”);

DataColumn col=dt.Columns.Add(“newColumn”,typeof(int));

col.AllowDBNull=false;

col.MaxLength=4;

col.Unique=true;

上述代码向DataSet中的DataTable中添加名为”newColumn”,类型为int且不为空,最大长度为4和唯一性为真的列。

dt.PrimaryKey=new DataColumn[]{dt.Columns[“ID”]}

这段代码是继续上面代码的,为一个DataTable中添加一个主键列,主键列是一个数据组,如有多个主键,只需在数组中添加一个列即可。如下:

dt.PrimaryKey=new DataColumns[]{dt.Columns[“OrderID”],dt.Columns[“ProductID”]}

添加外键:

ForeignKeyConstraint fk;

fk=new ForeignKeyConstraint(ds.Tables[“Customers”].Columns[“CustomerID”],ds.Tables[“Orders”].Columns[“CustomerID”]);

ds.Tables[“Orders”].Constraints.Add(fk);

//上述代码假如已经为Cusomers表和Orders创建了主键,此句为添加外键约束,

上述是根据Customers表和Orders表的CustomerID来创建约束。

下面介绍修改DataRow中的内容:

DataRow dr=ds.Tables[“Customer”].Rows.Find(“ANTON”);

if(dr==null)

else

{

dr.BeginEdit();

dr[“CompanyName”]=“newValue”;

dr[“ContactName”]=“newValue2”;

dr.EndEdit();

}

//上面代码通过Row集合的Find方法来在DataTable中的行进行定位,找到“ANTON”行,再修改“ANTON”行中CompanyName列和ContactName列的值。通过BeginEdit和EndEdit来缓存对行的修改,还可调用 CancelEdit为取消修改。

判断某列是否为空值:

DataRow dr=ds.Tables[“Customers”].Rows.Find(“aaa”);

if(dr.IsNull(“ContactName”);

..

else

dr[“ContactName”]=DBNull.Value

//这里判断ContactName列是否为空,如果不是则为其赋空值,呵,很无厘头的做法,这里只为演示为列赋空值的做法。

删除DataRow:

有两种方法可以删除DataRow,Delete方法和Remove方法和RemoveAt方法。其区别是Delete方法实际上不是从DataTable中删除掉一行,而是将其标志为删除,仅仅是做个记号,而Remove方法则是真正的从DataRow中删除一行,RemoveAt方法是根本行的索引来删除。列:

DataRow dr=ds.Tables[“table”].Rows.Find(“a”);

ds.Tables[“table”].Remove(dr);

ds.Tables[“table”].Remove(index);

//dr 为“a”所在的行,查出后将其删除,index为 “a”所在的索引号。关于DataSet中的其用法,参照MSDN

篇5:ChangeAllObjectOwner数据库教程

object

EXEC ChangeAllObjOwner @oldowner = 'John', @newowner = 'Alex'

/*

Version: SQL Server 7.0/

Created by: Alexander Chigrik

www.MSSQLCity.com/ - all about MS SQL

(SQL Server Articles, FAQ, Scripts, Tips and Test Exams).

This stored procedure can be used to run through all of a specific

database's objects owned by the 'oldowner' and change the old

owner with the new one.

You should pass the old owner name and the new owner name,

as in the example below:

EXEC ChangeAllObjOwner @oldowner = 'John', @newowner = 'Alex'

*/

IF OBJECT_ID('ChangeAllObjOwner') IS NOT NULL //line continous

DROP PROC ChangeAllObjOwner

GO

CREATE PROCEDURE ChangeAllObjOwner (

@oldowner sysname,

@newowner sysname

)

AS

DECLARE @objname sysname

SET NOCOUNT ON

--check that the @oldowner exists in the database

IF USER_ID(@oldowner) IS NULL

BEGIN

RAISERROR ('The @oldowner passed does not exist in the database',

16, 1)

RETURN

END

--check that the @newowner exists in the database

IF USER_ID(@newowner) IS NULL

BEGIN

RAISERROR ('The @newowner passed does not exist in the database',

16, 1)

RETURN

END

DECLARE owner_cursor CURSOR FOR

SELECT name FROM sysobjects WHERE uid = USER_ID(@oldowner)

OPEN owner_cursor

FETCH NEXT FROM owner_cursor INTO @objname

WHILE (@@fetch_status -1)

BEGIN

SET @objname = @oldowner + '.' + @objname

EXEC sp_changeobjectowner @objname, @newowner

FETCH NEXT FROM owner_cursor INTO @objname

END

CLOSE owner_cursor

DEALLOCATE owner_cursor

GO

篇6:sql数据库教程

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete,

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句―SQL的核心功能―来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句―数据操作语言(DML)语句进行处理。

SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型

数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在

一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带

来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行

查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于

将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table

[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一

个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比

较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用

的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)

和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹

配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的

数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的

数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑

运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接

连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info

FROM pub_info AS p1 INNER JOIN pub_info AS p2

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)内连接

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分

三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接

表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些

运算符包括>、>=、<=、<、!>、!<和>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询

结果集合中所包括的列,并删除连接表中的重复列。

例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

SELECT a.*,p.pub_id,p.pub_name,p.country

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

(二)外连接

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件

的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外

连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b

ON a.username=b.username

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*

FROM city as a FULL OUTER JOIN user as b

ON a.username=b.username

(三)交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数

据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等

于6*8=48行。

SELECT type,pub_name

FROM titles CROSS JOIN publishers

ORDER BY type

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联

合查询。UNION的语法格式为:

select_statement

UNION [ALL] selectstatement

[UNION [ALL] selectstatement][…n]

其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一

行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语

句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选

择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类

型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000);

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,200000);

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000);

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL);

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号),

NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis');

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column { ,column})]

VALUES

(columnvalue [{,columnvalue}]);

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算―“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables;

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES;

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES;

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES;

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [{, columns}])| *

FROM table [ {, table}]

[ORDER BY column [ASC] | DESC

[ {, column [ASC] | DESC }]];

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates];

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY > 50000;

这一查询将返回年薪高于$50,000.00的职员(参见表7)。

逻辑连接符

有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';

在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';

有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:

SELECT * FROM EMPLOYEES

WHERE NOT(BRANCH_OFFICE = 'Boston');

关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。

断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:

SELECT * FROM EMPLOYEES

WHERE (LAST_NAME = 'Jones'

AND FIRST_NAME = 'Indiana')

OR (LAST_NAME = 'Smith'

AND FIRST_NAME = 'Bessie');

SQL沿用数学上标准的表达式求值的约定―圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。

怎样去宣传数据仓库?数据库教程

自定义链接后端数据库数据库教程

Building a TSQL Loop数据库教程

oracle里的常用命令数据库教程

Oracle 9i的数据类型数据库教程

查找bad sql的方法数据库教程

日期时间转换为日期的SQL语句数据库教程

更新字符串列表中,指定位置的字符串数据库教程

linux中清空Mysql数据库ROOT密码教程linux操作系统

索引对查询条件顺序的影响数据库教程

《什么是数据仓库数据库教程(共6篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档