SQL 语法简明查询Word文档下载推荐.docx
- 文档编号:16895759
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:35
- 大小:33.54KB
SQL 语法简明查询Word文档下载推荐.docx
《SQL 语法简明查询Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SQL 语法简明查询Word文档下载推荐.docx(35页珍藏版)》请在冰豆网上搜索。
简单条件"
{[AND|OR]"
}+
SELECTstore_name
FROMStore_Information
WHERESales>
1000
OR(Sales<
500ANDSales>
275)
SanFrancisco
IN
指令的语法为下:
IN('
值一'
'
值二'
...)
Store_Information表格
SanFrancisco
SELECT*
WHEREstore_nameIN('
LosAngeles'
SanDiego'
)
BETWEEN
IN这个指令可以让我们依照一或数个不连续(discrete)的值的限制之内抓出数据库中的值,而BETWEEN则是让我们可以运用一个范围(range)内抓出数据库中的值。
BETWEEN这个子句的语法如下:
表格名"
BETWEEN'
AND'
举例来说,若我们要由Store_Information表格中找出所有介于January6,1999及January10,1999中的资料,
WHEREDateBETWEEN'
Jan-06-1999'
Jan-10-1999'
请读者注意:
在不同的数据库中,日期的储存法可能会有所不同。
在这里我们选择了其中一种储存法。
LIKE
LIKE是另一个在WHERE子句中会用到的指令。
基本上,LIKE能让我们依据一个套式(pattern)来找出我们要的资料。
相对来说,在运用IN的时候,我们完全地知道我们需要的条件;
在运用BETWEEN的时候,我们则是列出一个范围。
LIKE的语法如下:
LIKE{套式}
{套式}经常包括野卡(wildcard).以下是几个例子:
'
A_Z'
:
所有以'
A'
起头,另一个任何值的字原,且以'
Z'
为结尾的字串。
'
ABZ'
和'
A2Z'
都符合这一个模式,而'
AKKZ'
并不符合(因为在A和Z之间有两个字原,而不是一个字原)。
ABC%'
ABC'
起头的字串。
举例来说,'
ABCD'
ABCABC'
都符合这个套式。
%XYZ'
XYZ'
结尾的字串。
WXYZ'
ZZXYZ'
%AN%'
所有含有'
AN'
这个套式的字串。
举例来说,'
LOSANGELES'
SANFRANCISCO'
我们将以上最后一个例子用在我们的Store_Information表格上:
LOSANGELES
SANDIEGO
SANFRANCISCO
BOSTON
我們就打入,
WHEREstore_nameLIKE'
結果:
ORDERBY"
[ASC,DESC],"
栏位名2"
[ASC,DESC]
由小往大(ascending)或是由大往小(descending)。
在这种情况下,我们就可以运用ORDERBY这个指令来达到我们的目的。
ORDERBY的语法如下:
[WHERE"
条件"
]
[ASC,DESC]
[]代表WHERE是一定需要的。
不过,如果WHERE子句存在的话,它是在ORDERBY子句之前。
ASC代表结果会以由小往大的顺序列出,而DESC代表结果会以由大往小的顺序列出。
如果两者皆没有被写出的话,那我们就会用ASC。
我们可以照好几个不同的栏位来排顺序。
在这个情况下,ORDERBY子句的语法如下(假设有两个栏位):
栏位一"
栏位二"
若我们对这两个栏位都选择由小往大的话,那这个子句就会造成结果是依据"
由小往大排。
若有好几笔资料"
的值相等,那这几笔资料就依据"
举例来说,若我们要依照Sales栏位的由大往小列出Store_Information表格中的资料,
SELECTstore_name,Sales,Date
ORDERBYSalesDESC
在以上的例子中,我们用栏位名来指定排列顺序的依据。
除了栏位名外,我们也可以用栏位的顺序(依据SQL句中的顺序)。
在SELECT后的第一个栏位为1,第二个栏位为2,以此类推。
在上面这个例子中,我们打以下这一句SQL可以达到完全一样的效果:
ORDERBY2DESC
AVGCOUNTMAXMINSUMTRIMSUMSTRING
SQL有提供一些这一类的函数。
它们是:
∙AVG(平均)
∙COUNT(计数)
∙MAX(最大值)
∙MIN(最小值)
∙SUM(总合)
运用函数的语法是:
函数名"
("
举例来说,若我们要由我们的示范表格中求出Sales栏位的总合,
SELECTSUM(Sales)FROMStore_Information
SUM(Sales)
$2750
$2750代表所有Sales栏位的总合:
$1500+$250+$300+$700.
除了函数的运用外,SQL也可以做简单的数学运算,例如加(+)和减(-)。
对于文字类的资料,SQL也有好几个文字处理方面的函数,例如文字相连(concatenation),文字修整(trim),以及子字串(substring)。
不同的数据库对这些函数有不同的语法,所以最好是参考您所用数据库的信息,来确定在那个数据库中,这些函数是如何被运用的。
COUNT
在上一页有提到,COUNT是函数之一。
由于它的使用广泛,我们在这里特别提出来讨论。
基本上,COUNT让我们能够数出在表格中有多少笔资料被选出来。
它的语法是:
SELECTCOUNT("
举例来说,若我们要找出我们的示范表格中有几笔store_name栏不是空白的资料时,
SELECTCOUNT(store_name)
WHEREstore_nameisnotNULL
Count(store_name)
4
"
isnotNULL"
是"
这个栏位不是空白"
的意思。
COUNT和DISTINCT经常被合起来使用,目的是找出表格中有多少笔不同的资料(至于这些资料实际上是什么并不重要)。
举例来说,如果我们要找出我们的表格中有多少个不同的store_name,我们就打入,
SELECTCOUNT(DISTINCTstore_name)
Count(DISTINCTstore_name)
3
GROUPBY"
栏位1"
我们现在回到函数上。
记得我们用SUM这个指令来算出所有的Sales(营业额)吧!
如果我们的需求变成是要算出每一间店(store_name)的营业额(sales),那怎么办呢?
在这个情况下,我们要做到两件事:
第一,我们对于store_name及Sales这两个栏位都要选出。
第二,我们需要确认所有的sales都要依照各个store_name来分开算。
这个语法为:
SUM("
栏位2"
在我们的示范上,
SELECTstore_name,SUM(Sales)
GROUPBYstore_name
$1800
$250
$700
当我们选不只一个栏位,且其中至少一个栏位有包含函数的运用时,我们就需要用到GROUPBY这个指令。
在这个情况下,我们需要确定我们有GROUPBY所有其他的栏位。
换句话说,除了有包括函数的栏位外,我们都需要将其放在GROUPBY的子句中。
HAVING(函数条件)
那我们如何对函数产生的值来设定条件呢?
举例来说,我们可能只需要知道哪些店的营业额有超过$1,500。
在这个情况下,我们不能使用WHERE的指令。
那要怎么办呢?
很幸运地,SQL有提供一个HAVING的指令,而我们就可以用这个指令来达到这个目标。
HAVING子句通常是在一个SQL句子的最后。
一个含有HAVING子句的SQL并不一定要包含GROUPBY子句。
HAVING的语法如下:
HAVING(函数条件)
GROUPBY子句并不是一定需要的。
在我们Store_Information表格这个例子中,
我们打入,
SELECTstore_name,SUM(sales)
GROUPBYstore_name
HAVINGSUM(sales)>
1500
alias(别名)
接下来,我们讨论alias(别名)在SQL上的用处。
最常用到的别名有两种:
栏位别名及表格别名。
简单地来说,栏位别名的目的是为了让SQL产生的结果易读。
在之前的例子中,每当我们有营业额总合时,栏位名都是SUM(sales)。
虽然在这个情况下没有什么问题,可是如果这个栏位不是一个简单的总合,而是一个复杂的计算,那栏位名就没有这么易懂了。
若我们用栏位别名的话,就可以确认结果中的栏位名是简单易懂的。
第二种别名是表格别名。
要给一个表格取一个别名,只要在FROM子句中的表格名后空一格,然后再列出要用的表格别名就可以了。
这在我们要用SQL由数个不同的表格中获取资料时是很方便的。
这一点我们在之后谈到连接(join)时会看到。
我们先来看一下栏位别名和表格别名的语法:
表格别名"
."
"
栏位别名"
基本上,这两种别名都是放在它们要替代的物件后面,而它们中间由一个空白分开。
我们继续使用Store_Information这个表格来做例子:
我们用跟SQLGROUPBY那一页一样的例子。
这里的不同处是我们加上了栏位别名以及表格别名:
SELECTA1.store_nameStore,SUM(A1.Sales)"
TotalSales"
FROMStore_InformationA1
GROUPBYA1.store_name
Store
TotalSales
在结果中,资料本身没有不同。
不同的是栏位的标题。
这是运用栏位别名的结果。
在第二个栏位上,原本我们的标题是"
Sum(Sales)"
,而现在我们有一个很清楚的"
。
很明显地,"
能够比"
更精确地阐述这个栏位的含意。
用表格别名的好处在这里并没有显现出来,不过这在下一页(SQLJoin)就会很清楚了。
连接(join)
现在我们介绍连接(join)的概念。
要了解连接,我们需要用到许多我们之前已介绍过的指令。
我们先假设我们有以下的两个表格,
Geography表格
region_name
East
NewYork
West
而我们要知道每一区(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
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行的结果。
SQLOUTERJOIN(外部连接)
之前我们看到的左连接(leftjoin),又称内部连接(innerjoin)。
在这个情况下,要两个表格内都有同样的值,那一笔资料才会被选出。
那如果我们想要列出一个表格中每一笔的资料,无论它的值在另一个表格中有没有出现,那该怎么办呢?
在这个时候,我们就需要用到SQLOUTERJOIN(外部连接)的指令。
外部连接的语法是依数据库的不同而有所不同的。
举例来说,在Oracle上,我们会在WHERE子句中要选出所有资料的那个表格之后加上一个"
(+)"
来代表说这个表格中的所有资料我们都要。
假设我们有以下的两个表格:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语法简明查询 语法 简明 查询