一、什么是索引?
索引就像是书的目录,是与表或者视图关联磁盘上的结构,可以加快从表中或者视图中检索行的速度。素银中包含表或者视图中的一行或者多列生成的键。这些键存储在一个结构(BTree)中,使SQL可以快速有效的查找与键值关联的行。
二、有什么用?即索引的优点
建立索引的行可以保证行的唯一性,生成唯一的word
建立索引可以有效的缩短数据的检索时间
建立索引可以加快表与表之间的 连接
为用来排序或者是分组的字段添加索引可以加快和排序顺序
无索引,直接去读表数据存放的磁盘快,督导数据缓冲区中再去查找需要的数据
有索引,先读入索引表,通过索引表直接去找到需要数据的物理地址,并把数据读入数据缓冲区中。
三、索引的原理
通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。
(一)数据内容
基础数据库包括系统运行前所采集到的所有支撑数据,数据的具体内容在数据分类与数据源章节中已描述,概括可分为以下几类。
(1)遥感影像数据:包括历史图像数据,以及按照一定监测周期更新的遥感图像数据。
(2)数字线划图数据:矢量数据(现状专题图和历史专题图数据)、栅格数据、元数据等。入库前数据以ArcInfoCoverage格式分幅或整体存储,采用地理坐标系统。
(3)数字栅格图数据:包括1∶5万和1∶10万基础地理图形数据的扫描栅格数据。
(4)数字高程模型数据:塔里木河干流河道1∶1万和“四源一干”区域1∶10万数字高程模型。
(5)多媒体数据:考察照片、录像、录音和虚拟演示成果等多媒体资料。
(6)属性数据:社会经济与水资源数据、水利工程数据、生态环境数据等。
(二)数据存储结构
1栅格数据
栅格数据包括遥感影像、数字栅格图、数字正射影像图、数字高程模型等,这些数据的存储结构基本类似,因此可进行统一设计。遥感图像数据库与普通的图像数据库在存储上有些差别,遥感图像作为传感器对地理、空间环境在不同条件下的测量结果(如光谱辐射特性、微波辐射特性),必须结合同时得到的几个图像才可以认为是对环境在一定的时间条件下的完整的描述,也即是说,可能需要一个图像集合才能构成一个图像的完整的概念,并使之与语义信息产生联系(罗睿等,2000)。因此,遥感图像数据存储结构模型必须能够描述几个图像(波段)之间的逻辑关系。利用ArcSDE进行数据入库时,系统可自动建立各图像(波段)之间的关系,并按一定规则存储在数据库系统中。
对栅格数据在后台将采用Oracle数据库管理系统进行存储。Oracle系统可直接存储影像信息,并具有较强的数据管理能力,可以实现栅格数据信息的快速检索和提取。数据引擎采用ArcSDE,实现各类影像数据的入库。数据存储的关键是建立图幅索引,本系统数据的存储按图幅号、图名、采集时间等内容建立索引。
栅格数据依据图形属性一体化的存储思想,采用大二进制格式直接存储数据,这种方式的存储可实现内容的快速检索查询,按索引表检索出相关项后可直接打开栅格数据,提高栅格数据的管理效率。
2矢量数据
本系统采用图属一体化思想即将空间数据和属性数据合二为一,全部存在一个记录集中的思想存储空间数据,是目前GIS数据非常流行的存储方法。考虑到数据的具体情况,决定采用数据库存储空间数据和属性数据,部分具有少量、定型几何信息的地理要素如水文测站、河流、湖泊等,采用图属一体化思想存储其信息,而与其有关联关系的大量、多边化的属性信息如水文信息,则存储在属性数据表中,利用唯一标识符信息建立两表的关联。
针对本系统空间数据的特点,系统按照“数据库—子库—专题(基础数据)—层—要素—属性”的层次框架来构筑空间数据库,按照统一的地理坐标系统来存储空间数据,以实现对地理实体/专题要素进行分层叠加显示。
3多媒体数据
Oracle系统可直接存储和视频信息,并具有较强的数据管理能力,可以实现多媒体信息的快速检索和提取。多媒体数据存储的关键是建立索引表,本系统多媒体数据的存储按类型、时间、内容等项目建立索引,直接存储于Oracle数据库中。
多媒体数据存储时,可以将多媒体内容与索引表结构合为一体,采用大二进制格式直接存储,这种存储方式可实现内容的快速检索和查询,按索引表检索出相关项后可直接打开多媒体内容,而且多媒体数据库也便于维护管理。
(三)空间索引设计
1矢量空间索引
确定合适的格网级数、单元大小是建立空间格网索引的关键。格网太大,在一个格网内有多个空间实体,查询检索的准确度就低。格网太小,则索引数据量成倍增长和冗余,检索的速度和效率低。每一个数据层可采用不同大小、不同级别的空间索引格网单元,但每层级数最多不能超过三级。索引方式设置遵循以下基本原则:
(1)对于简单要素的数据层,尽可能选择单级索引格网,减少RDBMS搜索格网单元索引的级数,缩短空间索引搜索的过程;
(2)如果数据层中的要素封装边界大小变化比较大,应选择2或3级索引格网;
(3)如果用户经常对图层执行相同的查询,最佳格网的大小应是平均查询范围的15倍;
(4)格网的大小不能小于要素封装边界的平均大小。为了减少每个格网单元有多个要素封装边界的可能性,格网单元的大小应取要素封装边界平均大小的3倍;
(5)格网单元的大小不是一个确定性的问题,需要多次尝试和努力才会得到好的结果。有一些确定格网初始值的原则,用它们可以进一步确定最佳的格网大小。
SDE(Spatial Data Engine,即空间数据引擎),从空间管理的角度看,是一个连续的空间数据模型,可将地理特征的空间数据和属性数据统一集成在关系型数据库管理系统中。关系型数据库系统支持对海量数据的存储,从而也可实现对空间数据的海量存储。空间数据可通过层来进行数据的划分,将具有共同属性的一类要素放到一层中,每个数据库记录对应一层中一个实际要素,这样避免了检索整个数据表,减少了检索的数据记录数量,从而减少磁盘输入/输出的 *** 作,加快了对空间数据查询的速度。
ArcSDE采用格网索引方式,将空间区域划分成合适大小的正方形格网,记录每一个格网内所包含的空间实体(对象),以及每一个实体的封装边界范围,即包围空间实体的左下角和右上角坐标。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后通过格网号,就可以快速检索到所需的空间实体。因此确定合适的格网级数、单元大小是建立空间格网索引的关键,太大或太小均不合适,这就需要进行多次尝试,确定合适的网格大小,以保证各单元能均匀落在网格内。利用ArcSDE的索引表创建功能,记录每一网格单元的实体分布情况,形成图层空间索引表。根据空间索引表,ArcSDE实现了对空间数据的快速查询。
2栅格数据空间索引
栅格数据的空间索引通过建立多级金字塔结构来实现。以高分辨率栅格数据为底层,逐级抽取数据,建立不同分辨率的数据金字塔结构,逐级形成较低分辨率的栅格数据。该方法通常会增加20%左右的存储空间,但却可以提高栅格数据的显示速度。在数据库查询检索时,调用合适级别的栅格数据,可提高浏览和显示速度。
(四)入库数据校验
入库数据的质量关系到系统评价分析结果的准确性。数据在生产中就需要严格进行质量控制。依据数据生产流程,将数据质量控制分成生产过程控制和结果控制。生产过程控制包括数据生产前期的质量控制、数据生产过程中的实时质量控制,结果质量控制为数据生产完成后的质量控制(裴亚波等,2003)。对入库数据的校验主要是进行数据生产完成后的质量控制和检查。
1规范化检查
(1)代码规范化:所有地理代码尽量采用国家标准和行业标准,例如,行政代码采用中华人民共和国行政区划代码国标。
(2)数据格式规范化:所有数据采用标准交换数据格式,例如,矢量数据采用标准输出Coverage格式和E00格式。
(3)属性数据和关系数据字段规范化:所有属性数据和关系数据提前分门别类地设计字段的内容、长短和格式, *** 作过程中严格执行。
(4)坐标系统规范化:本系统所有与空间有关的数据采用统一的空间坐标系统,即地理坐标系统。
(5)精度规范化:所有数据按照数据精度与质量控制中所要求的精度进行采集和处理。
(6)命名规范化:所有数据按照命名要求统一命名,便于系统的查询。
(7)元数据规范化:依照元数据标准要求,进行元数据检查。
2质量控制
数据质量是GIS成败的关键。对于关系型数据库设计,只要能保证表的实体完整性和参照完整性,并使之符合关系数据库的三个范式即可。对于空间数据库设计,则不仅要考虑数据采样、数据处理流程、空间配准、投影变换等问题,还应对数据质量做出定量分析。
数据质量一般可以通过以下几个方面来描述(吴芳华等,2001):
(1)准确度(Accuracy):即测量值与真值之间的接近程度,可用误差来衡量;
(2)精度(Precision):即对现象描述得详细程度;
(3)不确定性(Uncertainty):指某现象不能精确测得,当真值不可测或无法知道时,就无法确定误差,因而用不确定性取代误差;
(4)相容性(Compatibility):指两个来源不同的数据在同一个应用中使用的难易程度;
(5)一致性(Consistency):指对同一现象或同类现象表达的一致程度;
(6)完整性(Completeness):指具有同一准确度和精度的数据在类型上和特定空间范围内完整的程度;
(7)可得性(Accessibility):指获取或使用数据的容易程度;
(8)现势性(Timeliness):指数据反映客观现象目前状况的程度。
塔里木河流域生态环境动态监测系统的所有数据在数据质量评价后,还需要从数据格式、坐标一致性等方面进行入库质量检验,只有通过质量检验的数据才可以入库。
3数据检验
空间数据质量检验包括以下步骤:
(1)数据命名是否规范,是否按设计要求命名;
(2)数据是否能够正常打开;
(3)投影方式是否正确;
(4)坐标系统是否正确;
(5)改错是否完成,拓扑关系是否建立;
(6)属性数据是否正确,包括字段设置是否依据设计进行、是否有空属性记录、是否有属性错误记录等。
关系数据质量检验包括以下步骤:
(1)数据命名是否规范,是否按设计要求命名;
(2)数据是否能够正常打开;
(3)数据字段是否按设计要求设置;
(4)是否有空属性记录;
(5)是否有属性错误记录。
属性数据的校验,主要采用以下三种方式:
(1)两次录入校验:对一些相互之间毫无关联的数据,进行两次的录入,编写程序对两次录入的结果进行比较,找出两次录入结果不一样的数据,查看正确值,进行改正。
(2)折线图检验:对一些相互之间有关联的序列数据,如人口统计数据,对这一类数据,编写程序把数据以折线图的形式显示在显示器上,数据的序列一般都有一定规律,如果出现较大的波动,则需对此点的数据进行检查修改。
(3)计算校验:对一些按一定公式计算后所得结果与其他数据有关联的数据,如某些数据的合计等于另一数据,编写程序对这类数据进行计算,计算结果与有关联的数据进行比较,找出结果不一样的数据,查看正确值,进行改正。
图形数据的校验,主要包括以下步骤(陈俊杰等,2005):
(1)图层校验:图形要素的放置图层是唯一的。对于入库的Coverage数据,系统将根据图层代码进行检查,确保图形要素对层入座。
(2)代码检查:图形要素的代码是唯一的。对于入库的Coverage数据,系统将根据入库要素代码与特征表中的代码进行比较,确保入库数据代码存在,杜绝非法代码入库。
(3)类型检查:对入库的数据,检查该要素的类型与特征表中的类型是否一致,确保图形要素对表入座。如点要素、线要素、面要素仅能赋相应的点、线、面代码,且该代码必须与特征表中的数据类型代码相同。
(4)范围检查:根据入库的数据,确定该类要素的大体范围(如X、Y坐标等),在数据入库前,比较入库数据与范围数据的大小,若入库数据在该范围内,则入库,否则给出提示检查信息。
(五)数据入库
1遥感影像数据
利用空间数据引擎———ArcSDE可实现遥感影像数据在Oracle数据库中的存储和管理,在影像数据进行入库时,应加入相应的索引和影像描述字段。
遥感影像入库步骤:
(1)影像数据预处理:要将塔里木河遥感影像数据库建成一个多分辨率无缝影像数据库系统,客观上要求数据库中的影像数据在几何空间、灰度空间连续一致。因此,在数据采集阶段就需要对影像数据进行预处理,包括图像几何校正、灰度拼接(无缝镶嵌)、正射处理、投影变换等。
几何校正的目的是使校正后的图像重新定位到某种地图投影方式,以适用于各种定位、量测、多源影像的复合及与矢量地图、DTM等的套合显示与处理。几何校正多采用二次多项式算法和图像双线性内插重采样法进行图像校正。将纠正后具有规定地理编码的图像按多边形圈定需要拼接的子区,逐一镶嵌到指定模版,同时进行必要的色彩匹配,使整体图像色调一致,完成图像的几何拼接,再采用金字塔影像数据结构和“从粗到精”的分层控制策略实现逐级拼接。
数字正射影像具有统一的大地坐标系、丰富的信息量和真实的景观表达,易于制作具有“独立于比例尺”的多级金字塔结构影像。可以采用DTM和外方位元素经过数字微分纠正方法,获得数字正射影像,它的基本参数包括原始影像与正射影像的比例尺、采样分辨率等(方涛等,1997)。
投影变换需根据数据库系统定义的标准转换到统一的投影体系下。
(2)影像数据压缩:随着传感器空间分辨率的提高和对遥感信息需求的日益增长,获取的影像数据量成几何级数增大,如此庞大的数据将占用较大的存储空间,给影像的存储和传输带来不便(葛咏等,2000)。目前,系统处理的遥感影像数据已达数百千兆,单个文件的影像数据最大达到了2G,这样的数据量在调用显示时速度很慢,对影像数据进行压缩存储,将大大提高影像访问效率。本系统采用ArcSDE软件提供的无损压缩模式对入库影像进行压缩。
(3)影像导入:遥感影像的入库可通过ArcSDE或入库程序进行导入,并填写相关的索引信息,在入库时对大型的遥感影像数据进行自动分割,分为若干的块(tiles)进行存储。
(4)图像金字塔构建:采用ArcSDE提供的金字塔构建工具在入库时自动生成图像金字塔,用户只需要选择相应的参数设置即可。图像金字塔及其层级图像按分辨率分级存储与管理。最底层的分辨率最高,并且数据量最大,分辨率越低,其数据量越小,这样,不同的分辨率遥感图像形成了塔式结构。采用这种图像金字塔结构建立的遥感影像数据库,便于组织、存储与管理多尺度、多数据源遥感影像数据,实现了跨分辨率的索引与浏览,极大地提高了影像数据的浏览显示速度。
2数字线划图
对纸图数字化、配准、校正、分层及拼接等处理后,生成标准分幅和拼接存储的数字矢量图,就可以进行图形数据入库。
(1)分幅矢量图形数据、图幅接合表:按图形比例尺、图幅号、制作时间、图层等方式,通过入库程序导入到数据库中,同时导入与该地理信息相对应的属性信息,建立空间信息与属性信息的关联。
(2)拼接矢量图形数据:按图形比例尺、制作时间、图层等方式,通过入库程序导入到数据库中,同时导入与该地理信息相对应的属性信息,建立空间信息与属性信息的关联。
3栅格数据
对纸图数字化、配准、校正、分层及拼接等处理后,生成标准分幅和整体存储的数字栅格图,然后进行图形数据入库。
(1)分幅栅格图形数据、图幅接合表:按图形比例尺、图幅号、制作时间等方式,通过入库程序导入到数据库中。
(2)整幅栅格图形数据:按比例尺、制作时间等方式,通过入库程序导入到数据库中。
4数字高程模型
(1)分幅数字高程模型数据、图幅接合表:按图形比例尺、图幅号、制作时间等方式,通过入库程序导入到数据库中。
(2)拼接数字高程模型数据:按比例尺、制作时间等方式通过入库程序导入到数据库中。
5多媒体数据
多媒体数据入库可根据多媒体数据库内容的需要对入库数据进行预处理,包括音频、视频信息录制剪接、文字编辑、色彩选配等。对多媒体信息的加工处理需要使用特定的工具软件进行编辑。由于音频信息和视频信息数据量巨大,因此,对多媒体数据存储时需采用数据压缩技术,现在的许多商用软件已能够直接存储或播放压缩后的多媒体数据文件,这里主要考虑根据数据显示质量要求选择采用不同的存储格式。图4-2为各类多媒体数据的加工处理流程。
图4-2 多媒体数据加工处理流程图
6属性数据
将收集的社会经济、水利工程、生态环境等属性资料,进行分析整理,输入计算机,最后经过程序的计算处理,存储到数据库中,具体流程如图4-3所示。
图4-3 属性数据入库流程图
问题一:怎样建立一个简单数据库? 把excel导入数据库,不出现表格嵌套可以使用下面这个方法导入;
思路:
(1)、把excel数据读入到dataset中;
(2)、建立相应结构的数据表格
(3)、把dat畅set中的数据更新到数据表中
问题二:如何在excel中创建“数据库” excel是一个自由表,一个EXCEL的工作薄就是一个数据库,它里面的每一张表就是数据库的表,你可象 *** 作表一样对其进行查询等 *** 作,它里面的列就是数据库的字段,行就是记录,因此你可以按数据库的架构来组建数据,只是你如果你组建的数据不符合数据库的规则,在查询时不能得到时相应的结果。因此在EXCEL中不存在创建数据库。但对存在的数据可以引用。当满足条件A、B、C、D……时引用是可以的,但如果是在EXCEL中直接引用是不行的,一种是用VBA利用ADO访问EXCEL,在查询时把A、B、C、D几个条件按SQL语法写进查询语句中,引用返回的记录集,一种是利用函数把满足A、B、C、D的记录筛选出来,然后再引用。
问题三:如何新建数据库关系图 红框:在CREATE 弗ABLE 的时候使用外键约束。
不论你建立一对一、一对多、多对多的关系,关系的两端都是连接一张表,这方面你可以了解一下E-R图!
问题四:sqlserver 下怎么建立数据库 怎么建表 方法/步骤
1
首先我们打开SQL SERVER自带的数据库管理工具,从开始菜单中可以找到,如图点击进去;
2
开始连接SQL SERVER服务器,就是我们装好的SQL SERVER 服务器;
3
右击数据库,选择第一个,新建一个数据库;
4
填写数据库的名称,下面是设置自动增长的,一般不用管,默认
5
点击确定后就可以生成一个数据库,此时里面是没有表的;
6
右击表新建一个表,填写你要的字段名称
7
填完字段名称后点击字段名称那个内部窗口的小叉叉,然后就提示你输入表名了,填写下表名,一个数据库的建立过程就是这样的;
或者
create database stuDB
on primary -- 默认就属于primary文件组,可省略
(
/--数据文件的具体描述--/
name='stuDB_data', -- 主数据文件的逻辑名称
filename='D:\stuDB_datamdf', -- 主数据文件的物理名称
size=5mb, --主数据文件的初始大小
maxsize=100mb, -- 主数据文件增长的最大值
filegrowth=15%--主数据文件的增长率
)
log on
(
/--日志文件的具体描述,各参数含义同上--/
name='stuDB_log',
filename='D:\stuDB_logldf',
size=2mb,
filegrowth=1mb
)
问题五:怎样建立一个大型数据库? 建立一个数据库当你想建立一个表时,你必须按照以下的步骤先建立一个数据库:在SQL Enterprise Manager中,选择你的数据库的名字。从Manage菜单中选择Databases选项。管理数据库的窗口就出现了。在工具条上点击新建数据库的按钮,就会出现新建数据库的对话框(如图35所示)。注意现在版本的SQL Server(version 65)最多能有32,767个数据库。每个数据库的最小容量是1MB,最大容量是ITB。在SQL Enterprise Manager对话框中的新建数据库对话框。 填写你的数据库所要使用的名字(不能有空格)。 然后,填写你要建立的数据库所在的数据库设备(例如,他就是你在前面一步建立的数据库设备)。 这个新建数据库的对话框会以图形的方式显示所有数据库设备的已经使用和没有使用的空间。 当你建立一个数据库时,你可以选择去建立事务日志。为了建立事务日志,你需要指定一个log device(日志数据库设备)。在新建数据库对话框中,打开标有LogDevice的下拉式框,然后选择一个数据库设备和用于日志的空间大小。注意每个数据库都有它自己的事务处理日志,它记录了对数据库每一个请求(modify,insert,delete)。日志文件是对数据库的内部处理过程的一种监视。它允许你对数据库执行updates, inserts, deletes等 *** 作。所以在需要的时候,你也可以取消这些 *** 作的结果。在系统没有正确地关闭,而只是停机或重新启动时,这些事务处理的日志是很有用的-在重新启动时,SQL Server会根据事务处理日志来恢复数据。注意当你把事务处理日志向一个dump 数据库倾倒时,你的事务处理日志会被截短。你也可以强制地使你的事务日志缩短。如果你想知道有关事务日志的更多的信息,请查询SQL 在线帮助文件,用关键字transaction log查找。6当你完成在新建数据库的对话框中的这些问题的回答,点击Create Now 按钮。你的数据库就会在Databases文件夹下显示出来。
问题六:创建数据库的两种方法 交互式创建,就是你右击数据库然后选择新建数据库按钮就可以还有一种就是sql语句创建比如创建一个数据库名为a 的数据库,那么sql语句就是,create database a;然后执行下就可以
问题七:如何建立一个数据库存储过程 由于不知道你的表结构,所以以下过程供参考(提醒:创建存储过程前,先选好要执行创建语句的数据库)
--------------------------------------------------
CREATE PROCEDURE getavg--存储过程名字为getavg
@kc varchar(255),--假设课程号字段为字符类型
@avg decimal(5,1) OUTPUT --输出平均成绩
AS
--课程号[email protected] 的平均成绩
SELECT @avg = avg(成绩字段)
from 表名
where 课程号字段 = @kc
return @avg
GO
------
以上为创建存储过程,以下为调用
declare @a decimal(5,1)
EXECUTE getavg '课程号', @avg = @a output
print @a
问题八:在电子表格中如何建立数据库?? 一、 建立数据库
方法一:使用向导,调出方法⑴可采用“文件”菜单“新建”
⑵或采用“工具”菜单“向导”
方法:使用数据库设计器
1、 使用向导建立数据库
特点:可以方便快捷地创建数据库,但只适用于一般常用的数据库。
2、 使用数据库设计器建立数据库
特点: 最大特点就是灵活性
*** 作步骤:⑴“文件”菜单“新建”,显示新建对话框
⑵选择“数据库”和单击“新建文件”钮
⑶在创建对话框中输入新数据库的名称和单击“保存”钮
效果:数据库文件已经建立完成。
显示出“数据库设计器”窗口和“数据库设计工具”
打开“数据库设计器”工具方法:“显示”菜单“工具栏”
选择“数据库设计器”
三、建立表
1、 数据库与数据表
可以先建立自由表,然后再添加到数据库中
建立新的数据库表,系统会将其自动加入到数据库中。
2、 建立自由表
注意:自由表独立于任何数据库,如需要课添加到数据库中,但不能同时
将一个表添加到多个数据库。
预备知识:建立表必须首先建立表的结构
即要描述各个字段的字段名、字段类型、字段宽度、如果是数
值型还有小数位数,以及索引、是否再字段中允许空值(选择NULL)
3、 建立数据库表
有三种方法:
法一、“文件”菜单“新建”,显示新建对话框
选择“表”和单击“新建文件”钮
在创建对话框中输入新数表名称和单击“保存”钮
法二、再建立完数据库后,不关闭“数据库设计器”窗口,单击鼠标右键后
选择快捷菜单种的“新表”,单击“新表”钮,再创建对话框输入表 名
后“保存”
法三、使用数据库设计器工具栏
(“显示”菜单“工具栏”)
选择“数据库设计器”工具栏种的第一个钮“新建表”
二、使用命令建立数据库、数据库表
1、 建立数据库
CREATE DATABASE 数据库名称
2、 建立数据库表
CREATE TABLE │DBF 表名 [FREE]
(字段名1 字段类型 [(字段宽度 [,小数位数] )]
[(字段名2……]
二、使用向导建立查询
1、查询形式分类:查询向导:标准查询
交叉表向导:以电子表格形式输出查询结果
图形向导:以电子图形形式输出查询结果
2、使用查询向导建立查询步骤:
[0]使用查询向导前必须先打开用到的库表或自由表
⑴字段选取
⑵记录筛选
⑶选择排序方式
⑷查询完成(选择保存并运行)(浏览查询)
⑸打开查询设计器,修改查询
问题九:如何建立一个数据库呢? 你上面将创建表和创建数据库等相关的东西混淆了。建议你多看下书理清下思路。一步一步来,学东西别急。
创建数据库:
create datebase db;
---这句代码创建数据库,数据库路径和大小由系统默认。
on
( 分配内存大小、数据库路径等。
)
―――创建表―――――
create table tb_(
username varchar(20) not null primary key
)-----创建字段
――――――――――――――
应该你有书,比着书多敲敲代码,有不懂的再交流。
本篇文章继续围绕SQL的语法重点为大家介绍 连接 和 高级连接 的使用,以及 使用连接的注意事项 。
SQL最强大的功能之一就是能在数据查询的执行中 连接(join)表 。连接是利用SQL的SELECT语句能执行的最重要的 *** 作,很好地理解连接及其语法是学习SQL的极为重要的一点。在能够有效地使用连接前,我们必须了解 关系表 以及 关系数据库 设计的一些基础知识。下面的介绍并不能涵盖这一主题的所有内容,但作为入门已经够了。
连接
理解关系表,最好是来看个例子。
有一个包含产品目录的数据库表,其中每类物品占一行。
对于每一种物品,要存储的信息包括产品描述、价格,以及生产该产品的供应商。
现在有同一供应商生产的多种物品,那么在何处存储供应商名、地址、联系方法等供应商信息呢?将这些数据与产品信息分开存储的理由是:
① 同一供应商生产的每个产品,其供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间;
② 如果供应商信息发生变化,例如供应商迁址或电话号码变动,只需修改一次即可;
③ 如果有重复数据(即每种产品都存储供应商信息),则很难保证每次输入该数据的方式都相同。不一致的数据在报表中就很难利用。
关键是, 相同的数据出现多次不是一件好事 ,这是关系数据库设计的基础。
关系表的设计就是要 把信息分解成多个表 , 一类数据一个表 。各表通过某些共同的值互相关联(所以才叫关系数据库)。在这个例子中可建立两个表:一个存储供应商信息,另一个存储产品信息。Vendors表包含所有供应商信息,每个供应商占一行,具有唯一的标识。此标识称为 主键 (primary key),可以是供应商ID或任何其他唯一值。Products表只存储产品信息,除了存储供应商ID(Vendors表的主键)外,它不存储其他有关供应商的信息。Vendors表的主键将Vendors表与Products表关联,利用供应商ID能从Vendors表中找出相应供应商的详细信息。
这样做的 好处 是:
① 供应商信息不重复,不会浪费时间和空间;
② 如果供应商信息变动,可以只更新Vendors表中的单个记录,相关表中的数据不用改动;
③ 由于数据不重复,使得处理数据和生成报表更简单。
总之,关系数据可以有效地存储,方便地处理。因此,关系数据库的可伸缩性远比非关系数据库要好。
为什么使用连接
连接将数据分解为多个表实现 更有效 地存储、 更方便 地处理,且 可伸缩性更好 。
可伸缩性:能够适应不断增加的工作量而不失败。
连接作为一种机制,能在一条SELECT语句中用来关联表。使用特定的语法,可连接多个表返回一组输出。
创建连接
分析 :上述SELECT语句中与之前的语句相同,都是指定检索的列, 区别 在于该语句指定的两列(prod_name,prod_price)在一个表中,而第一列(vend_name)在另一个表中。
FROM子句也有所区别。该FROM子句列出了两个表:Vendors,Products。这两个表由SELECT语句的WHERE子句连接。WHERE子句指示DBMS将Vendors表中的vend_id与Products表中的vend_id匹配起来。
这里使用了 完全限定列名 将Vendorsvend_id和Productsvend_id两列匹配。最终输出了两个不同表中的数据。
高级连接部分将介绍 如何使用表别名,另外的一些连接 ,以及 如何对被连接的表使用聚集函数 。
使用表别名
之前的文章已经给大家介绍了如何使用别名引用被检索的表列。
SQL还可以 给表名起别名 ,目的是:
① 缩短SQL语句。
② 允许在一条SELECT语句中多次使用相同的表。
分析 :上述语句中的FROM子句的三个表都有别名。如此 省略了许多字符 。表别名还可以用于SELECT的列表、ORDER BY子句以及其他语句部分。
需要注意的是: 表别名只在查询执行中使用 。与列别名不同,表别名不返回到客户端。
使用不同类型的连接
接下来将给大家介绍四种其他类型的连接: 自连接 、 自然连接 、 内连接 和 外连接 。
①自连接
分析: 这是使用了 子查询 的方案。对内部的SELECT语句做了一个简单的检索,返回Jim Jones工作公司的cust_name。该数据用于外部查询的WHERE子句中,以检索出为该公司工作的所有雇员。
下面看看使用了 连接 的方案。
分析:上述语句需要的两个表实际上是相同的表,所以Customers表在FROM子句中出现了两次。但这对于Customers的引用具有歧义,因为没有指示DBMS引用的是哪个Customers表。
于是需要使用表别名解决该问题。Customers表 第一次出现为别名c1 , 第二次为c2 ,然后再将这些别名用作表名。如SELECT语句使用c1前缀明确给出所需列的全名。如果不这么做,DBMS将返回错误,因为名为cust_id、cust_name、cust_contact的列各有两个。DBMS不知需要哪一列,即使它们都是同一列。
WHERE首先连接两个表,再按第二个表中的cust_contact过滤数据,返回所需的数据。
②自然连接
内连接 返回所有的数据,其中 相同的列可多次出现 。而 自然连接排除多次出现 ,使每一列只返回一次。
一般通过对一个表使用通配符(SELECT ),而对其他的列使用明确的子集来实现自然连接。
分析: 上述语句中,通配符只对第一个表使用,而所有其他列都明确列出来,所以没有出现重复的列被检索出来。
③内连接
目前为止使用的连接称为等值连接,是基于两个表之间的相等测试。该连接也称为内连接。
对该种连接还可以使用不同的语法,明确指定连接的类型。
分析 :该语句中的SELECT与之前的区别在于FROM 子句。此处两个表之间的关系是以 INNER JOIN 指定的部分FROM子句,因此需要使用特定的 ON子句 而不是WHERE子句。但传递给ON的实际条件与WHERE相同。
④外连接
许多连接将一个表中的行与另一个表中的行相关联,但有时候 需要包含没有关联的行 。例如,可能需要使用连接完成以下工作:
对每个顾客下的订单进行计数,包括那些至今尚未下订单的顾客;
列出所有产品以及订购数量,包括没有人订购的产品;
计算平均销售规模,包括那些至今尚未下订单的顾客。
在上述例子中,连接包含了那些在相关表中没有关联行的行。这种连接称为外连接,外连接分为 左外连接 和 右外连接 。
左外连接:取左边的表的全部,而右边的表按照条件显示,不符合条件的显示NULL。
右外连接:取右边的表的全部,而左边的表按照条件显示,不符合条件的显示NULL。
下面先给出一个简单的 内连接 ,再给出 左外连接 ,大家对比着理解。
分析 :两个语句都使用了 JOIN 关键字来指定连接类型,与内连接不同的是,左外连接包括没有关联行的行。因此在使用JOIN语法时,还需使用RIGHT或LEFT关键字来指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)。
上述左外连接语句使用了LEFT OUTER JOIN 从FROM子句左边的表(Customers)中选择所有行。
若要从右边的表选择所有行,即使用 右外连接 ,则语句如下:
注意 :两种基本的外连接形式,左外连接和右外连接。两者的唯一差别是所关联的表的顺序。
此外,还有一种外连接,即 全外连接 。该连接检索两个表中的所有行并关联可关联的行。与左外连接或右外连接包含一个表的不关联的行不同,全外连接包含两个表的不关联的行。
自连接、自然连接、内连接和外连接的区别
①自连接: 通常用于 两张结构和数据内容完全一样的表 ,在做数据处理时,对它们分别 重命名 来加以区分,然后再进行关联。
②自然连接 :特点是要求两个关系表中进行连接的必须是 相同属性列 (名字相同),无需添加连接条件,且 在结果中消除了重复的属性列 。
③内连接 :与自然连接相似,区别在于内连接 不要求两属性列同名 ,可以用 using或on 来指定某两列字段相同的连接条件。
④外连接 :可以解决自然连接时某些属性不同导致这些元组被舍弃的问题,起到了 保留要舍弃的结果 的作用。
使用带聚集函数的连接
之前给大家介绍过使用 聚集函数 来汇总数据,殊不知这些函数也可以与连接一起使用。
分析: 上述语句使用了 COUNT函数 。该语句使用INNER JOIN将Customers和Orders表相互关联。GROUP BY子句按顾客分组,因此,函数调用COUNT(Ordersorder_num)对每个顾客的订单计数,将其作为num_ord返回。
分析: 上述语句使用 左外连接 包含所有顾客,包括了那些没有任何订单的顾客。
WHERE子句的重要性
需记住的是,在一条SELECT语句中连接几个表时,相应的关系是在运行中构造的,因为在数据库表中的定义没有指示DBMS如何对表进行连接的内容。
要连接多个表,需要将它们并列于from之后, 关键 是要设置WHERE子句,确保它们之间的 关联关系 必须给出,否则,查询结果会成为笛卡尔积。
笛卡尔积:由没有连接条件的表关系返回的结果为笛卡儿积。
分析 :上述语句输出的结果便是 笛卡尔积 。返回的数据用每个供应商匹配了每个产品,包括了供应商不正确的产品(即使该供应商没有产品)。
连接及其使用的要点
① 注意所使用的连接类型。一般我们使用内连接,但使用外连接也有效。
② 关于确切的连接语法,应该查看具体的文档,看相应的DBMS支持何种语法(大多数DBMS使用这两课中描述的某种语法)。
③ 保证使用正确的连接条件(不管采用哪种语法),否则会返回不正确的数据。
④ 应该总是提供连接条件,否则会得出笛卡儿积。
⑤ 在一个连接中可以包含多个表,甚至可以对每个连接采用不同的连接类型。虽然这样做是合法的,一般也很有用,但应该在测试它们前分别测试每个连接。这会使故障排除更为简单。
以上就是本次介绍的连接和高级连接啦~
下一期将给大家介绍 组合查询 、 插入数据 及 更新和删除数据。
我们下期见!
以上就是关于为了测试数据库查询的效率是否提升,经常使用索引来实现,请问什么是索引 有什么作用 原理是什么全部的内容,包括:为了测试数据库查询的效率是否提升,经常使用索引来实现,请问什么是索引 有什么作用 原理是什么、基础数据库、数据库如何建立等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)