【网学网提醒】:以下是网学会员为您推荐的SqlServer语法,希望本篇文章对您学习有所帮助。
TOP子句用于规定要返回的记录的数目
SELECTTOPnumber|percentcolumn_name(s)FROMtable_nameSELECTTOP2*FROMPersonsSELECTTOP50PERCENT*FROMPersons
LIKE操作符用于在WHERE子句中搜索列中的指定模式。子句中搜索列中的指定模式。
例子1现在,我们希望从上面的"Persons"表中选取居住在以"N"开始的城市里的人:我们可以使用下面的SELECT语句:
SELECT*FROMPersonsWHERECityLIKE'N%'提示:提示:"%"可用于定义通配符(模式中缺少的字母)。
例子2接下来,我们希望从"Persons"表中选取居住在以"g"结尾的城市里的人:我们可以使用下面的SELECT语句:
SELECT*FROMPersonsWHERECityLIKE'%g'
例子3通过使用NOT关键字,我们可以从"Persons"表中选取居住在不包含"lon"的城市里的人:不包含我们可以使用下面的SELECT语句:
SELECT*FROMPersonsWHERECityNOTLIKE'%lon%'
SQL通配符
在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。SQL通配符必须与LIKE运算符一起使用。
在SQL中,可使用以下通配符:通配符%_[charlist][^charlist]或者[!charlist]描述替代一个或多个字符仅替代一个字符字符列中的任何单一字符不在字符列中的任何单一字符
例子1现在,我们希望从上面的"Persons"表中选取居住的城市不以"A"或"L"或"N"开头的人:不以我们可以使用下面的SELECT语句:
SELECT*FROMPersonsWHERECityLIKE'[!ALN]%'
IN操作符
IN操作符允许我们在WHERE子句中规定多个值。
SQLIN语法SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameIN(value1,value2,...)现在,我们希望从上表中选取姓氏为Adams和Carter的人:我们可以使用下面的SELECT语句:
SELECT*FROMPersonsWHERELastNameIN('Adams','Carter')
BETWEEN操作符
操作符BETWEEN...AND会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SQLBETWEEN语法SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue2如需以字母顺序显示介于"Adams"(包括)和"Carter"(不包括)之间的人,请使用下面的SQL:
SELECT*FROMPersonsWHERELastName
BETWEEN'Adams'AND'Carter'
如需使用上面的例子显示范围之外的人,请使用NOT操作符:
SELECT*FROMPersonsWHERELastName
NOTBETWEEN'Adams'AND'Carter'
SQLAlias
通过使用SQL,可以为列名称和表名称指定别名(Alias)。,可以为列名称和表名称指定别名()。表的SQLAlias语法SELECTcolumn_name(s)FROMtable_nameASalias_name
列的SQLAlias语法SELECTcolumn_nameASalias_nameFROMtable_name假设我们有两个表分别是:"Persons"和"Product_Orders"。我们分别为它们指定别名"p"和"po"。现在,我们希望列出"JohnAdams"的所有定
单。
我们可以使用下面的SELECT语句:
SELECTpo.OrderID,p.LastName,p.FirstNameFROMPersonsASp,Product_OrdersASpoWHEREp.LastName='Adams'ANDp.FirstName='John'
Alias实例使用一个列名别名实例:
表Persons:Id123SQL:SELECTLastNameASFamily,FirstNameASNameFROMPersonsLastNameAdamsBushCarterFirstNameJohnGeorgeThomasAddressOxfordStreetFifthAvenueChanganStreetCityLondonNewYorkBeijing
结果:结果:FamilyAdamsBushCarterNameJohnGeorgeThomas
SQLjoin用于根据两个或多个表中的列之间的关系,从这些表中查询数用于根据两个或多个表中的列之间的关系,据。
Join和Key
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行join。数据库中的表可通过键将彼此联系起来。主键(PrimaryKey)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。请看"Persons"表:
Id_P123
LastNameAdamsBushCarter
FirstNameJohnGeorgeThomas
AddressOxfordStreetFifthAvenueChanganStreet
CityLondonNewYorkBeijing
请注意,"Id_P"列是Persons表中的的主键。这意味着没有两行能够拥有相同的Id_P。即使两个人的完全相同,Id_P也可以区分他们。接下来请看"Orders"表:Id_O12345OrderNo7789544678224562456234764Id_P331165
请注意,"Id_O"列是Orders表中的的主键,同时,"Orders"表中的"Id_P"列用于引用"Persons"表中的人,而无需使用他们的确切。请留意,"Id_P"列把上面的两个表联系了起来。
引用两个表
我们可以通过引用两个表的方式,从两个表中获取数据:谁订购了产品,并且他们订购了什么产品?
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersons,OrdersWHEREPersons.Id_P=Orders.Id_P结果集:LastNameAdamsAdamsFirstNameJohnJohnOrderNo2245624562
CarterCarter
ThomasThomas
7789544678
SQLJOIN-使用Join
除了上面的方法,我们也可以使用关键词JOIN来从两个表中获取数据。如果我们希望列出所有人的定购,可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersons
INNERJOINOrders
ONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName
SQLLEFTJOIN关键字
LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
LEFTJOIN关键字语法SELECTcolumn_name(s)FROMtable_name1LEFTJOINtable_name2ONtable_name1.column_name=table_name2.column_name注释:注释:在某些数据库中,LEFTJOIN称为LEFTOUTERJOIN。
用在例子中的):原始的表(用在例子中的:用在例子中的
"Persons"表:Id_P123"Orders"表:LastNameAdamsBushCarterFirstNameJohnGeorgeThomasAddressOxfordStreetFifthAvenueChanganStreetCityLondonNewYorkBeijing
Id_O12345
OrderNo7789544678224562456234764
Id_P331165
左连接(左连接(LEFTJOIN)实例)
现在,我们希望列出所有的人,以及他们的定购-如果有的话。您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsLEFTJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName结果集:LastNameAdamsAdamsCarterCarterBushFirstNameJohnJohnThomasThomasGeorgeOrderNo22456245627789544678
SQLRIGHTJOIN关键字
RIGHTJOIN关键字会右表(table_name2)那里返回所有的行,即使在左表(table_name1)中没有匹配的行。
RIGHTJOIN关键字语法
SELECTcolumn_name(s)FROMtable_name1RIGHTJOINtable_name2ONtable_name1.column_name=table_name2.column_name注释:注释:在某些数据库中,RIGHTJOIN称为RIGHTOUTERJOIN。
右连接(右连接(RIGHTJOIN)实例)
现在,我们希望列出所有的定单,以及定购它们的人-如果有的话。您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsRIGHTJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName结果集:LastNameAdamsAdamsCarterCarterFirstNameJohnJohnThomasThomasOrderNo2245624562778954467834764RIGHTJOIN关键字会从右表(Orders)那里返回所有的行,即使在左表(Persons)中没有匹配的行。
SQLFULLJOIN关键字
只要其中某个表存在匹配,FULLJOIN关键字就会返回行。
FULLJOIN关键字语法SELECTcolumn_name(s)FROMtable_name1FULLJOINtable_name2
ONtable_name1.column_name=table_name2.column_name注释:注释:在某些数据库中,FULLJOIN称为FULLOUTERJOIN。
全连接(全连接(FULLJOIN)实例)
现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsFULLJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName结果集:LastNameAdamsAdamsCarterCarterBushFirstNameJohnJohnThomasThomasGeorge34764FULLJOIN关键字会从左表(Persons)和右表(Orders)那里返回所有的行。如果"Persons"中的行在表"Orders"中没有匹配,或者如果"Orders"中的行在表"Persons"中没有匹配,这些行同样会列出。OrderNo22456245627789544678
SQLUNION操作符操作符
UNION操作符用于合并两个或多个SELECT语句的结果集。请注意,UNION内部的SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。
SQLUNION语法SELECTco
lumn_name(s)FROMtable_name1
UNIONSELECTcolumn_name(s)FROMtable_name2注释:注释:默认地,UNION操作符选取不同的值。如果允许重复的值,请使用UNIONALL。
SQLUNIONALL语法SELECTcolumn_name(s)FROMtable_name1UNIONALLSELECTcolumn_name(s)FROMtable_name2另外,UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。
下面的例子中使用的原始表:下面的例子中使用的原始表:
Employees_China:E_ID01020304Employees_USA:E_ID01020304E_NameAdams,JohnBush,GeorgeCarter,ThomasGates,BillE_NameZhang,HuaWang,WeiCarter,ThomasYang,Ming
使用UNION命令
实例列出所有在中国和美国的不同的雇员名:
SELECTE_NameFROMEmployees_China
UNION
SELECTE_NameFROMEmployees_USA
结果E_NameZhang,HuaWang,WeiCarter,ThomasYang,MingAdams,JohnBush,GeorgeGates,Bill注释:注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION命令只会选取不同的值。
UNIONALL
UNIONALL命令和UNION命令几乎是等效的,不过UNIONALL命令会列出所有的值。
SQLStatement1UNIONALLSQLStatement2
使用UNIONALL命令
实例:实例:列出在中国和美国的所有的雇员:
SELECTE_NameFROMEmployees_China
UNIONALL
SELECTE_NameFROMEmployees_USA
结果E_NameZhang,Hua
Wang,WeiCarter,ThomasYang,MingAdams,JohnBush,GeorgeCarter,ThomasGates,Bill
SQLSELECTINTO语句可用于创建表的备份复件。语句可用于创建表的备份复件。
SELECTINTO语句
SELECTINTO语句从一个表中选取数据,然后把数据插入另一个表中。SELECTINTO语句常用于创建表的备份复件或者用于对记录进行存档。
SQLSELECTINTO语法您可以把所有的列插入新表:
SELECT*INTOnew_table_name[INexternaldatabase]FROMold_tablename或者只把希望的列插入新表:
SELECTcolumn_name(s)INTOnew_table_name[INexternaldatabase]FROMold_tablename
SQLSELECTINTO实例-制作备份复件
下面的例子会制作"Persons"表的备份复件:
SELECT*INTOPersons_backup
FROMPersons
IN子句可用于向另一个数据库中拷贝表:
SELECT*INTOPersonsIN'Backup.mdb'
FROMPersons如果我们希望拷贝某些域,可以在SELECT语句后列出这些域:
SELECTLastName,FirstNameINTOPersons_backup
FROMPersons
SQLSELECTINTO实例-带有WHERE子句
我们也可以添加WHERE子句。下面的例子通过从"Persons"表中提取居住在"Beijing"的人的信息,创建了一个带有两个列的名为"Persons_backup"的表:
SELECTLastName,FirstnameINTOPersons_backup
FROMPersons
WHERECity='Beijing'
SQLSELECTINTO实例-被连接的表
从一个以上的表中选取数据也是可以做到的。下面的例子会创建一个名为
"Persons_Order_Backup"的新表,其中包含了从Persons和Orders两个表中取得的信息:
SELECTPersons.LastName,Orders.OrderNoINTOPersons_Order_BackupFROMPersonsINNERJOINOrdersONPersons.Id_P=Orders.Id_P
CREATEDATABASE语句
CREATEDATABASE用于创建数据库。
SQLCREATEDATABASE语法CREATEDATABASEdatabase_name
CREATETABLE语句
CREATETABLE语句用于创建数据库中的表。
SQLCREATETABLE语法CREATETABLE表名称(列名称1数据类型,列名称2数据类型,列名称3数据类型,....)数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:数据类型描述integer(size)int(size)smallint(size)tinyint(size)decimal(size,d)numeric(size,d)仅容纳整数。在括号内规定数字的最大位数。
??
容纳带有小数的数字。"size"规定数字的最大位数。"d"规定小数点右侧的最大位数。容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。
char(size)
varchar(size)
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。
date(yyyymmdd)
容纳日期。
SQLCREATETABLE实例
本例演示如何创建名为"Person"的表。该表包含5个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address"以及"City":
CREATETABLEPersons(Id_Pint,LastNamevarchar(255),FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
SQL约束(Constraints)
约束用于限制加入表的数据的类型。可以在创建表时规定约束(通过CREATETABLE语句),或者在表创建之后也可以(通过ALTERTABLE语句)。我们将主要探讨以下几种约束:
??????
NOTNULLUNIQUEPRIMARYKEYFOREIGNKEYCHECKDEFAULT
SQLNOTNULL约束
NOTNULL约束强制列不接受NULL值。NOTNULL约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录。下面的SQL语句强制"Id_P"列和"LastName"列不接受NULL值:
CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
SQLUNIQUE约束
UNIQUE约束唯一标识数据库表中的每条记录。UNIQUE和PRIMARYKEY约束均为列或列集合提供了唯一性的保证。PRIMARYKEY拥有自动定义的UNIQUE约束。请注意,每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARYKEY约束。下面的SQL在"Persons"表创建时在"Id_P"列创建UNIQUE约束:CREATETABLEPersons(Id_PintNOTNULLUNIQUE,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
如果需要命名UNIQUE约束,以及为多个列定义UNIQUE约束,请使用下面的SQL语
法:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
CONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName)
)
SQLUNIQUEConstraintonALTERTABLE
当表已被创建时,如需在"P_Id"列创建UNIQUE约束,请使用下列SQL:ALTERTABLEPersons
ADDUNIQUE(P_Id)
如需命名UNIQUE约束,并定义多个列的UNIQUE约束,请使用下面的SQL语法:
ALTERTABLEPersons
ADDCONSTRAINTuc_PersonIDUNIQUE(P_Id,LastName)
撤销UNIQUE约束
如需撤销UNIQUE约束,请使用下面的SQL:ALTERTABLEPersons
DROPCONSTRAINTuc_PersonID
SQLPRIMARYKEY约束
PRIMARYKEY约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含NULL值。每个表应该都一个主键,并且每个表只能有一个主键。
SQLPRIMARYKEYConstraintonCREATETABLE
下面的SQL在"Persons"表创建时在"Id_P"列创建PRIMARYKEY约束:CREATETABLEPersons(Id_PintNOTNULLPRIMARYKEY,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
如果需要命名PRIMARYKEY约束,以及为多个列定义PRIMARYKEY约束,请使用下面的SQL语法:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
CONSTRAINTuc_PersonIDPRIMARYKEY(Id_P,LastName)
)
SQLPRIMARYKEYConstraintonALTERTABLE
如果在表已存在的情况下为"Id_P"列创建PRIMARYKEY约束,请使用下面的SQL:ALTERTABLEPersons
ADDPRIMARYKEY(Id_P)
如果需要命名PRIMARYKEY约束,以及为多个列定义PRIMARYKEY约束,请使用下面的SQL语法:ALTERTABLEPersons
ADDCONSTRAINTpk_PersonIDPRIMARYKEY(Id_P,LastName)
注释:如果您使用ALTERTABLE语句添加主键,必须把主键列声明为不包含NULL值(在表首次创建注释:时)。
撤销PRIMARYKEY约束
如需撤销PRIMARYKEY约束,请使用下面的SQL:ALTERTABLEPersons
DROPCONSTRAINTpk_PersonID
SQLFOREIGNKEY约束
一个表中的FOREIGNKEY指向另一个表中的PRIMARYKEY。让我们通过一个例子来解释外键。请看下面两个表:"Persons"表:Id_P123"Orders"表:Id_O1OrderNo77895Id_P3LastNameAdamsBushCarterFirstNameJohnGeorgeThomasAddressOxfordStreetFifthAvenueChanganStreetCityLondonNewYorkBeijing
234
446782245624562
311
请注意,"Orders"中的"Id_P"列指向"Persons"表中的"Id_P"列。"Persons"表中的"Id_P"列是"Persons"表中的PRIMARYKEY。"Orders"表中的"Id_P"列是"Orders"表中的FOREIGNKEY。FOREIGNKEY约束用于预防破坏表之间连接的动作。FOREIGNKEY约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
SQLFOREIGNKEYConstraintonCREATETABLE
下面
的SQL在"Orders"表创建时为"Id_P"列创建FOREIGNKEY:CREATETABLEOrders(O_IdintNOTNULLPRIMARYKEY,OrderNointNOTNULL,
Id_PintFOREIGNKEYREFERENCESPersons(Id_P)
)
如果需要命名FOREIGNKEY约束,以及为多个列定义FOREIGNKEY约束,请使用下面的SQL语法:CREATETABLEOrders(O_IdintNOTNULL,OrderNointNOTNULL,Id_Pint,PRIMARYKEY(O_Id),
CONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
)
SQLFOREIGNKEYConstraintonALTERTABLE
如果在"Orders"表已存在的情况下为"Id_P"列创建FOREIGNKEY约束,请使用下面的SQL:ALTERTABLEOrders
ADDFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
如果需要命名FOREIGNKEY约束,以及为多个列定义FOREIGNKEY约束,请使用下面的SQL语法:ALTERTABLEOrders
ADDCONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
撤销FOREIGNKEY约束
如需撤销FOREIGNKEY约束,请使用下面的SQL:ALTERTABLEOrders
DROPCONSTRAINTfk_PerOrders
SQLCHECK约束
CHECK约束用于限制列中的值的范围。如果对单个列定义CHECK约束,那么该列只允许特定的值。如果对一个表定义CHECK约束,那么此约束会在特定的列中对值进行限制。
SQLCHECKConstraintonCREATETABLE
下面的SQL在"Persons"表创建时为"Id_P"列创建CHECK约束。CHECK约束规定"Id_P"列必须只包含大于0的整数。CREATETABLEPersons(Id_PintNOTNULLCHECK(Id_P>0),LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
如果需要命名CHECK约束,以及为多个列定义CHECK约束,请使用下面的SQL语法:CREATETABLEPersons
(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
CONSTRAINTchk_PersonCHECK(Id_P>0ANDCity='Sandnes')
)
SQLCHECKConstraintonALTERTABLE
如果在表已存在的情况下为"Id_P"列创建CHECK约束,请使用下面的SQL:ALTERTABLEPersons
ADDCHECK(Id_P>0)
如果需要命名CHECK约束,以及为多个列定义CHECK约束,请使用下面的SQL语法:ALTERTABLEPersons
ADDCONSTRAINTchk_PersonCHECK(Id_P>0ANDCity='Sandnes')
撤销CHECK约束
如需撤销CHECK约束,请使用下面的SQL:ALTERTABLEPersons
DROPCONSTRAINTchk_Person
SQLDEFAULT约束
DEFAULT约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新纪录。
SQLDEFAULTConstraintonCREATETABLE
下面的SQL在"Persons"表创建时为"City"列创建DEFAULT约束:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),
Addressvarchar(255),Cityvarchar(255)DEFAULT'Sandnes')通过使用类似GETDATE()这样的函数,DEFAULT约束也可以用于插入系统值:
CREATETABLEOrders(Id_OintNOTNULL,OrderNointN
OTNULL,Id_Pint,OrderDatedateDEFAULTGETDATE())
SQLDEFAULTConstraintonALTERTABLE
如果在表已存在的情况下为"City"列创建DEFAULT约束,请使用下面的SQL:ALTERTABLEPersonsALTERCOLUMNCitySETDEFAULT'SANDNES'
撤销DEFAULT约束
如需撤销DEFAULT约束,请使用下面的SQL:ALTERTABLEPersonsALTERCOLUMNCityDROPDEFAULT
CREATEINDEX语句用于在表中创建索引。语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
索引
您可以在表中创建索引,以便更加快速高效地查询数据。用户无法看到索引,它们只能被用来加速搜索/查询。注释:注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
SQLCREATEINDEX语法在表上创建一个简单的索引。允许使用重复的值:
CREATEINDEXindex_nameONtable_name(column_name)注释:注释:"column_name"规定需要索引的列。
SQLCREATEUNIQUEINDEX语法在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATEUNIQUEINDEXindex_nameONtable_name(column_name)
CREATEINDEX实例
本例会创建一个简单的索引,名为"PersonIndex",在Person表的LastName列:
CREATEINDEXPersonIndexONPerson(LastName)如果您希望以降序降序索引某个列中的值,您可以在列名称之后添加保留字DESC:降序
CREATEINDEXPersonIndexONPerson(LastNameDESC)假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATEINDEXPersonIndexONPerson(LastName,FirstName)
SQL撤销索引、表以及数据库撤销索引、
语句,可以轻松地删除索引、表和数据库。通过使用DROP语句,可以轻松地删除索引、表和数据库。
SQLDROPINDEX语句
我们可以使用DROPINDEX命令删除表格中的索引。
DROPINDEXtable_name.index_name
SQLDROPTABLE语句
DROPTABLE语句用于删除表(表的结构、属性以及索引也会被删除):
DROPTABLE表名称
SQLDROPDATABASE语句
DROPDATABASE语句用于删除数据库:
DROPDATABASE数据库名称
SQLTRUNCATETABLE语句
如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?请使用TRUNCATETABLE命令(仅仅删除表格中的数据):
TRUNCATETABLE表名称
SQLAUTOINCREMENT字段
Auto-increment会在新纪录插入表中时生成一个唯一的数字。会在新纪录插入表中时生成一个唯一的数字。生成一个唯一的数字我们通常希望在每次插入新纪录时,自动地创建主键
字段的值。我们可以在表中创建一个auto-increment字段。
用于SQLServer的语法
下列SQL语句把"Persons"表中的"P_Id"列定义为auto-increment主键:
CREATETABLEPersons(
P_IdintPRIMARYKEYIDENTITY,
LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))MSSQL使用IDENTITY关键字来执行auto-increment任务。默认地,IDENTITY的开始值是1,每条新纪录递增1。要规定"P_Id"列以20起始且递增10,请把identity改为IDENTITY(20,10)要在"Persons"表中插入新纪录,我们不必为"P_Id"列规定值(会自动添加一个唯一的值):
INSERTINTOPersons(FirstName,LastName)VALUES('Bill','Gates')上面的SQL语句会在"Persons"表中插入一条新纪录。"P_Id"会被赋予一个唯一的值。"FirstName"会被设置为"Bill","LastName"列会被设置为"Gates"。
SQLDate函数
SQL日期
当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了。在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数。
SQLServerDate函数
下面的表格列出了SQLServer中最重要的内建日期函数:函数GETDATE()DATEPART()DATEADD()DATEDIFF()CONVERT()描述返回当前日期和时间返回日期/时间的单独部分在日期中添加或减去指定的时间间隔返回两个日期之间的时间用不同的格式显示日期/时间
SQLDate数据类型
SQLServer使用下列数据类型在数据库中存储日期或日期/时间值:
????
DATE-格式YYYY-MM-DDDATETIME-格式:YYYY-MM-DDHH:MM:SSSMALLDATETIME-格式:YYYY-MM-DDHH:MM:SSTIMESTAMP-格式:唯一的数字
SQL日期处理
如果不涉及时间部分,那么我们可以轻松地比较两个日期!假设我们有下面这个"Orders"表:
OrderId1234
ProductNamecomputerprinterelectrographtelephone
OrderDate2008-12-262008-12-262008-11-122008-10-19
现在,我们希望从上表中选取OrderDate为"2008-12-26"的记录。我们使用如下SELECT语句:
SELECT*FROMOrdersWHEREOrderDate='2008-12-26'结果集:OrderId13ProductNamecomputerelectrographOrderDate2008-12-262008-12-26
现在假设"Orders"类似这样(请注意"OrderDate"列中的时间部分):OrderId1234如果我们使用上面的SELECT语句:ProductNamecomputerprinterelectrographtelephoneOrderDate2008-12-2616:23:552008-12-2610:45:262008-11-1214:12:082008-10-1912:56:10
SELECT*FROMOrdersWHEREOrderDate='2008-12-26'那么我们得不到结果。这是由于该查询不含有时间部分的日期。提示:提示:如果您希望使查询简单且更易维护,那么请不要在日期中使
用时间部分!
SQLServerGETDATE()函数
定义和用法
GETDATE()函数从SQLServer返回当前的时间和日期。
语法GETDATE()
实例
例子1使用下面的SELECT语句:
SELECTGETDATE()ASCurrentDateTime结果:CurrentDateTime2008-12-2916:25:46.635注释:注释:上面的时间部分精确到毫秒。
例子2下面的SQL创建带有日期时间列(OrderDate)的"Orders"表:
CREATETABLEOrders(OrderIdintNOTNULLPRIMARYKEY,ProductNamevarchar(50)NOTNULL,OrderDatedatetimeNOTNULLDEFAULTGETDATE())请注意,OrderDate把GETDATE()规定为默认值。结果是,当您在表中插入新行时,当前日期和时间自动插入列中。现在,我们希望在"Orders"表中插入一条记录:
INSERTINTOOrders(ProductName)VALUES('Computer')"Orders"表将成为这样:OrderIdProductNameOrderDate
1
'Computer'
2008-12-2916:25:46.635
SQLServerDATEPART()函数
定义和用法
DATEPART()函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。语法DATEPART(datepart,date)date参数是合法的日期表达式。datepart参数可以是下列的值:datepart年季度月年中的日日周星期小时分钟秒毫秒微妙纳秒缩写yy,yyyyqq,qmm,mdy,ydd,dwk,wwdw,whhmi,nss,smsmcsns
实例
假设我们有下面这个"Orders"表:OrderIdProductNameOrderDate
1我们使用如下SELECT语句:
'Computer'
2008-12-2916:25:46.635
SELECTDATEPART(yyyy,OrderDate)ASOrderYear,
DATEPART(mm,OrderDate)ASOrderMonth,DATEPART(dd,OrderDate)ASOrderDay
FROMOrdersWHEREOrderId=1结果:OrderYear2008OrderMonth12OrderDay29
SQLServerDATEADD()函数
定义和用法
DATEADD()函数在日期中添加或减去指定的时间间隔。
语法DATEADD(datepart,number,date)date参数是合法的日期表达式。number是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
实例
假设我们有下面这个"Orders"表:OrderId1ProductName'Computer'OrderDate2008-12-2916:25:46.635
现在,我们希望向"OrderDate"添加2天,这样就可以找到付款日期。我们使用如下SELECT语句:
SELECTOrderId,DATEADD(day,2,OrderDate)ASOrderPayDateFROMOrders结果:
OrderId1
OrderPayDate2008-12-3116:25:46.635
SQLServerDATEDIFF()函数
定义和用法
DATEDIFF()函数返回两个日期之间的天数。
语法DATEDIFF(datepart,startdate,enddate)startdate和enddate参数是合法的日期表达式。
实例
例子1使用如下SELECT语句:
SELECTDATEDIFF(day,'2008-12-29','2008-12-30')ASDiffDate结果:DiffDate1例子2使用如下SELECT语句:
SELECTDATEDIFF(day,'2008-12-30','2008-12-29')ASDiffDate结果:DiffDate-1
SQLServerCONVERT()函数
定义和用法
CONVERT()函数是把日期转换为新数据类型的通用函数。CONVERT()函
数可以用不同的格式显示日期/时间数据。
语法CONVERT(data_type(length),data_to_be_converted,style)data_type(length)规定目标数据类型(带有可选的长度)。data_to_be_converted含有需要转换的值。style规定日期/时间的输出格式。可以使用的style值:StyleID100或者0101102103104105106107108109或者9110111112113或者13114120或者20121或者21126Style格式monddyyyyhh:miAM(或者PM)mm/dd/yyyy.mm.dddd/mm/yydd.mm.yydd-mm-yyddmonyyMondd,yyhh:mm:ssmonddyyyyhh:mi:ss:mmmAM(或者PM)mm-dd-yyyy/mm/ddyymmddddmonyyyyhh:mm:ss:mmm(24h)hh:mi:ss:mmm(24h)yyyy-mm-ddhh:mi:ss(24h)yyyy-mm-ddhh:mi:ss.mmm(24h)yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130131
ddmonyyyyhh:mi:ss:mmmAMdd/mm/yyhh:mi:ss:mmmAM
实例
下面的脚本使用CONVERT()函数来显示不同的格式。我们将使用GETDATE()函数来获得当前的日期/时间:
CONVERT(VARCHAR(19),GETDATE())CONVERT(VARCHAR(10),GETDATE(),110)CONVERT(VARCHAR(11),GETDATE(),106)CONVERT(VARCHAR(24),GETDATE(),113)结果类似:
Dec29200811:45PM12-29-200829Dec0829Dec200816:25:46.635
SQLNULL值
NULL值是遗漏的未知数据。值是遗漏的未知数据。默认地,表的列可以存放NULL值。默认地,操作符。本章讲解ISNULL和ISNOTNULL操作符。
SQLNULL值
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新纪录或更新已有的记录。这意味着该字段将以NULL值保存。NULL值的处理方式与其他值不同。NULL用作未知的或不适用的值的占位符。注释:注释:无法比较NULL和0;它们是不等价的。
SQL的NULL值处理
请看下面的"Persons"表:IdLastNameFirstNameAddressCity
123
AdamsBushCarter
JohnGeorgeThomasFifthAvenue
LondonNewYorkBeijing
假如"Persons"表中的"Address"列是可选的。这意味着如果在"Address"列插入一条不带值的记录,"Address"列会使用NULL值保存。那么我们如何测试NULL值呢?无法使用比较运算符来测试NULL值,比如=,<,或者<>。我们必须使用ISNULL和ISNOTNULL操作符。
SQLISNULL
我们如何仅仅选取在"Address"列中带有NULL值的记录呢?我们必须使用ISNULL操作符:
SELECTLastName,FirstName,AddressFROMPersonsWHEREAddressISNULL结果集:LastNameAdamsCarterFirstNameJohnThomasAddress
提示:提示:请始终使用ISNULL来查找NULL值。
SQLISNOTNULL
我们如何选取在"Address"列中不带有NULL值的记录呢?我们必须使用ISNOTNULL操作符:
SELECTLastName,FirstName,AddressFROMPersonsWHEREAddressISNOTNULL结果集:LastNameFirstNameAddress
Bush
George
FifthAvenue
SQLNULL函数
SQLISNULL()、NVL()、IFNULL()和COALESCE()函数、、
请看下面的"Products"表:
P_Id123ProductNamecomputerprintertelephoneUnitPrice699365280UnitsInStock253615957UnitsOnOrder15
假如"UnitsOnOrder"是可选的,而且可以包含NULL值。我们使用如下SELECT语句:
SELECTProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)FROMProducts在上面的例子中,如果有"UnitsOnOrder"值是NULL,那么结果是NULL。微软的ISNULL()函数用于规定如何处理NULL值。NVL(),IFNULL()和COALESCE()函数也可以达到相同的结果。在这里,我们希望NULL值为0。下面,如果"UnitsOnOrder"是NULL,则不利于计算,因此如果值是NULL则ISNULL()返回0。
SQLServer/MSAccessSELECTProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))FROMProducts
SQLServer数据类型
Character字符串:字符串:数据类型描述存储
char(n)varchar(n)varchar(max)textUnicode字符串:字符串:数据类型nchar(n)nvarchar(n)nvarchar(max)ntextBinary类型:类型:数据类型bitbinary(n)varbinary(n)varbinary(max)imageNumber类型:类型:数据类型tinyintsmallintintbigint描述描述描述
固定长度的字符串。最多8,000个字符。可变长度的字符串。最多8,000个字符。可变长度的字符串。最多1,073,741,824个字符。可变长度的字符串。最多2GB字符数据。
n
存储固定长度的Unicode数据。最多4,000个字符。可变长度的Unicode数据。最多4,000个字符。可变长度的Unicode数据。最多536,870,912个字符。可变长度的Unicode数据。最多2GB字符数据。
存储允许0、1或NULL固定长度的二进制数据。最多8,000字节。可变长度的二进制数据。最多8,000字节。可变长度的二进制数据。最多2GB字节。可变长度的二进制数据。最多2GB。
存储允许从0到255的所有数字。允许从-32,768到32,767的所有数字。允许从-2,147,483,648到2,147,483,647的所有数字。允许介于-9,223,372,036,854,775,808和9,223,372,036,854,775,807之间的所有数字。1字节2字节4字节8字节
decimal(p,s)
固定精度和比例的数字。允许从-10^38+1到10^38-1之间的数字。p参数指示可以存储的最大位数(小数点左侧和右侧)。p必须是1到38之间的值。默认是18。s参数指示小数点右侧存储的最大位数。s必须是0到p之间的值。默认是0。
5-17字节
numeric(p,s)
固定精度和比例的数字。允许从-10^38+1到10^38-1之间的数字。p参数指示可以存储的最大位数(小数点左侧和右侧)。p必须是1到38之间的值。默认是18。s参数指示小数点右侧存储的最大位数。s必须是0到p之间的值。默认是0。
5-17字节
smallmoneymoney
介于-214,748.3648和214,748.3647之间的货币数据。介于-922,337,203,685,477.5808和922,337,203,685,477.5807
之间的货币数据。从-1.79E+308到1.79E+308的浮动精度数字数据。参数n指示该字段保存4字节还是8字节。float(24)保存4字节,而float(53)保存8字节。n的默认值是53。从-3.40E+38到3.40E+38的浮动精度数字数据。
4字节8字节4或8字节
float(n)
realDate类型:类型:数据类型datetimedatetime2smalldatetimedatetimedatetimeoffsettimestamp描述
4字节
存储8bytes6-8bytes4bytes3bytes3-5bytes8-10bytes
从1753年1月1日到9999年12月31日,精度为3.33毫秒。从1753年1月1日到9999年12月31日,精度为100纳秒。从1900年1月1日到2079年6月6日,精度为1分钟。仅存储日期。从0001年1月1日到9999年12月31日。仅存储时间。精度为100纳秒。与datetime2相同,外加时区偏移。存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp基于内部时钟,不对应真实时间。每个表只能有一个timestamp变量。
其他数据类型:其他数据类型:数据类型描述
sql_variantuniqueidentifierxmlcursortable
存储最多8,000字节不同数据类型的数据,除了text、ntext以及timestamp。存储全局标识符(GUID)。存储XML格式化数据。最多2GB。存储对用于数据库操作的指针的引用。存储结果集,供稍后处理。
SQL函数
拥有很多可用于计数和计算的内建函数。拥有很多可用于计数和计算的内建函数。
函数的语法
内建SQL函数的语法是:
SELECTfunction(列)FROM表
函数的类型
在SQL中,基本的函数类型和种类有若干种。函数的基本类型是:
??
Aggregate函数Scalar函数
合计函数(合计函数(Aggregatefunctions))
Aggregate函数的操作面向一系列的值,并返回一个单一的值。注释:注释:如果在SELECT语句的项目列表中的众多其它表达式中使用SELECT语句,则这个SELECT必须使用GROUPBY语句!
在SQLServer中的合计函数函数AVG(column)BINARY_CHECKSUMCHECKSUMCHECKSUM_AGGCOUNT(column)返回某列的行数(不包括NULL值)描述Returnstheaveragevalue
COUNT(*)COUNT(DISTINCTcolumn)FIRST(column)LAST(column)MAX(column)MIN(column)STDEV(column)STDEVP(column)SUM(column)VAR(column)VARP(column)
返回被选行数返回相异结果的数目返回在指定的域中第一个记录的值(SQLServer2000不支持)返回在指定的域中最后一个记录的值(SQLServer2000不支持)返回某列的最高值返回某列的最低值
返回某列的总和
SQLScalarfunctions
SQLscalarfunctionsreturnasinglevalue,basedontheinputvalue.Usefulscalarfunctions:
???????
UCASE()-ConvertsafieldtouppercaseLCASE()-ConvertsafieldtolowercaseMID()-Extractcharactersfromatextfi
eldLEN()-ReturnsthelengthofatextfieldROUND()-RoundsanumericfieldtothenumberofdecimalsspecifiedNOW()-ReturnsthecurrentsystemdateandtimeFORMAT()-Formatshowafieldistobedisplayed
Tip:Theaggregatefunctionsandthescalarfunctionswillbeexplainedindetailsinthenextchapters.
SQLAVG函数
定义和用法
AVG函数返回数值列的平均值。NULL值不包括在计算中。
SQLAVG()语法
SELECTAVG(column_name)FROMtable_name
例子1现在,我们希望找到OrderPrice值高于OrderPrice平均值的客户。我们使用如下SQL语句:
SELECTCustomerFROMOrdersWHEREOrderPrice>(SELECTAVG(OrderPrice)FROMOrders)
SQLCOUNT()函数
COUNT()函数返回匹配指定条件的行数。函数返回匹配指定条件的行数。
SQLCOUNT()语法
SQLCOUNT(column_name)语法COUNT(column_name)函数返回指定列的值的数目(NULL不计入):
SELECTCOUNT(column_name)FROMtable_name
SQLCOUNT(*)语法COUNT(*)函数返回表中的记录数:
SELECTCOUNT(*)FROMtable_name
SQLCOUNT(DISTINCTcolumn_name)语法COUNT(DISTINCTcolumn_name)函数返回指定列的不同值的数目:
SELECTCOUNT(DISTINCTcolumn_name)FROMtable_name注释:注释:COUNT(DISTINCT)适用于ORACLE和MicrosoftSQLServer,但是无法用于MicrosoftAccess。
SQLCOUNT(DISTINCTcolumn_name)实例
现在,我们希望计算"Orders"表中不同客户的数目。我们使用如下SQL语句:
SELECTCOUNT(DISTINCTCustomer)ASNumberOfCustomersFROMOrders
SQLFIRST()函数
FIRST()函数返回指定的字段中第一个记录的值。提示:提示:可使用ORDERBY语句对记录进行排序。
SQLFIRST()语法SELECTFIRST(column_name)FROMtable_name
SQLFIRST()实例
我们拥有下面这个"Orders"表:O_Id123456OrderDate2008/12/292008/11/232008/10/052008/09/282008/08/062008/07/21OrderPrice100016007003002000100CustomerBushCarterBushBushAdamsCarter
现在,我们希望查找"OrderPrice"列的第一个值。我们使用如下SQL语句:
SELECTFIRST(OrderPrice)ASFirstOrderPriceFROMOrders结果集类似这样:FirstOrderPrice1000
SQLLAST()函数
LAST()函数返回指定的字段中最后一个记录的值。
提示:提示:可使用ORDERBY语句对记录进行排序。
SQLLAST()语法SELECTLAST(column_name)FROMtable_name
SQLLAST()实例
现在,我们希望查找"OrderPrice"列的最后一个值。我们使用如下SQL语句:
SELECTLAST(OrderPrice)ASLastOrderPriceFROMOrders结果集类似这样:LastOrderPrice100
SQLMAX()函数
MAX函数返回一列中的最大值。NULL值不包括在计算中。
SQLMAX()语法SELECTMAX(column_name)FROMtable_name注释:注释:MIN和MAX也可用于文本列,以获得按字母顺序排列的最高或最低值。
SQLMAX()实例
现在,我们希望查找"OrderPrice"列的最大值。我们使用
如下SQL语句:
SELECTMAX(OrderPrice)ASLargestOrderPriceFROMOrders结果集类似这样:LargestOrderPrice2000
SQLMIN()函数
MIN函数返回一列中的最小值。NULL值不包括在计算中。
SQLMIN()语法SELECTMIN(column_name)FROMtable_name注释:注释:MIN和MAX也可用于文本列,以获得按字母顺序排列的最高或最低值。
SQLMIN()实例
现在,我们希望查找"OrderPrice"列的最小值。我们使用如下SQL语句:
SELECTMIN(OrderPrice)ASSmallestOrderPriceFROMOrders结果集类似这样:SmallestOrderPrice100
SQLSUM()函数
SUM函数返回数值列的总数(总额)。
SQLSUM()语法SELECTSUM(column_name)FROMtable_name
SQLSUM()实例
现在,我们希望查找"OrderPrice"字段的总数。我们使用如下SQL语句:
SELECTSUM(OrderPrice)ASOrderTotalFROMOrders结果集类似这样:OrderTotal5700
SQLGROUPBY语句
语句。合计函数(比如SUM)常常需要添加GROUPBY语句。比如
GROUPBY语句
GROUPBY语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SQLGROUPBY语法SELECTcolumn_name,aggregate_function(column_name)FROMtable_nameWHEREcolumn_nameoperatorvalueGROUPBYcolumn_name
SQLGROUPBY实例
我们拥有下面这个"Orders"表:O_Id123456OrderDate2008/12/292008/11/232008/10/052008/09/282008/08/062008/07/21OrderPrice100016007003002000100CustomerBushCarterBushBushAdamsCarter
现在,我们希望查找每个客户的总金额(总订单)。我们想要使用GROUPBY语句对客户进行组合。我们使用下列SQL语句:
SELECTCustomer,SUM(OrderPrice)FROMOrdersGROUPBYCustomer结果集类似这样:CustomerBushSUM(OrderPrice)2000
CarterAdams
17002000
GROUPBY一个以上的列
我们也可以对一个以上的列应用GROUPBY语句,就像这样:
SELECTCustomer,OrderDate,SUM(OrderPrice)FROMOrdersGROUPBYCustomer,OrderDate
SQLHAVING子句
HAVING子句
在SQL中增加HAVING子句原因是,WHERE关键字无法与合计函数一起使用。
SQLHAVING语法SELECTcolumn_name,aggregate_function(column_name)FROMtable_nameWHEREcolumn_nameoperatorvalueGROUPBYcolumn_nameHAVINGaggregate_function(column_name)operatorvalue
SQLHAVING实例
我们拥有下面这个"Orders"表:O_Id123456OrderDate2008/12/292008/11/232008/10/052008/09/282008/08/062008/07/21OrderPrice100016007003002000100CustomerBushCarterBushBushAdamsCarter
现在,我们希望查找订单总金额少于2000的客户。我们使用如下SQL语句:
SELECTCustomer,SUM(OrderPrice)FROMOrdersGROUPBYCustomerHAVINGSUM(OrderPrice)<2000结果集类似:CustomerCarterSUM(OrderPrice)1700
现在我们希望查找客户"Bush"或"Adams"拥有超过1500的订单总金额。我们在SQL语句中增加了一个普通的WHERE子句:
SELECTCust
omer,SUM(OrderPrice)FROMOrdersWHERECustomer='Bush'ORCustomer='Adams'GROUPBYCustomerHAVINGSUM(OrderPrice)>1500结果集:CustomerBushAdamsSUM(OrderPrice)20002000
SQLUCASE()函数
UCASE函数把字段的值转换为大写。
SQLUCASE()语法SELECTUCASE(column_name)FROMtable_name
SQLUCASE()实例
我们拥有下面这个"Persons"表:Id12LastNameAdamsBushFirstNameJohnGeorgeAddressOxfordStreetFifthAvenueCityLondonNewYork
3
Carter
Thomas
ChanganStreet
Beijing
现在,我们希望选取"LastName"和"FirstName"列的内容,然后把"LastName"列转换为大写。我们使用如下SQL语句:
SELECTUCASE(LastName)asLastName,FirstNameFROMPersons结果集类似这样:LastNameADAMSBUSHCARTERFirstNameJohnGeorgeThomas
SQLLCASE()函数
LCASE函数把字段的值转换为小写。
SQLLCASE()语法SELECTLCASE(column_name)FROMtable_name现在,我们希望选取"LastName"和"FirstName"列的内容,然后把"LastName"列转换为小写。我们使用如下SQL语句:
SELECTLCASE(LastName)asLastName,FirstNameFROMPersons
SQLMID()函数
MID函数用于从文本字段中提取字符。
SQLMID()语法SELECTMID(column_name,start[,length])FROMtable_name
参数
描述
column_namestartlength
必需。要提取字符的字段。必需。规定开始位置(起始值是1)。可选。要返回的字符数。如果省略,则MID()函数返回剩余文本。
SQLMID()实例
我们拥有下面这个"Persons"表:Id123LastNameAdamsBushCarterFirstNameJohnGeorgeThomasAddressOxfordStreetFifthAvenueChanganStreetCityLondonNewYorkBeijing
现在,我们希望从"City"列中提取前3个字符。我们使用如下SQL语句:
SELECTMID(City,1,3)asSmallCityFROMPersons结果集类似这样:SmallCityLonNewBei
SQLLEN()函数
LEN函数返回文本字段中值的长度。
SQLLEN()语法SELECTLEN(column_name)FROMtable_name
SQLLEN()实例
我们拥有下面这个"Persons"表:IdLastNameFirstNameAddressCity
123
AdamsBushCarter
JohnGeorgeThomas
OxfordStreetFifthAvenueChanganStreet
LondonNewYorkBeijing
现在,我们希望取得"City"列中值的长度。我们使用如下SQL语句:
SELECTLEN(City)asLengthOfAddressFROMPersons结果集类似这样:LengthOfCity687
SQLROUND()函数
ROUND函数用于把数值字段舍入为指定的小数位数。
SQLROUND()语法SELECTROUND(column_name,decimals)FROMtable_name
参数column_namedecimals
描述必需。要舍入的字段。必需。规定要返回的小数位数。
SQLROUND()实例
我们拥有下面这个"Products"表:Prod_Id12ProductNamegoldsilverUnit1000g1000gUnitPrice32.3511.56
3
copper
1000g
6.85
现在,我们希望把名称和价格舍入为最接近的整数。我们使用如下SQL语句:
SELECTProductName,ROUND(UnitPrice,0)asUnitP
riceFROMProducts结果集类似这样:ProductNamegoldsilvercopperUnitPrice32127
FORMAT()函数
FORMAT函数用于对字段的显示进行格式化。
SQLFORMAT()语法SELECTFORMAT(column_name,format)FROMtable_name
参数column_nameformat
描述必需。要格式化的字段。必需。规定格式。
SQL语句
语句AND/OR语法SELECTcolumn_name(s)FROMtable_nameWHEREconditionAND|ORconditionALTERTABLEtable_nameADDcolumn_namedatatype
ALTERTABLE(addcolumn)
ALTERTABLE(dropcolumn)
ALTERTABLEtable_nameDROPCOLUMNcolumn_nameSELECTcolumn_nameAScolumn_aliasFROMtable_nameSELECTcolumn_nameFROMtable_nameAStable_aliasSELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue2CREATEDATABASEdatabase_nameCREATEINDEXindex_nameONtable_name(column_name)CREATETABLEtable_name(column_name1data_type,column_name2data_type,.......)CREATEUNIQUEINDEXindex_nameONtable_name(column_name)CREATEVIEWview_nameASSELECTcolumn_name(s)FROMtable_nameWHEREconditionDELETEFROMtable_name(Note:Deletestheentiretable!!)orDELETEFROMtable_nameWHEREcondition
AS(aliasforcolumn)
AS(aliasfortable)
BETWEEN
CREATEDATABASECREATEINDEX
CREATETABLE
CREATEUNIQUEINDEX
CREATEVIEW
DELETEFROM
DROPDATABASEDROPINDEXDROPTABLEGROUPBY
DROPDATABASEdatabase_nameDROPINDEXtable_name.index_nameDROPTABLEtable_nameSELECTcolumn_name1,SUM(column_name2)FROMtable_nameGROUPBYcolumn_name1SELECTcolumn_name1,SUM(column_name2)FROMtable_nameGROUPBYcolumn_name1HAVINGSUM(column_name2)conditionvalue
HAVING
IN
SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameIN(value1,value2,..)INSERTINTOtable_nameVALUES(value1,value2,....)orINSERTINTOtable_name(column_name1,column_name2,...)VALUES(value1,value2,....)
INSERTINTO
LIKE
SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpatternSELECTcolumn_name(s)FROMtable_nameORDERBYcolumn_name[ASC|DESC]SELECTcolumn_name(s)FROMtable_nameSELECT*FROMtable_nameSELECTDISTINCTcolumn_name(s)FROMtable_nameSELECT*INTOnew_table_nameFROMoriginal_table_nameorSELECTcolumn_name(s)INTOnew_table_nameFROMoriginal_table_name
ORDERBY
SELECTSELECT*SELECTDISTINCTSELECTINTO(usedtocreatebackupcopiesoftables)
TRUNCATETABLE(deletesonlythedatainsidethetable)UPDATE
TRUNCATETABLEtable_nameUPDATEtable_nameSETcolumn_name=new_value[,column_name=new_value]WHEREcolumn_name=some_valueSELECTcolumn_name(s)FROMtable_nameWHEREcondition
WHERE