简明数据库教材.docx
- 文档编号:5904861
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:10
- 大小:19.65KB
简明数据库教材.docx
《简明数据库教材.docx》由会员分享,可在线阅读,更多相关《简明数据库教材.docx(10页珍藏版)》请在冰豆网上搜索。
简明数据库教材
数据库简明教材
数据库的组成:
表、字段、记录
SELECT
一个最常用的方式是将资料从数据库中的表格内选出。
从这一句回答中,我们马上可以看到两个关键字:
从(FROM)数据库中的表格内选出(SELECT)。
(表格是一个数据库内的结构,它的目的是储存资料。
在表格处理这一部分中,我们会提到如何使用SQL来设定表格。
)我们由这里可以看到最基本的SQL架构:
SELECT"栏位名"FROM"表格名"
我们用以下的例子来看看实际上是怎么用的。
假设我们有以下这个表格:
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
若要选出所有的店名(store_Name),我们就打入:
SELECTstore_nameFROMStore_Information
结果:
store_name
LosAngeles
SanDiego
LosAngeles
Boston
WHERE
我们并不一定每一次都要将表格内的资料都完全抓出。
在许多时候,我们会需要选择性地抓资料。
就我们的例子来说,我们可能只要抓出营业额超过$1,000的资料。
要做到这一点,我们就需要用到WHERE这个指令。
这个指令的语法如下:
SELECT"栏位名"
FROM"表格名"
WHERE"条件"
若我们要由以下的表格抓出营业额超过$1,000的资料,
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
我们就打入,
SELECTstore_name
FROMStore_Information
WHERESales>1000
结果:
store_name
LosAngeles
在上一页中,我们看到WHERE指令可以被用来由表格中有条件地选取资料。
这个条件可能是简单的(像上一页的例子),也可能是复杂的。
复杂条件是由二或多个简单条件透过AND或是OR的连接而成。
一个SQL语句中可以有无限多个简单条件的存在。
复杂条件的语法如下:
SELECT"栏位名"
FROM"表格名"
WHERE"简单条件"
{[AND|OR]"简单条件"}+
{}+代表{}之内的情况会发生一或多次。
在这里的意思就是AND加简单条件及OR加简单条件的情况可以发生一或多次。
另外,我们可以用()来代表条件的先后次序。
举例来说,我们若要在Store_Information表格中选出所有Sales高于$1,000或是Sales在$500及$275之间的资料的话,
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
SanFrancisco
$300
Jan-08-1999
Boston
$700
Jan-08-1999
我们就打入,
SELECTstore_name
FROMStore_Information
WHERESales>1000
OR(Sales<500ANDSales>275)
结果:
store_name
LosAngeles
SanFrancisco
ORDERBY
到目前为止,我们已学到如何藉由SELECT及WHERE这两个指令将资料由表格中抓出。
不过我们尚未提到这些资料要如何排列。
这其实是一个很重要的问题。
事实上,我们经常需要能够将抓出的资料做一个有系统的显示。
这可能是由小往大(ascending)或是由大往小(descending)。
在这种情况下,我们就可以运用ORDERBY这个指令来达到我们的目的。
ORDERBY的语法如下:
SELECT"栏位名"
FROM"表格名"
[WHERE"条件"]
ORDERBY"栏位名"[ASC,DESC]
[]代表WHERE是一定需要的。
不过,如果WHERE子句存在的话,它是在ORDERBY子句之前。
ASC代表结果会以由小往大的顺序列出,而DESC代表结果会以由大往小的顺序列出。
如果两者皆没有被写出的话,那我们就会用ASC。
我们可以照好几个不同的栏位来排顺序。
在这个情况下,ORDERBY子句的语法如下(假设有两个栏位):
ORDERBY"栏位一"[ASC,DESC],"栏位二"[ASC,DESC]
若我们对这两个栏位都选择由小往大的话,那这个子句就会造成结果是依据"栏位一"由小往大排。
若有好几笔资料"栏位一"的值相等,那这几笔资料就依据"栏位二"由小往大排。
举例来说,若我们要依照Sales栏位的由大往小列出Store_Information表格中的资料,
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
SanFrancisco
$300
Jan-08-1999
Boston
$700
Jan-08-1999
我们就打入,
SELECTstore_name,Sales,Date
FROMStore_Information
ORDERBYSalesDESC
结果:
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
Boston
$700
Jan-08-1999
SanFrancisco
$300
Jan-08-1999
SanDiego
$250
Jan-07-1999
在以上的例子中,我们用栏位名来指定排列顺序的依据。
除了栏位名外,我们也可以用栏位的顺序(依据SQL句中的顺序)。
在SELECT后的第一个栏位为1,第二个栏位为2,以此类推。
在上面这个例子中,我们打以下这一句SQL可以达到完全一样的效果:
SELECTstore_name,Sales,Date
FROMStore_Information
ORDERBY2DESC
COUNT
在上一页有提到,COUNT是函数之一。
由于它的使用广泛,我们在这里特别提出来讨论。
基本上,COUNT让我们能够数出在表格中有多少笔资料被选出来。
它的语法是:
SELECTCOUNT("栏位名")
FROM"表格名"
举例来说,若我们要找出我们的示范表格中有几笔store_name栏不是空白的资料时,
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
我们就打入,
SELECTCOUNT(store_name)
FROMStore_Information
WHEREstore_nameisnotNULL
结果:
Count(store_name)
4
"isnotNULL"是"这个栏位不是空白"的意思。
COUNT和DISTINCT经常被合起来使用,目的是找出表格中有多少笔不同的资料(至于这些资料实际上是什么并不重要)。
举例来说,如果我们要找出我们的表格中有多少个不同的store_name,我们就打入,
SELECTCOUNT(DISTINCTstore_name)
FROMStore_Information
结果:
Count(DISTINCTstore_name)
3
关联查询
现在我们介绍连接(join)的概念。
要了解连接,我们需要用到许多我们之前已介绍过的指令。
我们先假设我们有以下的两个表格,
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
Geography表格
region_name
store_name
East
Boston
East
NewYork
West
LosAngeles
West
SanDiego
而我们要知道每一区(region_name)的营业额(sales)。
Geography这个表格告诉我们每一区有哪些店,而Store_Information告诉我们每一个店的营业额。
若我们要知道每一区的营业额,我们需要将这两个不同表格中的资料串联起来。
当我们仔细了解这两个表格后,我们会发现它们可经由一个相同的栏位,store_name,连接起来。
我们先将SQL句列出,之后再讨论每一个子句的意义:
SELECTA1.region_nameREGION,SUM(A2.Sales)SALES
FROMGeographyA1,Store_InformationA2
WHEREA1.store_name=A2.store_name
GROUPBYA1.region_name
结果:
REGION
SALES
East
$700
West
$2050
在第一行中,我们告诉SQL去选出两个栏位:
第一个栏位是Geography表格中的Region_name栏位(我们取了一个别名叫做REGION);第二个栏位是Store_Information表格中的sales栏位(别名为SALES)。
请注意在这里我们有用到表格别名:
Geography表格的别名是A1,Store_Information表格的别名是A2。
若我们没有用表格别名的话,第一行就会变成
SELECTGeography.region_nameREGION,SUM(Store_Information.Sales)SALES
很明显地,这就复杂多了。
在这里我们可以看到表格别名的功用:
它能让SQL句容易被了解,尤其是这个SQL句含盖好几个不同的表格时。
接下来我们看第三行,就是WHERE子句。
这是我们阐述连接条件的地方。
在这里,我们要确认Geography表格中Store_name栏位的值与Store_Information表格中store_name栏位的值是相等的。
这个WHERE子句是一个连接的灵魂人物,因为它的角色是确定两个表格之间的连接是正确的。
如果WHERE子句是错误的,我们就极可能得到一个笛卡儿连接(Cartesianjoin)。
笛卡儿连接会造成我们得到所有两个表格每两行之间所有可能的组合。
在这个例子中,笛卡儿连接会让我们得到4x4=16行的结果。
INSERTINTO
到目前为止,我们学到了将如何把资料由表格中取出。
但是这些资料是如果进入这些表格的呢?
这就是这一页(INSERTINTO)和下一页(UPDATE)要讨论的。
基本上,我们有两种作法可以将资料输入表格中内。
一种是一次输入一笔,另一种是一次输入好几笔。
我们先来看一次输入一笔的方式。
依照惯例,我们先介绍语法。
一次输入一笔资料的语法如下:
INSERTINTO"表格名"("栏位1","栏位2",...)
VALUES("值1","值2",...)
假设我们有一个架构如下的表格:
Store_Information表格
ColumnName
DataType
store_name
char(50)
Sales
float
Date
datetime
而我们要加以下的这一笔资料进去这个表格:
在January10,1999,LosAngeles店有$900的营业额。
我们就打入以下的SQL语句:
INSERTINTOStore_Information(store_name,Sales,Date)
VALUES('LosAngeles',900,'Jan-10-1999')
UPDATE
我们有时候可能会需要修改表格中的资料。
在这个时候,我们就需要用到UPDATE指令。
这个指令的语法是:
UPDATE"表格名"
SET"栏位1"=[新值]
WHERE{条件}
最容易了解这个语法的方式是透过一个例子。
假设我们有以下的表格:
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
我们发现说LosAngeles在01/08/1999的营业额实际上是$500,而不是表格中所储存的$300,因此我们用以下的SQL来修改那一笔资料:
UPDATEStore_Information
SETSales=500
WHEREstore_name="LosAngeles"
ANDDate="Jan-08-1999"
现在表格的内容变成:
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$500
Jan-08-1999
Boston
$700
Jan-08-1999
在这个例子中,只有一笔资料符合WHERE子句中的条件。
如果有多笔资料符合条件的话,每一笔符合条件的资料都会被修改的。
我们也可以同时修改好几个栏位。
这语法如下:
UPDATE"表格"
SET"栏位1"=[值1],"栏位2"=[值2]
WHERE{条件}
DELETE
在某些情况下,我们会需要直接由数据库中去除一些资料。
这可以藉由DELETEFROM指令来达成。
它的语法是:
DELETEFROM"表格名"
WHERE{条件}
以下我们用个实例说明。
假设我们有以下这个表格:
Store_Information表格
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
而我们需要将有关LosAngeles的资料全部去除。
在这里我们可以用以下的SQL来达到这个目的:
DELETEFROMStore_Information
WHEREstore_name="LosAngeles"
现在表格的内容变成:
Store_Information表格
store_name
Sales
Date
SanDiego
$250
Jan-07-1999
Boston
$700
Jan-08-1999
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简明 数据库 教材