连接报表DQL Server后,可通过学习本小节,做基本的查询。
语法描述:
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条记录
在字段或者外键字段中,可以使用表达式,表达式中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子句里可以使用别名
|