SqlServer语法.docx
- 文档编号:12102637
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:59
- 大小:35.98KB
SqlServer语法.docx
《SqlServer语法.docx》由会员分享,可在线阅读,更多相关《SqlServer语法.docx(59页珍藏版)》请在冰豆网上搜索。
SqlServer语法
TOP子句用于规定要返回的记录的数目
SELECTTOPnumber|percentcolumn_name(s)
FROMtable_name
SELECTTOP2*FROMPersons
SELECTTOP50PERCENT*FROMPersons
LIKE操作符用于在WHERE子句中搜索列中的指定模式。
例子1
现在,我们希望从上面的"Persons"表中选取居住在以"N"开始的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'N%'
提示:
"%"可用于定义通配符(模式中缺少的字母)。
例子2
接下来,我们希望从"Persons"表中选取居住在以"g"结尾的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'%g'
例子3
通过使用NOT关键字,我们可以从"Persons"表中选取居住在不包含"lon"的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityNOTLIKE'%lon%'
SQL通配符
在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。
SQL通配符必须与LIKE运算符一起使用。
在SQL中,可使用以下通配符:
通配符
描述
%
替代一个或多个字符
_
仅替代一个字符
[charlist]
字符列中的任何单一字符
[^charlist]
或者
[!
charlist]
不在字符列中的任何单一字符
例子1
现在,我们希望从上面的"Persons"表中选取居住的城市不以"A"或"L"或"N"开头的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'[!
ALN]%'
IN操作符
IN操作符允许我们在WHERE子句中规定多个值。
SQLIN语法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_nameIN(value1,value2,...)
现在,我们希望从上表中选取姓氏为Adams和Carter的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERELastNameIN('Adams','Carter')
BETWEEN操作符
操作符BETWEEN...AND会选取介于两个值之间的数据范围。
这些值可以是数值、文本或者日期。
SQLBETWEEN语法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_name
BETWEENvalue1ANDvalue2
如需以字母顺序显示介于"Adams"(包括)和"Carter"(不包括)之间的人,请使用下面的SQL:
SELECT*FROMP
ersons
WHERELastName
BETWEEN'Adams'AND'Carter'
如需使用上面的例子显示范围之外的人,请使用NOT操作符:
SELECT*FROMPersons
WHERELastName
NOTBETWEEN'Adams'AND'Carter'
SQLAlias
通过使用SQL,可以为列名称和表名称指定别名(Alias)。
表的SQLAlias语法
SELECTcolumn_name(s)
FROMtable_name
ASalias_name
列的SQLAlias语法
SELECTcolumn_nameASalias_name
FROMtable_name
假设我们有两个表分别是:
"Persons"和"Product_Orders"。
我们分别为它们指定别名"p"和"po"。
现在,我们希望列出"JohnAdams"的所有定单。
我们可以使用下面的SELECT语句:
SELECTpo.OrderID,p.LastName,p.FirstName
FROMPersonsASp,Product_OrdersASpo
WHEREp.LastName='Adams'ANDp.FirstName='John'
Alias实例:
使用一个列名别名
表Persons:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
SQL:
SELECTLastNameASFamily,FirstNameASName
FROMPersons
结果:
Family
Name
Adams
John
Bush
George
Carter
Thomas
SQLjoin用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
Join和Key
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。
我们就需要执行join。
数据库中的表可通过键将彼此联系起来。
主键(PrimaryKey)是一个列,在这个列中的每一行的值都是唯一的。
在表中,每个主键的值都是唯一的。
这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
请看"Persons"表:
Id_P
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
请注意,"Id_P"列是Persons表中的的主键。
这意味着没有两行能够拥有相同的Id_P。
即使两个人的姓名完全相同,Id_P也可以区分他们。
接下来请看"Orders"表:
Id_O
OrderNo
Id_P
1
77895
3
2
44678
3
3
22456
1
4
24562
1
5
34764
65
请注意,"Id_O"列是Orders表中的的主键,同时,"Orders"表中的"Id_P"列用于引用"Persons"表中的人,而无需使用他们的确切姓名。
请留意,"Id_P"列把上面的两个表联系了起来。
引用两个表
我们可以通过引用两个表的方式,从两个表中获取数据:
谁订购了产品,并且他们订购了什么产品?
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons,Orders
WHEREPersons.Id_P=Orders.Id_P
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
SQLJOIN-使用Join
除了上面的方法,我们也可以使用关键词JOIN来从两个表中获取数据。
如果我们希望列出所有人的定购,可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
INNERJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
SQLLEFTJOIN关键字
LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
LEFTJOIN关键字语法
SELECTcolumn_name(s)
FROMtable_name1
LEFTJOINtable_name2
ONtable_name1.column_name=table_name2.column_name
注释:
在某些数据库中,LEFTJOIN称为LEFTOUTERJOIN。
原始的表(用在例子中的):
"Persons"表:
Id_P
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
"Orders"表:
Id_O
OrderNo
Id_P
1
77895
3
2
44678
3
3
22456
1
4
24562
1
5
34764
65
左连接(LEFTJOIN)实例
现在,我们希望列出所有的人,以及他们的定购-如果有的话。
您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
LEFTJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
Bush
George
SQLRIGHTJOIN关键字
RIGHTJOIN关键字会右表(table_name2)那里返回所有的行,即使在左表(table_name1)中没有匹配的行。
RIGHTJOIN关键字语法
SELECTcolumn_name(s)
FROMtable_name1
RIGHTJOINtable_name2
ONtable_name1.column_name=table_name2.column_name
注释:
在某些数据库中,RIGHTJOIN称为RIGHTOUTERJOIN。
右连接(RIGHTJOIN)实例
现在,我们希望列出所有的定单,以及定购它们的人-如果有的话。
您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
RIGHTJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
34764
RIGHTJOIN关键字会从右表(Orders)那里返回所有的行,即使在左表(Persons)中没有匹配的行。
SQLFULLJOIN关键字
只要其中某个表存在匹配,FULLJOIN关键字就会返回行。
FULLJOIN关键字语法
SELECTcolumn_name(s)
FROMtable_name1
FULLJOINtable_name2
ONtable_name1.column_name=table_name2.column_name
注释:
在某些数据库中,FULLJOIN称为FULLOUTERJOIN。
全连接(FULLJOIN)实例
现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。
您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
FULLJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
Bush
George
34764
FULLJOIN关键字会从左表(Persons)和右表(Orders)那里返回所有的行。
如果"Persons"中的行在表"Orders"中没有匹配,或者如果"Orders"中的行在表"Persons"中没有匹配,这些行同样会列出。
SQLUNION操作符
UNION操作符用于合并两个或多个SELECT语句的结果集。
请注意,UNION内部的SELECT语句必须拥有相同数量的列。
列也必须拥有相似的数据类型。
同时,每条SELECT语句中的列的顺序必须相同。
SQLUNION语法
SELECTcolumn_name(s)FROMtable_name1
UNION
SELECTcolumn_name(s)FROMtable_name2
注释:
默认地,UNION操作符选取不同的值。
如果允许重复的值,请使用UNIONALL。
SQLUNIONALL语法
SELECTcolumn_name(s)FROMtable_name1
UNIONALL
SELECTcolumn_name(s)FROMtable_name2
另外,UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。
下面的例子中使用的原始表:
Employees_China:
E_ID
E_Name
01
Zhang,Hua
02
Wang,Wei
03
Carter,Thomas
04
Yang,Ming
Employees_USA:
E_ID
E_Name
01
Adams,John
02
Bush,George
03
Carter,Thomas
04
Gates,Bill
使用UNION命令
实例
列出所有在中国和美国的不同的雇员名:
SELECTE_NameFROMEmployees_China
UNION
SELECTE_NameFROMEmployees_USA
结果
E_Name
Zhang,Hua
Wang,Wei
Carter,Thomas
Yang,Ming
Adams,John
Bush,George
Gates,Bill
注释:
这个命令无法列出在中国和美国的所有雇员。
在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。
UNION命令只会选取不同的值。
UNIONALL
UNIONALL命令和UNION命令几乎是等效的,不过UNIONALL命令会列出所有的值。
SQLStatement1
UNIONALL
SQLStatement2
使用UNIONALL命令
实例:
列出在中国和美国的所有的雇员:
SELECTE_NameFROMEmployees_China
UNIONALL
SELECTE_NameFROMEmployees_USA
结果
E_Name
Zhang,Hua
Wang,Wei
Carter,Thomas
Yang,Ming
Adams,John
Bush,George
Carter,Thomas
Gates,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,FirstName
INTOPersons_backup
FROMPersons
SQLSELECTINTO实例-带有WHERE子句
我们也可以添加WHERE子句。
下面的例子通过从"Persons"表中提取居住在"Beijing"的人的信息,创建了一个带有两个列的名为"Persons_backup"的表:
SELECTLastName,Firstname
INTOPersons_backup
FROMPersons
WHERECity='Beijing'
SQLSELECTINTO实例-被连接的表
从一个以上的表中选取数据也是可以做到的。
下面的例子会创建一个名为"Persons_Order_Backup"的新表,其中包含了从Persons和Orders两个表中取得的信息:
SELECTPersons.LastName,Orders.OrderNo
INTOPersons_Order_Backup
FROMPersons
INNERJOINOrders
ONPersons.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语句)。
我们将主要探讨以下几种约束:
∙NOTNULL
∙UNIQUE
∙PRIMARYKEY
∙FOREIGNKEY
∙CHECK
∙DEFAULT
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,
LastNa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SqlServer 语法