select from where 格式详解

来源:互联网 发布:淘宝市场容量分析 编辑:程序博客网 时间:2024/05/21 17:00

一、

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

0 0