select from where 格式详解
2016-06-14 10:38
561 查看
一、
SELECT
语句的完整语法为:
SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}
FROM tableexpression[,…][IN externaldatabase]
[WHERE…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
[WITH OWNERACCESS OPTION]
说明:
用中括号
([])
括起来的部分表示是可选的,
用大括号
({})
括起来的部分是表示必须从中选择
其中的一个。
1 FROM
子句
FROM
子句指定了
SELECT
语句中字段的来源。
FROM
子句后面是包含一个或多个的表
达式
(
由逗号分开
)
,其中的表达式可为单一表名称、已保存的查询或由
INNER
JOIN
、
LEFT JOIN
或
RIGHT JOIN
得到的复合结果。
如果表或查询存储在外部数据库,
在
IN
子
句之后指明其完整路径。
例:下列
SQL
语句返回所有有定单的客户:
SELECT OrderID,Customer.customerID
FROM Orders Customers
WHERE Orders.CustomerID=Customers.CustomeersID
2 ALL
、
DISTINCT
、
DISTINCTROW
、
TOP
谓词
(1) ALL
返回满足
SQL
语句条件的所有记录。如果没有指明这个谓词,默认为
ALL
。
例:
SELECT ALL FirstName,LastName
FROM
Employees
(2) DISTINCT
如果有多个记录的选择字段的数据相同,只返回一个。
(3) DISTINCTROW
如果有重复的记录,只返回一个
(4) TOP
显示查询头尾若干记录。
也可返回记录的百分比,
这是要用
TOP N PERCENT
子
句(其中
N
表示百分比)
例:返回
5%
定货额最大的定单
SELECT TOP 5 PERCENT*
FROM [ Order Details]
ORDER BY UnitPrice*Quantity*(1-Discount) DESC
3
用
AS
子句为字段取别名
如果想为返回的列取一个新的标题,
或者,
经过对字段的计算或总结之后,
产生了一个新
的值,希望把它放到一个新的列里显示,则用
AS
保留。
例:返回
FirstName
字段取别名为
NickName
SELECT
FirstName AS NickName ,LastName ,City
FROM
Employees
例:返回新的一列显示库存价值
SELECT ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock
FROM
Products
二
.WHERE
子句指定查询条件
1
比较运算符
比较运算符
含义
=
等于
>
大于
<
小于
>=
大于等于
<=
小于等于
<>
不等于
!>
不大于
!<
不小于
例:返回
96
年
1
月的定单
SELECT OrderID, CustomerID, OrderDate
FROM Orders
WHERE OrderDate>#1/1/96# AND OrderDate<#1/30/96#
注意:
Mcirosoft JET SQL
中,日期用
„#‟
定界。日期也可以用
Datevalue()
函数来代替。在比较字
符型的数据时,要加上单引号
‟‟
,尾空格在比较中被忽略。
例:
WHERE OrderDate>#96-1-1#
也可以表示为:
WHERE
OrderDate>Datevalue(„1/1/96‟)
使用
NOT
表达式求反。
例:查看
96
年
1
月
1
日以后的定单
WHERE Not OrderDate<=#1/1/96#
2
范围(
BETWEEN
和
NOT BETWEEN
)
BETWEEN …AND…
运算符指定了要搜索的一个闭区间。
例:返回
96
年
1
月到
96
年
2
月的定单。
WHERE OrderDate Between #1/1/96# And #2/1/96#
3
列表(
IN
,
NOT IN
)
IN
运算符用来匹配列表中的任何一个值。
IN
子句可以代替用
OR
子句连接的一连串的条
件。
例:要找出住在
London
、
Paris
或
Berlin
的所有客户
SELECT CustomerID, CompanyName, ContactName, City
FROM Customers
WHERE City In(„London‟,‟ Paris‟,‟ Berlin‟)
4
模式匹配
(LIKE)
LIKE
运算符检验一个包含字符串数据的字段值是否匹配一指定模式。
LIKE
运算符里使用的通配符
通配符
含义
?
任何一个单一的字符
*
任意长度的字符
# 0~9
之间的单一数字
[
字符列表
]
在字符列表里的任一值
[
!字符列表
]
不在字符列表里的任一值
-
指定字符范围,两边的值分别为其上下限
例:返回邮政编码在(
171
)
555-0000
到(
171
)
555-9999
之间的客户
SELECT CustomerID ,CompanyName,City
,Phone
FROM Customers
WHERE Phone Like „(171)555
-
####‟
LIKE
运算符的一些样式及含义
样式
含义
不符合
LIKE „A*‟ A
后跟任意长度的字符
Bc,c255
LIKE‟5[*]‟ 5*5 555
LIKE‟5?5‟ 5
与
5
之间有任意一个字符
55,5wer5
LIKE‟5##5‟ 5235
,
5005 5kd5,5346
LIKE‟[a
-
z]‟ a
-z
间的任意一个字符
5,%
LIKE‟[!0
-
9]‟
非
0-9
间的任意一个字符
0,1
LIKE‟[[]‟
1,*
三
.
用
ORDER BY
子句排序结果
ORDER
子句按一个或多个(最多
16
个)字段排序查询结果,可以是升序(
ASC
)也可
以是降序(
DESC
)
,缺省是升序。
ORDER
子句通常放在
SQL
语句的最后。
ORDER
子句中定义了多个字段,则按照字段的先后顺序排序。
例:
SELECT ProductName,UnitPrice, UnitInStock
FROM
Products
ORDER BY
UnitInStock DESC , UnitPrice DESC, ProductName
ORDER BY
子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位
置号。
例:下面的语句产生与上列相同的效果。
SELECT ProductName,UnitPrice, UnitInStock
FROM
Products
ORDER BY
1 DESC , 2 DESC,3
四
.
运用连接关系实现多表查询
例:找出同一个城市中供应商和客户的名字
SELECT Customers.CompanyName, Suppliers.ComPany
.Name
FROM
Customers, Suppliers
WHERE Customers.City=Suppliers.City
例:找出产品库存量大于同一种产品的定单的数量的产品和定单
SELECT ProductName,OrderID, UnitInStock, Quantity
FROM
Products, [Order Deails]
WHERE Product.productID=[Order Details].ProductID
AND UnitsInStock>Quantity
SELECT
语句的完整语法为:
SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}
FROM tableexpression[,…][IN externaldatabase]
[WHERE…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
[WITH OWNERACCESS OPTION]
说明:
用中括号
([])
括起来的部分表示是可选的,
用大括号
({})
括起来的部分是表示必须从中选择
其中的一个。
1 FROM
子句
FROM
子句指定了
SELECT
语句中字段的来源。
FROM
子句后面是包含一个或多个的表
达式
(
由逗号分开
)
,其中的表达式可为单一表名称、已保存的查询或由
INNER
JOIN
、
LEFT JOIN
或
RIGHT JOIN
得到的复合结果。
如果表或查询存储在外部数据库,
在
IN
子
句之后指明其完整路径。
例:下列
SQL
语句返回所有有定单的客户:
SELECT OrderID,Customer.customerID
FROM Orders Customers
WHERE Orders.CustomerID=Customers.CustomeersID
2 ALL
、
DISTINCT
、
DISTINCTROW
、
TOP
谓词
(1) ALL
返回满足
SQL
语句条件的所有记录。如果没有指明这个谓词,默认为
ALL
。
例:
SELECT ALL FirstName,LastName
FROM
Employees
(2) DISTINCT
如果有多个记录的选择字段的数据相同,只返回一个。
(3) DISTINCTROW
如果有重复的记录,只返回一个
(4) TOP
显示查询头尾若干记录。
也可返回记录的百分比,
这是要用
TOP N PERCENT
子
句(其中
N
表示百分比)
例:返回
5%
定货额最大的定单
SELECT TOP 5 PERCENT*
FROM [ Order Details]
ORDER BY UnitPrice*Quantity*(1-Discount) DESC
3
用
AS
子句为字段取别名
如果想为返回的列取一个新的标题,
或者,
经过对字段的计算或总结之后,
产生了一个新
的值,希望把它放到一个新的列里显示,则用
AS
保留。
例:返回
FirstName
字段取别名为
NickName
SELECT
FirstName AS NickName ,LastName ,City
FROM
Employees
例:返回新的一列显示库存价值
SELECT ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock
FROM
Products
二
.WHERE
子句指定查询条件
1
比较运算符
比较运算符
含义
=
等于
>
大于
<
小于
>=
大于等于
<=
小于等于
<>
不等于
!>
不大于
!<
不小于
例:返回
96
年
1
月的定单
SELECT OrderID, CustomerID, OrderDate
FROM Orders
WHERE OrderDate>#1/1/96# AND OrderDate<#1/30/96#
注意:
Mcirosoft JET SQL
中,日期用
„#‟
定界。日期也可以用
Datevalue()
函数来代替。在比较字
符型的数据时,要加上单引号
‟‟
,尾空格在比较中被忽略。
例:
WHERE OrderDate>#96-1-1#
也可以表示为:
WHERE
OrderDate>Datevalue(„1/1/96‟)
使用
NOT
表达式求反。
例:查看
96
年
1
月
1
日以后的定单
WHERE Not OrderDate<=#1/1/96#
2
范围(
BETWEEN
和
NOT BETWEEN
)
BETWEEN …AND…
运算符指定了要搜索的一个闭区间。
例:返回
96
年
1
月到
96
年
2
月的定单。
WHERE OrderDate Between #1/1/96# And #2/1/96#
3
列表(
IN
,
NOT IN
)
IN
运算符用来匹配列表中的任何一个值。
IN
子句可以代替用
OR
子句连接的一连串的条
件。
例:要找出住在
London
、
Paris
或
Berlin
的所有客户
SELECT CustomerID, CompanyName, ContactName, City
FROM Customers
WHERE City In(„London‟,‟ Paris‟,‟ Berlin‟)
4
模式匹配
(LIKE)
LIKE
运算符检验一个包含字符串数据的字段值是否匹配一指定模式。
LIKE
运算符里使用的通配符
通配符
含义
?
任何一个单一的字符
*
任意长度的字符
# 0~9
之间的单一数字
[
字符列表
]
在字符列表里的任一值
[
!字符列表
]
不在字符列表里的任一值
-
指定字符范围,两边的值分别为其上下限
例:返回邮政编码在(
171
)
555-0000
到(
171
)
555-9999
之间的客户
SELECT CustomerID ,CompanyName,City
,Phone
FROM Customers
WHERE Phone Like „(171)555
-
####‟
LIKE
运算符的一些样式及含义
样式
含义
不符合
LIKE „A*‟ A
后跟任意长度的字符
Bc,c255
LIKE‟5[*]‟ 5*5 555
LIKE‟5?5‟ 5
与
5
之间有任意一个字符
55,5wer5
LIKE‟5##5‟ 5235
,
5005 5kd5,5346
LIKE‟[a
-
z]‟ a
-z
间的任意一个字符
5,%
LIKE‟[!0
-
9]‟
非
0-9
间的任意一个字符
0,1
LIKE‟[[]‟
1,*
三
.
用
ORDER BY
子句排序结果
ORDER
子句按一个或多个(最多
16
个)字段排序查询结果,可以是升序(
ASC
)也可
以是降序(
DESC
)
,缺省是升序。
ORDER
子句通常放在
SQL
语句的最后。
ORDER
子句中定义了多个字段,则按照字段的先后顺序排序。
例:
SELECT ProductName,UnitPrice, UnitInStock
FROM
Products
ORDER BY
UnitInStock DESC , UnitPrice DESC, ProductName
ORDER BY
子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位
置号。
例:下面的语句产生与上列相同的效果。
SELECT ProductName,UnitPrice, UnitInStock
FROM
Products
ORDER BY
1 DESC , 2 DESC,3
四
.
运用连接关系实现多表查询
例:找出同一个城市中供应商和客户的名字
SELECT Customers.CompanyName, Suppliers.ComPany
.Name
FROM
Customers, Suppliers
WHERE Customers.City=Suppliers.City
例:找出产品库存量大于同一种产品的定单的数量的产品和定单
SELECT ProductName,OrderID, UnitInStock, Quantity
FROM
Products, [Order Deails]
WHERE Product.productID=[Order Details].ProductID
AND UnitsInStock>Quantity
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解