SQL高级超详细的SQL语言学习资料私人收藏DOC.docx
《SQL高级超详细的SQL语言学习资料私人收藏DOC.docx》由会员分享,可在线阅读,更多相关《SQL高级超详细的SQL语言学习资料私人收藏DOC.docx(69页珍藏版)》请在冰点文库上搜索。
SQL高级超详细的SQL语言学习资料私人收藏DOC
SQL高级
SQLTOP子句
∙PreviousPage
∙NextPage
TOP子句
TOP子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP子句是非常有用的。
注释:
并非所有的数据库系统都支持TOP子句。
SQLServer的语法:
SELECTTOPnumber|percentcolumn_name(s)
FROMtable_name
MySQL和Oracle中的SQLSELECTTOP是等价的
MySQL语法
SELECTcolumn_name(s)
FROMtable_name
LIMITnumber
例子
SELECT*
FROMPersons
LIMIT5
Oracle语法
SELECTcolumn_name(s)
FROMtable_name
WHEREROWNUM<=number
例子
SELECT*
FROMPersons
WHEREROWNUM<=5
原始的表(用在例子中的):
Persons表:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
4
Obama
Barack
PennsylvaniaAvenue
Washington
SQLTOP实例
现在,我们希望从上面的"Persons"表中选取头两条记录。
我们可以使用下面的SELECT语句:
SELECTTOP2*FROMPersons
结果:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
SQLTOPPERCENT实例
现在,我们希望从上面的"Persons"表中选取50%的记录。
我们可以使用下面的SELECT语句:
SELECTTOP50PERCENT*FROMPersons
结果:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
SQLLIKE操作符
∙PreviousPage
∙NextPage
LIKE操作符用于在WHERE子句中搜索列中的指定模式。
LIKE操作符
LIKE操作符用于在WHERE子句中搜索列中的指定模式。
SQLLIKE操作符语法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_nameLIKEpattern
原始的表(用在例子中的):
Persons表:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
LIKE操作符实例
例子1
现在,我们希望从上面的"Persons"表中选取居住在以"N"开始的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'N%'
提示:
"%"可用于定义通配符(模式中缺少的字母)。
结果集:
Id
LastName
FirstName
Address
City
2
Bush
George
FifthAvenue
NewYork
例子2
接下来,我们希望从"Persons"表中选取居住在以"g"结尾的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'%g'
结果集:
Id
LastName
FirstName
Address
City
3
Carter
Thomas
ChanganStreet
Beijing
例子3
接下来,我们希望从"Persons"表中选取居住在包含"lon"的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'%lon%'
结果集:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
例子4
通过使用NOT关键字,我们可以从"Persons"表中选取居住在不包含"lon"的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityNOTLIKE'%lon%'
结果集:
Id
LastName
FirstName
Address
City
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
SQL通配符
∙PreviousPage
∙NextPage
在搜索数据库中的数据时,您可以使用SQL通配符。
SQL通配符
在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。
SQL通配符必须与LIKE运算符一起使用。
在SQL中,可使用以下通配符:
通配符
描述
%
替代一个或多个字符
_
仅替代一个字符
[charlist]
字符列中的任何单一字符
[^charlist]
或者
[!
charlist]
不在字符列中的任何单一字符
原始的表(用在例子中的):
Persons表:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
使用%通配符
例子1
现在,我们希望从上面的"Persons"表中选取居住在以"Ne"开始的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'Ne%'
结果集:
Id
LastName
FirstName
Address
City
2
Bush
George
FifthAvenue
NewYork
例子2
接下来,我们希望从"Persons"表中选取居住在包含"lond"的城市里的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'%lond%'
结果集:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
使用_通配符
例子1
现在,我们希望从上面的"Persons"表中选取名字的第一个字符之后是"eorge"的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHEREFirstNameLIKE'_eorge'
结果集:
Id
LastName
FirstName
Address
City
2
Bush
George
FifthAvenue
NewYork
例子2
接下来,我们希望从"Persons"表中选取的这条记录的姓氏以"C"开头,然后是一个任意字符,然后是"r",然后是任意字符,然后是"er":
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERELastNameLIKE'C_r_er'
结果集:
Id
LastName
FirstName
Address
City
3
Carter
Thomas
ChanganStreet
Beijing
使用[charlist]通配符
例子1
现在,我们希望从上面的"Persons"表中选取居住的城市以"A"或"L"或"N"开头的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'[ALN]%'
结果集:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
例子2
现在,我们希望从上面的"Persons"表中选取居住的城市不以"A"或"L"或"N"开头的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERECityLIKE'[!
ALN]%'
结果集:
Id
LastName
FirstName
Address
City
3
Carter
Thomas
ChanganStreet
Beijing
SQLIN操作符
∙PreviousPage
∙NextPage
IN操作符
IN操作符允许我们在WHERE子句中规定多个值。
SQLIN语法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_nameIN(value1,value2,...)
原始的表(在实例中使用:
)
Persons表:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
IN操作符实例
现在,我们希望从上表中选取姓氏为Adams和Carter的人:
我们可以使用下面的SELECT语句:
SELECT*FROMPersons
WHERELastNameIN('Adams','Carter')
结果集:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
3
Carter
Thomas
ChanganStreet
Beijing
SQLBETWEEN操作符
∙PreviousPage
∙NextPage
BETWEEN操作符在WHERE子句中使用,作用是选取介于两个值之间的数据范围。
BETWEEN操作符
操作符BETWEEN...AND会选取介于两个值之间的数据范围。
这些值可以是数值、文本或者日期。
SQLBETWEEN语法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_name
BETWEENvalue1ANDvalue2
原始的表(在实例中使用:
)
Persons表:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
4
Gates
Bill
Xuanwumen10
Beijing
BETWEEN操作符实例
如需以字母顺序显示介于"Adams"(包括)和"Carter"(不包括)之间的人,请使用下面的SQL:
SELECT*FROMPersons
WHERELastName
BETWEEN'Adams'AND'Carter'
结果集:
Id
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
重要事项:
不同的数据库对BETWEEN...AND操作符的处理方式是有差异的。
某些数据库会列出介于"Adams"和"Carter"之间的人,但不包括"Adams"和"Carter";某些数据库会列出介于"Adams"和"Carter"之间并包括"Adams"和"Carter"的人;而另一些数据库会列出介于"Adams"和"Carter"之间的人,包括"Adams",但不包括"Carter"。
所以,请检查你的数据库是如何处理BETWEEN....AND操作符的!
实例2
如需使用上面的例子显示范围之外的人,请使用NOT操作符:
SELECT*FROMPersons
WHERELastName
NOTBETWEEN'Adams'AND'Carter'
结果集:
Id
LastName
FirstName
Address
City
3
Carter
Thomas
ChanganStreet
Beijing
4
Gates
Bill
Xuanwumen10
Beijing
SQLAlias(别名)
∙PreviousPage
∙NextPage
通过使用SQL,可以为列名称和表名称指定别名(Alias)。
SQLAlias
表的SQLAlias语法
SELECTcolumn_name(s)
FROMtable_name
ASalias_name
列的SQLAlias语法
SELECTcolumn_nameASalias_name
FROMtable_name
Alias实例:
使用表名称别名
假设我们有两个表分别是:
"Persons"和"Product_Orders"。
我们分别为它们指定别名"p"和"po"。
现在,我们希望列出"JohnAdams"的所有定单。
我们可以使用下面的SELECT语句:
SELECTpo.OrderID,p.LastName,p.FirstName
FROMPersonsASp,Product_OrdersASpo
WHEREp.LastName='Adams'ANDp.FirstName='John'
不使用别名的SELECT语句:
SELECTProduct_Orders.OrderID,Persons.LastName,Persons.FirstName
FROMPersons,Product_Orders
WHEREPersons.LastName='Adams'ANDPersons.FirstName='John'
从上面两条SELECT语句您可以看到,别名使查询程序更易阅读和书写。
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
∙PreviousPage
∙NextPage
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
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
不同的SQLJOIN
除了我们在上面的例子中使用的INNERJOIN(内连接),我们还可以使用其他几种连接。
下面列出了您可以使用的JOIN类型,以及它们之间的差异。
∙JOIN:
如果表中有至少一个匹配,则返回行
∙LEFTJOIN:
即使右表中没有匹配,也从左表返回所有的行
∙RIGHTJOIN:
即使左表中没有匹配,也从右表返回所有的行
∙FULLJOIN:
只要其中一个表中存在匹配,就返回行
SQLINNERJOIN关键字
∙PreviousPage
∙NextPage
SQLINNERJOIN关键字
在表中存在至少一个匹配时,INNERJOIN关键字返回行。
INNERJOIN关键字语法
SELECTcolumn_name(s)
FROMtable_name1
INNERJOINtable_name2
ONtable_name1.column_name=table_name2.column_name
注释:
INNERJOIN与JOIN是相同的。
原始的表(用在例子中的):
"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
内连接(INNERJOIN)实例
现在,我们希望列出所有人的定购。
您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
INNERJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
结果集:
LastName
Fi