SQL语句教程采用Word格式文档下载.docx
- 文档编号:19919561
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:40
- 大小:1.16MB
SQL语句教程采用Word格式文档下载.docx
《SQL语句教程采用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SQL语句教程采用Word格式文档下载.docx(40页珍藏版)》请在冰豆网上搜索。
♦表格处理:
SQL如何被用来处理数据库中的表格。
♦进阶SQL:
介绍SQL进阶概念,以及如何用SQL来执行一些较复杂的运算。
♦SQL语法:
这一页列出所有在这个教材中被提到的SQL语法。
对于每一个指令,我们将会先列出及解释这个指令的语法,然后用一个例子来让读者了解这个指令是如何被运用的。
当您读完了这个网站的所有教材后,您将对SQL的语法会有一个大致上的了解。
另外,您将能够正确地运用SQL来由数据库中获取信息。
笔者本身的经验是,虽然要对SQL有很透彻的了解并不是一朝一夕可以完成的,可是要对SQL有个基本的了解并不难。
希望在看完这个网站后,您也会有同样的想法。
修改表名:
alter
table
test
rename
test1;
--修改表名
添加表列:
add
column
name
varchar(10);
--添加表列
删除表列:
drop
name;
--删除表列
修改表列类型:
modify
address
char(10)
--修改表列类型或alter
change
char(40)
是用来做什么的呢?
一个最常用的方式是将资料从数据库中的表格内选出。
从这一句回答中,我们马上可以看到两个关键字:
从(FROM)数据库中的表格内选出(SELECT)。
(表格是一个数据库内的结构,它的目的是储存资料。
在表格处理这一部分中,我们会提到如何使用SQL来设定表格。
)我们由这里可以看到最基本的SQL架构:
SELECT"
栏位名"
FROM"
表格名"
我们用以下的例子来看看实际上是怎么用的。
假设我们有以下这个表格:
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
$300
Jan-08-1999
Boston
$700
更改上表中的第1列的列名:
address1
varchar(30)--修改表列名
更改列名后如下:
若要选出所有的店名(store_Name),我们就打入:
SELECTstore_nameFROMStore_Information
结果:
我们一次可以读取好几个栏位,也可以同时由好几个表格中选资料。
SELECT指令让我们能够读取表格中一个或数个栏位的所有资料。
这将把所有的资料都抓出,无论资料值有无重复。
在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况。
换句话说,我们需要知道这个表格/栏位内有哪些不同的值,而每个值出现的次数并不重要。
这要如何达成呢?
在SQL中,这是很容易做到的。
我们只要在SELECT后加上一个DISTINCT就可以了。
DISTINCT的语法如下:
SELECTDISTINCT"
FROM"
举例来说,若要在以下的表格,Store_Information,找出所有不同的店名时,
Store_Information表格
我们就键入,
SELECTDISTINCTstore_nameFROMStore_Information
我们并不一定每一次都要将表格内的资料都完全抓出。
在许多时候,我们会需要选择性地抓资料。
就我们的例子来说,我们可能只要抓出营业额超过$1,000的资料。
要做到这一点,我们就需要用到WHERE这个指令。
这个指令的语法如下:
WHERE"
条件"
若我们要由以下的表格抓出营业额超过$1,000的资料,
SELECTstore_name
FROMStore_Information
WHERESales>
1000
store_nameLosAngeles
ANDOR
在上一页中,我们看到WHERE指令可以被用来由表格中有条件地选取资料。
这个条件可能是简单的(像上一页的例子),也可能是复杂的。
复杂条件是由二或多个简单条件透过AND或是OR的连接而成。
一个SQL语句中可以有无限多个简单条件的存在。
复杂条件的语法如下:
WHERE"
简单条件"
{[AND|OR]"
}+
{}+代表{}之内的情况会发生一或多次。
在这里的意思就是AND加简单条件及OR加简单条件的情况可以发生一或多次。
另外,我们可以用()来代表条件的先后次序。
举例来说,我们若要在Store_Information表格中选出所有Sales高于$1,000或是Sales
在$500及$275之间的资料的话,
SanFrancisco
OR(Sales<
500ANDSales>
275)
store_nameLosAngelesSanFrancisco
IN
SELECT*FROMstore_informationWHEREstore_nameIN('
LosAngeles'
'
SanDiego'
)
执行结果如下:
SELECT*FROMstore_informationWHEREstore_name='
ORstore_name='
Between
SELECT*FROMstore_informationWHEREdatetBETWEEN'
2015-07-06'
AND'
2015-07-10'
SELECT*FROMstore_informationWHEREsalesBETWEEN400AND2000
LIKE
LIKE是另一个在WHERE子句中会用到的指令。
基本上,LIKE能让我们依据一个模式(pattern)来找出我们要的资料.相对来说,在运用IN的时候,我们完全地知道我们需要的条件;
在运用BETWEN的时候,我们则是列出一个范围。
LIKE的语法如下:
SELECT“栏位名“FROM“表格名”WHERE“栏位名”LIKE{模式}
{模式}经常包括野卡(wildcard)。
SELECT*FROMstore_informationWHEREstore_nameLIKE'
%AN%'
ORDERBY
到目前为止,我们已经学到如何藉由SELECT及WHERE这两个指令将资料由表格中抓出。
不过我们尚未提到这些资料要如何排练。
这其实是一个很重要的问题。
事实上,我们经常需要能够将抓出的资料做一个有联系的显示。
这可能是由小往大(ascending)或是由大往小(descending)。
在这种情况下,我们就可以运用ORDERBY这个指令来达到我们的目的.
ORDERBY语法如下:
SELECT“栏位名”FROM“表格名”[WHERE“条件”]ORDERBY“栏位名”[ASC,DESC]
SELECTstore_name,sales,datetFROMstore_informationORDERBYsalesDESC
SELECTstore_name,sales,datetFROMstore_informationORDERBY3DESC
既然数据可中有许多资料都是以数字的型态存在,一个很重要的用途就是对这些数字做一些运算,例如将它们总会起来,或是找出它们的平均值。
SQL提供了一些函数如下:
AVG(平均)
COUNT(计数)
MAX(最大值)
MIN(最小值)
SUM(总合)
运用函数的语法是:
SELECT“函数名”(“栏位名”)FROM“表格名”
例如:
SELECTCOUNT(sales)FROMstore_information
SELECTSUM(sales)FROMstore_information
SELECTMAX(sales)FROMstore_information
SELECTMIN(sales)FROMstore_information
SELECTAVG(sales)FROMstore_information
COUNT
在上一页有提到,COUNT是函数之一。
由于它的使用广泛,我们在这里特别提出来讨论。
基本上,COUNT让我们能够数出表格中有多少笔资料被选出来。
它的语法是:
SELECTCOUNT(“栏位名”)FROM“表格名”
SELECTCOUNT(store_name)FROMstore_informationWHEREstore_nameISNOTNULL
GROUPBY
我们现在回到函数上。
记得我们用SUM这个指令来计算出所有的sales(营业额)吧!
如果我们的需求变成是要算出每一间店(store_name)的营业额,那么怎么算呢?
这个情况下,我们要做到两件事:
第一,我们对于store_name及sales这两个栏位都要选出。
第二我们需要确认所有的sales都要依照各个store_name来分开算。
这个语法为:
SELECT“栏位1”,SUM(“栏位2”)FROM“表格名”GROUPBY“栏位1”
SELECTstore_name,SUM(sales)FROMstore_informationGROUPBYstore_name
HAVING
那我们如何对函数产生的值来设定条件呢?
举例来说,我们可能只需要知道哪些店的营业额有超过$1500。
在这个情况下,我们不能使用WHERE的指令。
那要怎么办呢?
很幸运地,SQL有提供一个HAVING的指令,而我们就可以用这个指令来达到这个目标。
HAVING子句通常是在一个SQL句子的最后,一个含有HAVING子句的SQL并不一定要包含GROUPBY子句。
HAVING子句的语法如下:
SELECT“栏位1”,SUM(“栏位2”)FROM“表格名”GROUPBY“栏位1”HAVING(函数条件)
SELECTstore_name,SUM(sales)FROMstore_informationGROUPBYstore_nameHAVINGSUM(sales)>
1500
ALIAS
接下来,我们讨论alias(别名)在SQL上的用处。
最常用到的别名有两种:
栏位别名及表格别名。
简单地来说,栏位别名的目的是为了让SQL产生的结果易读。
在之前的例子中,每当我们有营业额总合时,栏位名都是SUM(sales)。
虽然在这个情况下没有什么问题,可是如果这个栏位不是一个简单的总合,而是一个复杂的计算,那栏位名就没有这么易懂了。
若我们用栏位别名的话,就可以确认结果中的栏位名是简单易懂的。
第二种别名是表格别名。
要给一个表格取一个别名,只要在FROM子句中的表格名后空一格,然后再列出要用的表格别名就可以了。
这在我们要用SQL由数个不同的表格中获取资料时是很方便的。
这一点我们在之后谈到连接(join)时会看到.
我们先来看一下栏位别名合表格别名的语法:
SELECT“表格别名”“栏位1”“栏位别名”FROM“表格名”“表格别名”
SELECTA1.store_namestore,SUM(A1.sales)"
Totalsales"
FROMstore_informationA1GROUPBYA1.store_name
SELECTA1.region_name,SUM(A2.sales)salesFROMgeographyA1,store_informationA2
WHEREA1.store_name=A2.store_name
GROUPBYA1.region_name
删掉上面SQL语句中的sales
SELECTA1.region_name,SUM(A2.sales)FROMgeographyA1,store_informationA2
SELECTA1.region_nameregion,SUM(A2.sales)salesFROMgeographyA1,store_informationA2
没有别名的情况:
SELECTgeography.region_name,SUM(store_information.sales)FROMgeography,store_information
WHEREgeography.store_name=store_information.store_name
GROUPBYgeography.region_name
有时候,我们有需要将由不同栏位获得的资料串联在一起,每种数据库都有提供方法来达到这个目的:
MySQL:
CONCAT()
Oracle:
CONCAT(),||
SQLServer:
+
CONCAT()的语法如下:
CONCAT(字符串1,字符串2,字符串3,...):
将字符串1、字符串2、字符串3,等字符串连在一起。
请注意,Oracle的CONCATO()只允许两个参数;
换言之,一次只能将两个字符串串连起来。
不过,在Oracle中,我们可以用’||’来一次串连多个字符串。
表geography
region_name
Store_name
East
NewYork
West
表store_information
sales
datat
2015-07-05
250
2015-07-07
300
2015-07-08
700
MySQL/Oracle
SELECTCONCAT(region_name,store_name)FROMgeographyWHEREstore_name='
Boston'
;
SQL中的substring函数是用来抓住一个栏位资料中的其中一部分。
这个函数的名称在不同的数据库中不完全一样:
SUBSTR(),SUBSTRING()
SUBSTR()
SUBSTRING()
最常用到的方式如下(我们用SUBSTR()为例):
SUBSTR(str,pos):
由<
str>
中,选出所有从第<
pos>
位置开始的字符。
请注意,这个语法不适用于SQLServer上。
SUBSTR(str,pos,len):
中的第<
位置开始,选出接下去的<
len>
格字符。
假设我们有以下的表格:
例1:
SELECTSUBSTR(store_name,3)FROMgeographyWHEREstore_name='
例2:
SELECTSUBSTR(store_name,2,4)FROMgeographyWHEREstore_name='
SQL中的TRIM函数是用来移除掉一个字符串中的字头或字尾。
最常见的用途是移除字首或字尾的空白。
这个函数在不同的数据库中有不同的名称:
TRIM(),RTRIM(),LTRIM()
RTRIM(),LTRIM()
各种trim函数的语法如下:
TRIM([[位置][要移除的字符串]FROM]字符串):
[位置]的可能值为LEADING(起头),
TRAILING(结尾),orBOTH(起头及结尾)。
这个函数将把[要移除的字符串]从字符串的起
头、结尾,或是起头及结尾移除。
如果我们没有列出[要移除的字符串]是什么的话,那空
白就会被移除。
LTRIM(字符串):
将所有字符串起头的空白移除。
RTRIM(字符串):
将所有字符串结尾的空白移除。
例1:
SELECTTRIM('
Sample'
);
'
Sample'
例2:
SELECTLTRIM('
Sample'
例3:
SELECTRTRIM('
Sample'
表格是数据库中储存资料的基本架构。
在绝大部份的情况下,数据库厂商不可能知道您需要
如何储存您的资料,所以通常您会需要自己在数据库中建立表格。
虽然许多数据库工具可以
让您在不需用到SQL的情况下建立表格,不过由于表格是一个最基本的架构,我们决定包
括CREATETABLE的语法在这个网站中。
在我们跳入CREATETABLE的语法之前,我们最好先对表格这个东西有些多一点的了解。
表格被分为栏位(column)及列位(row)。
每一列代表一笔资料,而每一栏代表一笔资料的
一部份。
举例来说,如果我们有一个记载顾客资料的表格,那栏位就有可能包括姓、名、地
址、城市、国家、生日‧‧‧等等。
当我们对表格下定义时,我们需要注明栏位的标题,以及那
个栏位的资料种类。
那,资料种类是什么呢?
资料可能是以许多不同的形式存在的。
它可能是一个整数(例如
1),、一个实数(例如0.55)、一个字符串(例如'
sql'
)、一个日期/时间(例如'
2000-JAN-25
03:
22:
22'
)、或甚至是以二进法(binary)的状态存在。
当我们在对一个表格下定义时,我们
需要对每一个栏位的资料种类下定义。
(例如'
姓'
这个栏位的资料种类是char(50)──代
表这是一个50个字符的字符串)。
我们需要注意的一点是不同的数据库有不同的资料种类,
所以在对表格做出定义之前最好先参考一下数据库本身的说明。
CREATETABLE的语法是:
CREATETABLE"
("
栏位1"
"
栏位1资料种类"
"
栏位2"
栏位2资料种类"
...)
若我们要建立我们上面提过的顾客表格,我们就键入以下的SQL:
CREATETABLEcustomer
(First_Namechar(50),
Last_Namechar(50),
Addresschar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语句 教程 采用