您的位置:首页 > 数据库 > Oracle

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

句(其中

表示百分比)
 
例:返回
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 
子句指定查询条件
 
 

比较运算符
 
比较运算符
 
含义
 

等于
 

大于
 

小于
 
>= 
大于等于
 
<= 
小于等于
 
<> 
不等于
 
!> 
不大于
 
!< 
不小于
 
例:返回
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle select