SQL语句教程采用.docx
《SQL语句教程采用.docx》由会员分享,可在线阅读,更多相关《SQL语句教程采用.docx(10页珍藏版)》请在冰豆网上搜索。
SQL语句教程采用
SQL指令
SELECT
DISTINCT
WHERE
ANDORINBETWEENLIKEORDERBY
函数
COUNTGROUPBYHAVINGALIAS
表格链接
外部链接
CONCATENATE
SUBSTRING
TRIM
表格处理
CREATETABLE
CONSTRAINT
NOTNULL
UNIQUE
CHECK
主键
外来键
CREATEVIEW
CREATEINDEX
ALTERTABLE
DROPTABLETRUNCATETABLEINSERTINTOUPDATE
DELETEFROM进阶SQL
UNIONUNIONALLINTERSECTMINUS
子查询
EXISTS
CASE
算排名
算中位数
算总合百分比
算累积总合百分比
SQL语法
无论您是一位SQL的新手,或是一位只是需要对SQL复习一下的资料仓储业界老将,您就来对地方了。
这个SQL教材网站列出常用的SQL指令,包含以下几个部分:
♦SQL指令:
SQL如何被用来储存、读取、以及处理数据库之中的资料。
♦表格处理:
SQL如何被用来处理数据库中的表格。
♦进阶SQL:
介绍SQL进阶概念,以及如何用SQL来执行一些较复杂的运算。
♦SQL语法:
这一页列出所有在这个教材中被提到的SQL语法。
对于每一个指令,我们将会先列出及解释这个指令的语法,然后用一个例子来让读者了解这个指令是如何被运用的。
当您读完了这个网站的所有教材后,您将对SQL的语法会有一个大致上的了解。
另外,您将能够正确地运用SQL来由数据库中获取信息。
笔者本身的经验是,虽然要对SQL有很透彻的了解并不是一朝一夕可以完成的,可是要对SQL有个基本的了解并不难。
希望在看完这个网站后,您也会有同样的想法。
SQL指令
修改表名:
alter table test rename test1; --修改表名
添加表列:
alter table test add column name varchar(10); --添加表列
删除表列:
alter table test drop column name; --删除表列
修改表列类型:
alter table test modify address char(10) --修改表列类型或alter table test change address address char(40)
SELECT
是用来做什么的呢?
一个最常用的方式是将资料从数据库中的表格内选出。
从这一句回答中,我们马上可以看到两个关键字:
从(FROM)数据库中的表格内选出(SELECT)。
(表格是一个数据库内的结构,它的目的是储存资料。
在表格处理这一部分中,我们会提到如何使用SQL来设定表格。
)我们由这里可以看到最基本的SQL架构:
SELECT"栏位名"FROM"表格名"
我们用以下的例子来看看实际上是怎么用的。
假设我们有以下这个表格:
store_name
Sales
Date
LosAngeles
$1500
Jan-05-1999
SanDiego
$250
Jan-07-1999
LosAngeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
更改上表中的第1列的列名:
alter table test change column address address1 varchar(30)--修改表列名
更改列名后如下:
若要选出所有的店名(store_Name),我们就打入:
SELECTstore_nameFROMStore_Information
结果:
store_name
LosAngeles
SanDiego
LosAngeles
Boston
我们一次可以读取好几个栏位,也可以同时由好几个表格中选资料。
DISTINCT
SELECT指令让我们能够读取表格中一个或数个栏位的所有资料。
这将把所有的资料都抓出,无论资料值有无重复。
在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况。
换句话说,我们需要知道这个表格/栏位内有哪些不同的值,而每个值出现的次数并不重要。
这要如何达成呢?
在SQL中,这是很容易做到的。
我们只要在SELECT后加上一个DISTINCT就可以了。
DISTINCT的语法如下:
SELECTDISTINCT"栏位名"
FROM"表格名"
举例来说,若要在以下的表格,Store_Information,找出所有不同的店名时,
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
我们就键入,
SELECTDISTINCTstore_nameFROMStore_Information
结果:
store_name
LosAngeles
SanDiego
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_nameLosAngeles
ANDOR
在上一页中,我们看到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_nameLosAngelesSanFrancisco
IN
SELECT*FROMstore_informationWHEREstore_nameIN('LosAngeles','SanDiego')
执行结果如下:
SELECT*FROMstore_informationWHEREstore_name='LosAngeles'ORstore_name='SanDiego'
执行结果如下:
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
MySQL5.6.25和SQLyogUltimate11.3.0