一般查询

阅读(4194) 标签: 语法,

连接报表DQL Server后,可通过学习本小节,做基本的查询。

取出字段 F

语法描述:

SELECT T.Fi,K.Fi,T.Fi#L...... FROM T

参数说明:

T

表名

K

外键名,或者是单外键情况下的外键字段名

Fi

字段或者外键字段,也可以是基于Fi的表达式,表达式中DQL提供的标准函数可以直接使用,如果是数据库自有的函数或关键词,函数名前加$以示区别,DQL在翻译时会原样保留

L

层函数

举例:

1

SELECT 客户ID.客户名称,回款日期,金额

FROM 回款单

WHERE 客户ID.城市编码=30101

外键指向表的字段直接作为属性引用

2

SELECT distinct 省直辖市 from 地区表

使用distinct去掉重复数据

3

SELECT top 10 客户ID from 回款单

取前10条记录中的客户ID字段值

知识点:

1) 外键属性化是指两种使用维表字段的方式:外键字段.维表字段名,如上例中的客户ID.城市编码;外键名称.维表字段名,如fk1.城市编码

2) 外键属性化方式,可以在DQL语句中任何一个地方使用,如SELECT中, WHERE条件中,分组条件中,函数中等等,在DQL中完全可以将它视为主表的字段

3) 支持深层次引用,只要在模型中建立了相应的关系,就可以一直引用下去,类似于 SELECT 表名.字段名.属性名.属性名.属性名FROM 表名

4) 支持distinct,支持别名语法

5) 支持top n,获取前n条记录

在 F 中使用函数

在字段或者外键字段中,可以使用表达式,表达式中DQL提供的标准函数可以直接使用,如果是数据库自有的函数或关键词,函数名前加$以示区别,DQL在翻译时会原样保留。

举例:

1

SELECT 年月,供应商,总金额 FROM 入库单汇总

取出年月供应商总金额字段

2

SELECT 年月,供应商.供应商名称,fk2.联系人姓名,总金额 FROM 入库单汇总

取出外键对应表的字段时,可以使用外键名称,单外键也可以用外键字段

3

SELECT  年月,供应商,总金额

FROM  入库单汇总

WHERE 年月 = YEAR($SYSDATE()) * 100 + MONTH(NOW()))

DQL提供的标准函数,可以直接使用,如NOW();数据库使用的非标准函数在函数名前面加$以示区别,DQL会原样保留,如$SYSDATE

知识点:

1) DQL的函数分为两类,一类是DQL自己的标准函数,这类函数屏蔽了不同数据库之间的差异,提供了一套统一的函数体系以供使用

2) DQL中关于带模式的表,使用前必须在元数据中定义成不带模式名的字段名称

3) DQL查询数据的基本结构与SQL相似,都采用 SELECT 字段名 FROM 表名方式

取出字段 / 外键表字段

功能介绍:

字段或同维表的字段可以直接引用,非同维表时需通过外键关系递归引用。

语法描述:

SELECT T.Fi..K.F...F@S... FROM T

参数说明:

T

表名

Fi

字段或者外键字段,也可以是基于Fi的表达式,表达式中DQL提供的标准函数可以直接使用,如果是数据库自有的函数或关键词,函数名前加$以示区别,DQL在翻译时会原样保留

K.F

外键K的字段F,同维表字段F

S

同维表表名,限定字段F在同维表S中找,找不到,在S的同维表中找

举例:

1

SELECT 订单ID, 客户ID, 雇员ID.姓名, 雇员ID.责任地区

FROM 订单

引用外键表的字段

2

SELECT订单ID, 客户ID, fk2.姓名 as 销售

FROM 订单

也可以用外键名引用外键表的字段

过滤

功能介绍:

根据条件过滤出部分记录,条件表达式中可以直接引用外键指向表的字段,可通过外键引用和递归。

语法描述:

SELECT select_list

FROM table_source

WHERE search_condition

search_condition除了常规的大于,小于,等于等单值判断,还可以写IN子句和EXISTS子句,取单列的SELECT语句常用于IN子句中。(子查询不支持引用父字段)

举例:

1

SELECT 回款日期,金额FROM 回款单

WHERE回款单ID='222'

选择回款单编号为'222'的回款记录,字符串用单引号表示

2

SELECT 回款日期,金额FROM 回款单

WHERE 客户ID.城市编码#地区=3

选出客户所在地区编码为3华北)的回款记录,直接引用外键指向表的字段

3

SELECT 回款日期,金额FROM 回款单

WHERE客户ID in ('ALFKI','ANTON')

选择客户ID'ALFKI','ANTON'的回款记录

1

SELECT 年月,客户,订单总额 FROM订单回款月客户汇总

WHERE 客户 IN (SELECT DISTINCT 客户ID

FROM 回款单

WHERE YEAR(回款日期) = 2011)

选择2011年有回款的客户的历史订单汇总信息

参数

功能介绍:

通过向DQL的过滤条件里传递不同的参数值,使其返回不同的查询结果。

语法描述:

SELECT select_list

FROM table_source

WHERE search_condition

search_condition中,使用??i表示参数值,其中?i代表第i个参数,?按前一个?i指定的i往后顺序从参数列表中读取,前面无?i,则从第一个参数开始顺序读取。传入参数个数与问号个数相等。

举例:

1

SELECT 回款日期,金额FROM 回款单

WHERE  客户ID in (?,?)

And $YEAR(回款日期) =?)

如果传给该DQL的参数是三个,分别为'ALFKI','ANTON',2011那么第一个问号的值是'ALFKI',第二个问号的值是'ANTON',第三个问号的值是2011

2

SELECT 回款日期,金额FROM 回款单

WHERE  客户ID in (?2,?)

And $YEAR(回款日期) =?1)

如果传给该DQL的参数是三个,分别为2011'ALFKI''ANTON'那么第一个问号的值是第二个参数'ALFKI',第二个问号的值是第三个参数'ANTON',第三个问号的值是第一个参数2011

知识点:

1) 默认情况下,参数的顺序与问号的顺序一一对应。

2) 可以在问号中指定使用第几个参数,形式为"?"+参数序号,参数序号从1开始。

3) 当前面的问号指定了参数顺序,后面未指定参数顺序的问号,按前面指定的参数顺序依次向后排,如上述第二个例子中 ?2,?第一个问号使用第二个参数,第二个问号使用第三个参数。

排序

功能介绍:

可以指定排序字段和排序方向,使查询结果按一定的顺序展现

语法描述:

SELECT select_list

FROM table_source

WHERE search_condition

ORDER BY order_expression[ ASC | DESC ], ......

参数说明:

order_expression

排序字段或者排序表达式

ASC

升序

DESC

降序

举例:

1

SELECT  fk1.客户名称,fk1.城市,回款日期

FROM 回款单

ORDER BY 回款日期

不指定升降序,默认为升序

2

SELECT  fk1.客户名称,fk1.城市,回款日期

FROM 回款单

ORDER BY 回款日期 ASC

升序

3

SELECT  fk1.客户名称,fk1.城市,回款日期

FROM 回款单

ORDER BY 回款日期DESC

降序

4

SELECT  fk1.客户名称,fk1.城市,回款日期

FROM 回款单

ORDER BY fk1.客户名称 ASC, 回款日期 DESC

先按外键属性客户名称升序,再按回款日期降序

5

SELECT  fk1.客户名称,$CONCAT(fk1.联系人姓名,fk1.联系人职务) 联系人及职务,回款日期,金额

FROM 回款单

ORDER  BY  联系人及职务 ASC, 回款日期DESC

有别名的字段,在ORDER BY子句里可以使用别名