SQL是结构化查询语言,英文名称是:Structured Query Language, 简写SQL,是关系数据库的标准语言.它的主要功能包括:数据定义, 数据查询,数据操作和数据控制
在ACCESS中主要用来是查询或修改数据的,一般情况下,只要掌握其中的几个关键的语句和方式就行了
比如:查找常用的SELECT 语句
比如从一个STU 表中找学号(Stun)为 0102 的学生的NAME ,语句为
SELECT NAME FROM STU WHERE Stun =0102
还有像插入语句:INSERT ,格式
INSERT INTO (<表名>) [(<列名1>)[,(<列名2>)])...<查询>
删除语句: DELETE 格式为
DELETE FROM <表名> [WHERE <条件>]
更新语句:UPDATE 格式为
UPDATE <表名> SET <列名1>=<表达式1>,[<列名1>=<表达式1>]....WHERE <条件>
建议你看一本有关数据库的书,里面对SQL的使用很详细,
只要掌握几语常用的一般就行了,很简单的,不要被吓怕了
② SQL 请问SQL高手,系统中的这几个数据库都是做什么用的
数据:计算机中用来描述事物的记录
数据模型:是一种对客观事物抽象化的表现形式。数据模型应该真实、易于理解、便于实现
建模:对客观事物加以抽象,提取主要特征,归纳成一个简单清晰的轮廓,使复杂问题变得易于处理
数据模型三要素:数据结构、数据操作、完整性约束
数据结构描述静态特征,按数据结构可以把数据模型分为层次模型、网状模型、关系模型
数据操作描述动态特征,数据操作主要分为更新(插入、删除、修改)、检索两大类,统称增、删、改、查
完整性约束确保数据的正确性、有效性、相容性
数据库:简称DB(database),是由数据库管理系统管理的数据的聚集
数据库管理系统:简称DBMS(DataBase Management System)是专门用于建立和管理数据库的一套软件,介于应用程序和操作系统之间。属于系统软件
数据库系统:简称DBS(DataBase System)。数据库、DBMS、应用程序和软件系统统称数据库系统
关系:关系就是一张二维表
关系模型:数据以关系的形式表示,就是以二维表的形式表示数据模型
属性:关系的标题栏中各列的名字
模式:关系的名称和关系的属性集
元组:二维表的所有行统称为元组,元组的各个分量对应于关系的各个属性。一个元组表示一个对象
域:关系的每个属性的取值范围
关系的实例:给定关系中元组的集合称为该关系的“实例”。一个给定的关系模式,可以有许多关系实例。
关系型数据库管理系统:简称RDBMS(Relationg DataBase Management System),采用关系数据模型的数据库管理系统。
数据库系统的体系结构的三层结构和两层映象:从数据库管理的角度出发,数据库系统的体系可分三层,外模式、模式、内模式。两层映象是,外模式/模式映象、模式/内模式映象
外模式:又称用户模式,相当于SQL中的视图(VIEW)模式,是数据库用户可以看见和使用的局部数据的逻辑结构和特征描述,是与某应用有关的数据的逻辑表示
模式:分为概念模式、逻辑模式,是所有数据库用户的公共数据视图,是数据库中全部数据的逻辑结构和特征的描述,一个数据库只有一个模式
外模式/模式映象:把局部逻辑结构描述与全局逻辑结构描述联系起来。一个模式可以与多个外模式对应联系。例如,SQL SERVER中一个关系模式上可以建立多个满足不同用户要求的视图VIEW。这种映象可以保证数据与应用程序之间的逻辑独立性,即改变模式,不影响外模式,则与外模式相关的应用程序无序修改
内模式:由称为存储模式,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。内模式描述记录的存储方式、索引的组织方式、数据是否压缩、是否加密等,不涉及硬件设备。
模式/内模式映象:把全局逻辑结构描述与物理结构描述联系起来。一个模式只有一个内模式。这种映象保证了数据与程序之间的物理独立性,当内模式修改时,由于模式未变,所以无需修改程序。
DBMS的体系结构(组成):查询处理程序、存储管理程序、事务管理程序、客户/服务器程序体系结构
查询处理程序:负责查询处理,它的一个重要任务是“优化”查询。
事务管理程序:保证多个事务并发执行
存储管理程序:既管理磁盘上的数据文件又管理存放数据文件部分内容的内存数据缓冲区
客户/服务器程序体系结构:大多数DBMS程序采用这种程序体系结构,把整个DBMS程序系统划分为两部分,DBMS核心部分属于服务器程序,客户程序主要用于与用户相互配合并将查询或其他命令传送给服务器程序的查询接口。
数据库设计
数据库设计的步骤:需求分析、概念设计、逻辑设计、物理设计
需求分析和概念设计阶段的工作与具体数据库管理系统无关,这一阶段的工作独立于数据库管理系统
逻辑设计和物理设计阶段的共组与具体采用何种数据库管理系统相关。
需求分析阶段:应用领域的调查、定义信息与应用、定义操作任务、定义数据项、预测未来改变,结果产生相关文档
概念设计阶段:也称为建模
任务:数据库概念模式(模式)设计、事务设计
概念模式设计的工具:E/R图。对于面向对象的数据库则可采用面向对象定义语言ODL
E/R图:称为实体-联系模型
E/R图的组成:实体集(矩形)、属性(椭圆)、联系(菱形)
联系的类型:一对一、一对多、多对多。用线条和箭头表示不同的联系。箭头指向的一方代表“一”
键码属性的表示:下划线
联系中的角色:即一个实体集内部实体之间的联系
多向联系:多个实体集之间发生的一个联系
多向联系转化为双向联系的方法:将多向联系转换成实体集,然后在原来与之联系的实体集和新的实体集之间建立新的双向联系
E/R图中的子类的表示方法和继承:如果实体集B是实体集A的子类,则它们之间用一个标有isa的三角形和两根线条建立特殊的联系。三角形的尖端指向超类(父类),子类实体集上只需标出子类特有的属性,继承父类的所有属性。
ODL对象定义语言:是用面向对象的术语来说明数据库结构的一种推荐的标准语言,主要用途是书写面向对象数据库的设计
对象:是某种可研究,可观察的实体,例如:一个人、一门课程、一本书等等
类:具有相似特性的对象可以归为一类
ODL描述的三种特性:属性(Attribute)、联系(Relationship)、方法(Method)
ODL书写规则:
interface 类名1{
attribute 数据类型1 属性名1;
attribute 数据类型2 属性名2;
.
.
.
relationship [Set]<类名2> 联系名1
inverse 类名2::联系名2;
.
.
}
说明:
关键字interface、attribute、relationship、<set>、inverse
常用数据类型有string(字符串)、integer(整型)、float(浮点型)、enum(枚举型)
[]中的set为任选项,当类1与类2的联系是一对一时,不需要使用set,当类1与类2的联系是一对多时必须使用set
inverse表示在类2中联系名2所表示的联系与类1中联系名1所表示的联系是多对一的对应联系
ODL例一:用ODL描述制片公司与电影,假如制片公司部名称不重复。因为,一个制片公司可以制作多部影片,而一部影片只能由一个公司制作发行,所以制片公司与影片的关系是一对多的关系。
interface studio{
attribute string studioname;
attribute string address;
attribute string phone;
relationship set<movie> make
inverse movie::madeby;
}
interface movie{
attribute string movietitle;
attribute integer length;
attribute enum incolor ;
attribute integer year;
relationship set studio madeby
inverse studio::make;
}
ODL例二:用ODL描述学生与课程,一名学生可以选择多门课程来学习,一门课程可以被多名学生选修。
interface student{
attribute string sname;
attribute string address;
attribute enum gender ;
attribute integer age;
relationship set<course> choice
inverse course::choisedby;
}
interface course{
attribute string ctitle;
attribute integer credit;
relationship set<student> choisedby
inverse student::choice;
}
ODL例三:用ODL描述校长与学校的关系,一名校长只能管理一所学校,一所学校只能设一名校长。
interface chairman{
attribute string chname;
attribute enum gender ;
attribute integer age;
attribute string phone;
relationship set university manage
inverse university::leadby;
}
interface university{
attribute string unnmae;
attribute string addr;
relationship set chairman leadby
inverse chairman::manage;
}
ODL子类描述方法:自类继承父类的所有属性和联系。子类可以有自己的特殊属性和联系。子类中属性和联系的描述方法与上述例子相同。
interface 子类名:基类名
ODL子类描述例:硕士研究生类是学生的一个子类。每名硕士研究生有若干名导师,一名导师可以带多名硕士研究生。
interface student{
attribute string sname;
attribute string address;
attribute enum gender ;
attribute integer age;
}
interface master:student{
attribute string special;
relationship set<advisor> direct
inverse advisor::directedby;
}
interface advisor{
attribute string name;
attribute string address;
}
逻辑设计阶段:把概念设计阶段产生的数据库概念模式变换为数据库逻辑模式。数据库逻辑模式依赖于逻辑数据模型和数据库管理系统。目前做流行的数据库管理系统都是关系型逻辑数据模型。所以,本教程知讨论如何把概念模式转变为关系模型
逻辑设计阶段的步骤:
1.概念模式转变为关系模型
2.对关系模型进行规范化和优化
3.适应DBMS限制条件的修改
4.对性能、存储空间等的优化
1.概念模式转变为关系模型
E/R图转变为关系模型的方法:
1.一个实体集转变为一个关系模式,这个关系模式包含实体集所有的简单属性和复合属性的简单子属性。实体集的名称可以用作为关系模式的名称,用下划线来表示关系的键码
2.一个联系转变为一个关系模式,一般情况下用联系名作为关系名,用联系的实体集的键码和联系本身的属性作为此关系模式的属性集。
E/R图转变为关系模型实例:
实例一:一个班级只能有一个班长,而且必须有一个班长,E/R图如下:
学生与班级的联系是一对一的联系(1:1)。学生实体集的键码是学号。班级实体集的键码是班号。这个E/R图可以转变为如下的关系模型
学生(学号,姓名,性别,出生日期)
班级(班号,名称,地点)
班长(学号,班号,注册)
联系反映的是具有某学号的学生担任具有某班号班级的班长。这种转变方法是常用的方法。
如果想减少查询时使用连接操作的次数,提高查询效率,以上E/R图也可以转变为如下关系模型
学生(学号,姓名,性别,出生日期,班号)
班级(班号,名称,地点)
学生关系模式中的“班号”是外键码。这种关系模式中,由于学生关系中记录了所有学生的学号,但不是每个学生都担任班长(按教科书上的术语叫做不是全参与),因此不是每个元组的班号属性都有数据,即应该允许班号为空。否则,学生实体集必须是全参与,即每个学生都是班长。
实例二:一个影片公司可以制作多部影片,但是一部影片只能归一个制片公司所有。假如公司不重名,影片也不重名,则公司名称是制片公司实体集的键码,影片名是影片实体集的键码。
影片公司与影片的联系是1对多的联系(1:N)。这个E/R图可以转变为以下关系模型
影片公司(公司名称,地点)
影片(影片名,片长)
制作(公司名称,影片名)
同样,假如影片公司是全参与,即每个影片公司至少制作了一部电影,则可以转变为以下关系模型
影片公司(公司名称,地点,影片名)
影片(影片名,片长)
其中,影片公司关系中的影片名是外键码
实例三:学生与课程之间的联系是“选修”。一个学生可以选多门课程,一门课程可以被多名学生选修,所以它们之间的“选修”联系是多对多(N:M)
上述E/R图可以转变为以下关系模型
学生(学号,姓名)
课程(课程号,课程名)
选修(学号,课程号,成绩)
选修关系中的学号和课程号是外键码
2.对关系模型进行规范化和优化
为什麽要把关系模型规范化:为了有效地消除关系中存在的数据冗余和更新异常等现象
基本概念
函数依赖:如果关系R的两个元组在属性A1,A2,...An上一致,则它们的另一个属性B上也一致,那末,我们就说在关系R中属性B函数地依赖于属性A1,A2,...An或者说属性A1,A2,...An函数决定属性B。
关系的键码:
如果一个或多个属性的集合满足如下条件,则称该集合为关系R的键码(key):
1.这些属性函数决定该关系的所有其它属性。
2.的任何真子集都不能函数决定R的所有其它属性。
关系的超键码:包含键码的属性集称为超键码,是“键码的超集”的简称
函数依赖规则:分解/合并规则、传递规则、平凡依赖规则
平凡依赖:对于函数依赖A1,A2,...An->B,如果B是A中的某一个,我们称这种依赖是平凡依赖
非平凡依赖:对于函数依赖A1,A2,...An->B,如后B中至少有一个不在A中,我们称这种依赖是非平凡依赖
完全非平凡依赖:对于函数依赖A1,A2,...An->B,B中没有一个在A中,我们称这种依赖是完全非平凡依赖
主属性:键码所在的属性
非主属性:键码以外的属性
封闭集(闭包)对于给定的函数依赖集S,属性集A函数决定的属性集合就是属性集A在依赖集S下的封闭集
范式就是符合某一种级别的关系模式的集合。
规范化通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合,这一过程称为规范化
1范式(1NF),如果一个关系模式R的所有属性都是不可分割的基本数据项,则这个关系属于1NF
2范式(2NF),若关系模式R属于1NF,且每个非主属性都完全依赖于键码,则R属于2NF
3范式(3NF),若关系模式R属于1NF,且每个非主属性都不传递依赖于键码,则R属于3NF
BC范式(BCNF),若关系模式属于1NF,且R的每个非平凡依赖的决定因素都包含键码,则R属于BCNF
规范化分解原则:无损连接、保持依赖
无损连接:当对关系模式R进行分解时,R的元组将分别在相应属性集进行投影而产生新的关系,如果对新的关系进行自然连接得到的元组的集合与原关系完全一致,则称为无损连接
保持依赖:如果分解后的总的函数依赖集与原函数依赖集保持一致,则称为保持依赖。
模式分解的两个规则:公共属性共享、相关属性合一
公共属性共享:保留公共属性,进行自然连接是分解后的模式实现无损连接的必要条件
相关属性合一:把以函数依赖的形式联系在一起的相关属性放在一个模式中,从而使原有的函数依赖得以保持,这是分解后的模式实现保持依赖的充分条件
模式分解的三种方法
一、部分依赖归子集;完全依赖随键码——用于建立2NF
例:关系R(A,B,C,D,E,F,G)上存在函数依赖,A->BCD,E->F,AE->G,AE->BCD,AE->F
分析以上依赖可以看出,AE是键码(AE->BCD)。因为AE是键码,A是主属性,A->BCD,所以BCD是部分依赖于AE
根据部分依赖归子集的方法,因为A是AE的真子集,所以A与BCD归在一起构成一个关系模式。R1(A,B,C,D)
同理对于AE->F,有E->F所以AE->F是部分依赖,非主属性F所依赖的真子集是E,所以E和F可以归在一个关系模式中R2(E,F)
AE->G是完全函数依赖,完全依赖随键码,所以AEG归在一个关系模式中R3(A,E,G)
因此R(A,B,C,D,E,F,G)可以分解为符合2NF的关系模式如下:
R1(A,B,C,D)
R2(E,F)
R3(A,E,G)
二、基本依赖为基础,中间属性做桥梁——用于建立3NF
例:关系R(A,B,C,D,E)上存在函数依赖,AB->C,C->D,D->E
显然中间桥梁是C->D,他构成了传递依赖链,因此,R可以分解为R1(A,B,C),R2(C,D)。分解后在R1,R2中都不存在传递依赖。
三、找违例自成一体,舍其右全集归一;若发现仍有违例,再回首如法炮制——用于建立BCNF
BCNF违例:违背BC范式的函数依赖称为BC范式违例
例:关系R(A,B,C,D,E)的键码是AB,有函数依赖AB->CDE,ABC->E,C->D
分析上述三个函数依赖可以看出,C->D是BCNF违例。因为它的决定因素不包含键码。我们作如下分解
违例自成一体,即CD构成一个关系模式R1(C,D)
舍其右全集归一,即从R的属性中取掉C->D的右边的属性D,其左边的属性C与其他所有属性构成一个新的关系R2(A,B,C,E)
新的关系模式如下:
R1(C,D)
R2(A,B,C,E)
注意:以BCNF违例为基础进行模式分解,最终得到的属于BCNF的关系模式都能实现无损连接,但未必能保持函数依赖
逻辑设计例一:假如有关系模式R(A,B,C,D)和函数依赖集S=。
(1)找出所有BCNF违例。
(2)如果该关系模式不是BCNF,则将它分解为BCNF
(3)找出所有的违背3NF的依赖
(4)如果该关系不是3NF,则将它分解为3NF
步骤一:找出R在S上的所有非平凡依赖,首先计算封闭集
单属性封闭集:A+=A,B+=BCD,C+=C,D+=D
双属性封闭集:AB+=ABCD,AC+=AC,AD+=AD,BC+=BCD,BD+=BCD,CD+=CD
三属性封闭集:ABC+=ABCD,ABD+=ABCD,BCD+=BCD,ACD+=ACD
四属性封闭集:ABCD+=ABCD
步骤二:根据计算所得的封闭集,找出键码和超键码
键码:AB
超键码:ABC,ABD,ABCD
步骤三:找出所有的非平凡函数依赖
B->C,B->D,AB->C,AB->D,BC->D,BD->C,ABC->D,ABD->C
其中,AB->C,AB->D,ABC->D,ABD->C不是BCNF违例,因为前两个依赖的决定因素本身就是键码,而后两个依赖的决定因素包含键码。所以,B->C,B->D,BC->D,BD->C是BCNF违例,因为它们的决定因素都不包含键码。实际上可以看出R不是2NF,因为存在部分函数依赖:ABC->D,ABD->C,AB->C,AB->D,B->C,B->D
步骤四:进行BCNF规范。BCNF违例自成一体。从以上BCNF违例中选择B->C自成一体
R1(B,C)
舍其右全集归一,即舍去B->C的右边属性C,所以得到
R2(A,B,D)
但是在R2中还存在BCNF违例B->D,因此B->D自成一体,得到R21(B,D),舍其右全集归一得到R22(A,B)
最后得到的关系模式是:R1(B,C),R21(B,D),R22(A,B)
通过关系模式分解,把一个非2NF的关系模式归范成一个BCNF。代价是,在实际操作中增加了连接操作。
(3)B->C,B->D,B不是键码也不是超键码,而C,D都是键码以外的属性,即是非主属性。所以R不是3NF。
逻辑设计例二:有关系R(A,B,C,D)和函数依赖集S=
(1)找出所有BCNF违例。
(2)如果该关系模式不是BCNF,则将它分解为BCNF
(3)找出所有的违背3NF的依赖
(4)如果该关系不是3NF,则将它分解为3NF
步骤一:找出R在S上的所有非平凡依赖,首先计算封闭集
单属性封闭集:A+=ABCD,B+=ABCD,C+=ABCD,D+=ABCD
双属性封闭集:AB+=ABCD,AC+=ABCD,AD+=ABCD,BC+=ABCD,BD+=ABCD,CD+=ABCD
三属性封闭集:ABC+=ABCD,ABD+=ABCD,BCD+=ABCD,ACD+=ABCD
四属性封闭集:ABCD+=ABCD
步骤二:找出所有非平凡函数依赖
A->B,A->C,A->D,B->A,B->C,B->D,C->A,C->B,C->D,D->A,D->B,D->C
AB->C,AB->D,AC->B,AC->D,AD->B,AD->C,BC->A,BC->D,BD->A,BD->C,CD->A,CD->B
ABC->D,ABD->C,BCD->A,ACD->B
步骤三:找出键码和超键码
键码:A,B,C,D
超键码:AB,AC,AD,BC,BD,CD,ABC,ABD,BCD,ACD,ABCD
根据以上结果分析,R是3NF也是BCNF
3NF要求不存在每个非主属性对于键码的部分依赖或传递依赖
练习:对于
1.R(A,B,C,D)和函数依赖集S=
2.R(A,B,C,D,E)和函数依赖集S=
3.R(A,B,C,D,E)和函数依赖集S=
(1)找出所有BCNF违例。
(2)如果该关系模式不是BCNF,则将它分解为BCNF
物理设计阶段:任务是在数据库逻辑设计的基础上,为每个关系模式选择合适的存储结构和存取路径
物理设计阶段步骤:
(1)分析影响数据库物理设计的因素;
(2)为关系模?
请参考
③ 请问sql数据库优化具体是指的哪些方面呢有没有什么工具软件呢
1、数据库逻辑设计的规范化 数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式:第1规范:没有重复的组或多值的列,这是数据库设计的最低要求。第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分。消除部分依赖,大部分情况下,数据库设计都应该达到第二范式。第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表。更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三范式,系统会产生较少的列和较多的表,因而减少了数据冗余,也利于性能的提高。2、合理的冗余完全按照规范化设计的系统几乎是不可能的,除非系统特别的小,在规范化设计后,有计划地加入冗余是必要的。冗余可以是冗余数据库、冗余表或者冗余字段,不同粒度的冗余可以起到不同的作用。冗余可以是为了编程方便而增加,也可以是为了性能的提高而增加。从性能角度来说,冗余数据库可以分散数据库压力,冗余表可以分散数据量大的表的并发压力,也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接,提高效率。3、主键的设计主键是必要的,SQL SERVER的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引。聚集索引对查询的影响是比较大的,这个在下面索引的叙述。在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键的B树结构的层次更少。主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般应该选择重复率低、单独或者组合查询可能性大的字段放在前面。4、外键的设计外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是:外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK约束、规则约束、触发器、客户端程序,一般认为,离数据越近的方法效率越高。谨慎使用级联删除和级联更新,级联删除和级联更新作为SQL SERVER 2000当年的新功能,在2005作 了保留,应该有其可用之处。我这里说的谨慎,是因为级联删除和级联更新有些突破了传统的关于外键的定义,功能有点太过强大,使用前必须确定自己已经把握好 其功能范围,否则,级联删除和级联更新可能让你的数据莫名其妙的被修改或者丢失。从性能看级联删除和级联更新是比其他方法更高效的方法。5、字段的设计字段是数据库最基本的单位,其设计对性能的影响是很大的。需要注意如下:A、数据类型尽量用数字型,数字型的比较比字符型的快很多。B、数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的。C、 尽量不要允许NULL,除非必要,可以用NOT NULL+DEFAULT代替。D、少用TEXT和IMAGE,二进制字段的读写是比较慢的,而且,读取的方法也不多,大部分情况下最好不用。E、自增字段要慎用,不利于数据迁移。6、数据库物理存储和环境的设计在设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计,使得我们的系统在将来能适应比较多的用户并发和比较大的数据量。这里需要注意文件组的作用,适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力。7、系统设计整个系统的设计特别是系统结构设计对性能是有很大影响的,对于一般的OLTP系统,可以选择C/S结构、三层的C/S结构等,不同的系统结构其性能的关键也有所不同。系统设计阶段应该归纳一些业务逻辑放在数据库编程实现,数据库编程包括数据库存储过程、触发器和函数。用数据库编程实现业务逻辑的好处是减少网络流量并可更充分利用数据库的预编译和缓存功能。8、索引的设计在设计阶段,可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数据量和查询来设计索引,可能与将来实际使用的时候会有所区别。关于索引的选择,应改主意:A、根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。B、根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、筛选条件、聚合查询、排序的字段作为索引的候选字段。C、把经常一起出现的字段组合在一起,组成组合索引,组合索引的字段顺序与主键一样,也需要把最常用的字段放在前面,把重复率低的字段放在前面。D、一个表不要加太多索引,因为索引影响插入和更新的速度。 具体有什么工具,我就不知道了
④ 求jsp代码有关销售方面的系统(玩具,商品等),附带sql文件,谢谢!!
⑤ SQL中的销售增长率怎么求
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
SELECT nickname,email
FROM testtable
WHERE name='张三'
(一) 选择列表
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列
例如,下面语句显示testtable表中所有列的数据:
SELECT *
FROM testtable
2、选择部分列并指定它们的显示次序
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:
SELECT nickname,email
FROM testtable
3、更改列标题
在选择列表中,可重新指定列标题。定义格式为:
列标题=列名
列名 列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:
SELECT 昵称=nickname,电子邮件=email
FROM testtable
4、删除重复行
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:
SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable
(二) FROM子句
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
在FROM子句中可用以下两种格式为表或视图指定别名:
表名 as 别名
表名 别名
例如上面语句可用表的别名格式表示为:
SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。
例如:
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。
(三) 使用WHERE子句设置查询条件
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:
SELECT *
FROM usertable
WHERE age>20
WHERE子句可包括各种条件运算符:
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
范围运算符(表达式值是否在指定的范围):BETWEEN…AND…
NOT BETWEEN…AND…
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)
NOT IN (项1,项2……)
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
2、列表运算符例:country IN ('Germany','China')
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
例如:
限制以Publishing结尾,使用LIKE '%Publishing'
限制以A开头:LIKE '[A]%'
限制以A开头外:LIKE '[^A]%'
4、空值判断符例WHERE age IS NULL
5、逻辑运算符:优先级为NOT、AND、OR
(四)查询结果排序
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:
ORDER BY {column_name [ASC|DESC]} [,…n]
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排序。
例如:
SELECT *
FROM usertable
ORDER BY age desc,userid ASC
另外,可以根据表达式进行排序。
二、 联合查询
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement为待联合的SELECT查询语句。
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
查询1 UNION (查询2 UNION 查询3)
三、连接查询
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。
连接可以在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
[Post=0][/Post]
⑥ 求SQL语句,我的表里记录了每天的销售产品及金额,我想统计一个月中每天的销售额,生成列表,语句怎么写
select 日期,count(金额)as 销售额 from 表名 group by 日期 按要求这样就成吧
⑦ sql是什么软件
SQL数据库
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。
SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。
(7)营销领域的sql是什么扩展阅读:
SQL作为一种操作命令集, 以其丰富的功能受到业内人士的广泛欢迎, 成为提升数据库操作效率的保障。SQL Server数据库的应用,能够有效提升数据请求与返回的速度,有效应对复杂任务的处理,是提升工作效率的关键。
由于SQL Servers数据库管理系统具有较高的数据管理性能,因其优越的性能,应用范围非常广,大量应用于服务器和客户体系结构中。SQL Servers数据库的性质主要由以下几个方面体现:系统的吞吐量、响应时间以及并行处理能力, 发出请求服务器回应的速度、还有不同屏幕之间切换的速度等等。
⑧ SQL数据库的应用领域、现状、发展前景
SQL数据库是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。
一、SQL数据库的应用领域
1、多媒体数据库
这种数据库主要存储与多媒体有关的数据,如语音、图像和视频数据。多媒体数据最大的特点是数据连续、数据量大、存储空间大。
2、移动数据库
这种数据库是在笔记本电脑、掌上电脑等移动计算机系统上开发的。数据库的最大特点是通过无线数字通信网络传输。移动数据库可以随时随地获取和访问数据,为一些业务应用和一些突发事件带来了极大的便利。
3、空间数据库
目前,这种数据库发展迅速。它主要包括地理信息数据库(也称为GIS)和计算机辅助设计(CAD)数据库。其中,地理信息数据库一般存储与地图相关的信息数据;CAD数据库一般存储机械、集成电路、电子设备设计图纸等设计信息的空间数据库。
4、信息检索系统
信息检索是根据用户输入的信息从数据库中查找相关文档或信息,并将信息反馈给用户。信息检索领域与数据库领域同步发展。它是一个典型的联机文档管理系统或联机图书目录。
5、分布式信息检索
这种数据库是随着Internet的发展而产生的。它广泛应用于Internet和远程计算机网络系统中。特别是随着电子商务的发展,这种数据库的发展更为迅速。许多网络用户(如个人、公司或企业等)将信息存储在自己的计算机中。
6、专家决策系统
专家决策系统也是数据库应用的一部分。因为越来越多的数据可以在网上获得,特别是通过这些数据,企业可以对企业的发展做出更好的决策,从而使企业能够更好地经营。随着人工智能的发展,专家决策系统的应用越来越广泛。
二、SQL数据库现状
1、自主研发
国内自主研发关系型数据库的企业、单位基本上都是发源于上世纪90年代的,而且都是以大学、科研机构为主。到今天,有代表性的厂商有:达梦–由华中理工冯玉才教授创办,完全自主研发。以Oracle为参照、追赶对象。
2、引进源代码
引进数据库源代码发展国产数据库,如今,经济发展,而且IBM也愿意迎合国人对于国产化的诉求,将搁置多年的Informix源代码拿出来,发挥余热。2015年以来,与IBM签订源代码授权的公司有华胜天成、南大通用(Gbase8t)和星瑞格。这三个公司成为以引进Informix源代码发展国产数据库的代表。
三、SQL数据库发展前景
1、产品形成系列化
一方面,Web和数据仓库等应用的兴起,数据的绝对量在以惊人的速度迅速膨胀;另一方面,移动和嵌入式应用快速增长。针对市场的不同需求,数据库正在朝系列化方向发展。
2、智能化集成化
SQL数据库技术的广泛使用为企业和组织收集并积累了大量的数据。数据丰富知识贫乏的现实直接导致了联机分析处理(OLAP)和数据挖掘(DataMining)等技术的出现,促使数据库向智能化方向发展。
3、支持各种互联网应用
SQL数据库管理系统是网络经济的重要基础设施之一。支持Internet(甚至于MobileInternet)数据库应用已经成为数据库系统的重要方面。例如,Oracle公司从8版起全面支持互联网应用,是互联网数据库的代表。
(8)营销领域的sql是什么扩展阅读:
SQL包括了所有对数据库的操作,主要是由4个部分组成:
1、数据定义:又称为“DDL语言”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
2、数据操纵:又称为“DML语言”,包括插入、删除和更新三种操作。
3、数据查询:又称为“DQL语言”,包括数据查询操作。
4、数据控制:又称为“DCL语言”,对用户访问数据的控制有基本表和视图的授权及回收。
5、事务控制:又称为“TCL语言”,包括事务的提交与回滚。
参考资料来源:网络-SQL数据库
⑨ Oracle、DB2、MySQL、SQL Server、Sybase这几款数据的重点应用领域分别是哪些比如电信、互联网、银行等等
这个事情需要展开来看
很多大型企业单位为了满足业务系统的使用需要,使用很强劲的服务器主机,以大型机、小型机为主。这些机器都不使用windows系统,所以SQL Server之类的数据库没办法在这种机器上运行。Oracle、DB2、Sybase之类的是主流,这几个数据库有很强大的技术支持团队,也是受到大企业欢迎的原因。
计算机水平国外还是比较高的,所以外国软件公司开发的针对大企业的软件也都要求在这种数据库上运行。
约定俗成,微软的操作系统和数据库由于不能运行在很强劲的主机上,所以只能给中小企业服务。微软系列的还有access数据库,基本上是为单机服务的。
至于MySQL基本上是为网站服务的,主要特点是免费,应用挺多,但是大企业信息化软件很少用,因为没有对应的业务支持人员,到时候出问题,找不到人,就出大事故了。
反过来再看数据库本身,都有参数说明,你仔细看看就知道了。很多小数据库本身底气就不足,并发数量、最大库文件等等参数标得很低,你说大企业动辄几T几P的数据,敢忘这种数据库上放吗?软件公司敢编写用这种数据库的软件吗?
再说说知名度,企业之间都会互相问,要是一个很小很便宜的数据库大家都用,都用得很好,市场占有率极高。自然口碑就好,大家就都用了。微软的sqlsever就是一个例子。从最开始的6.5基本上不能用到sql2000很成功,得到大量企业的认同,到现在出到2008版本,占有率很高了,就是口碑,可是它在大企业中使用不理想,所以还是占有中小企业。
分析这些数据库,应该多方面来看,不能只看参数,只看技术。你都分析好了,发现某个数据库不像大家说的,你能用,可是市场上找不到对应的软件,也没辙,除非你自己编写。
⑩ sql server 是什么软件,哪方面的工作就会用到这个软件软件好用吗
是微软出品的数据库软件,一般用于数据库开发、基于sql
server
的应用软件使用都会用到它,分为服务器和客户端两种。软件是微软开发的,目前是主要使用的数据库软件之一。