MOQL—筛选器(Selector)(二)

来源:互联网 发布:南通大学网络公选课 编辑:程序博客网 时间:2024/06/07 00:28
FROM子句

         描述了查询从哪些数据表中获取数据。语法如下:

from TABLE [[as]ALIAS] [,...]

[[inner|left|right|full]join] TABLE [[as]ALIAS]

[onSEARCH_CONDITION] [...]]

 

TABLE [[as]ALIAS][,...]

TABLEMOQL中并不是指一个真正的持久化数据表,它所指代的是一个置于内存中的集合对象。这个集合对象可以是一个java.util.Map对象、系统数组对象、所有继承了java.util.Iterator接口的对象、数据库查询结果java.sql.ResultSet对象、MOQL自己查询返回的org.moql.RecordSet对象以及一个子查询。这些集合对象中的每一个对象元素被MOQL看做为一条记录。MOQL查询中定义的查询结果输出列、条件、分组以及排序等都是针对这些对象元素来设定的。另外,该子句与SQLFrom子句一致,支持为TABLE设定一个易记的别名,并可在后续的MOQL编写中以该别名访问TABLE的信息。如:

List<BeanA>  beanAList = BeanFactory.createBeanAList(0,100);

DataSetMap dataSetMap  = new DataSetMapImpl();

dataSetMap.putDataSet("BeanA", beanAList);

String sql = "select a.id, a.name, a.num%500 from BeanA a where  a.num%500 > 10 order by 3";

try {

    Selector selector = MoqlUtils.createSelector(sql);

    selector.select(dataSetMap);

    RecordSet recordSet = selector.getRecordSet();

    outputRecordSet(recordSet);

} catch (MoqlException e) {

    e.printStackTrace();

}

链表BeanA在上例中的别名为aa.ida.name等都是通过使用别名完成的对链表BeanA元素对象的访问。

MOQL需要同时从多个TABLE中查询数据时,其语法表现形式与SQL一致,都是将多个表放在from关键字后,并用“,”隔开,且TABLE的数目没有限制。如:

select a.id, a.name,  a.num%500, b.id, b.name, b.num%500 from BeanA a, BeanB b where a.num%500 >  10 or b.num%500 < 400 order by 3 desc, 6 desc

[[inner|left|right|full]join] TABLE [[as]ALIAS] [,...]

   描述了进行多个表查询时,表之间的数据连接方式。MOQL缺省支持inner join(内连接)left join([]连接)right join([]连接)以及full join([]连接)四种表连接方式。当join没有添加任何前缀时,表示inner join(内连接)。同一MOQL语句中,连接的个数没有限制。至于内连接、左连接、右连接、全连接的数据连接效果,MOQLSQL完全一致,在此就不做赘述,可以参考SQL相关的资料进行了解。

[onSEARCH_CONDITION]

   描述了数据连接时的连接条件。SEARCH_CONDITION为具体的连接条件,其详细描述参见《MOQL—过滤器(Filter)》。

   MOQL表连接查询的语句示例如下:

select a.id, a.name,  a.num, b.id, b.name, b.num, c.id, c.name, c.num from BeanA a left join BeanB  b on a.id = b.id right join BeanC c on c.id = b.id order by 3 desc

WHERE子句

         描述了数据查询的查询条件,该条件与FROM子句中的join操作的on条件描述一致。

[whereSEARCH_CONDITION]

SEARCH_CONDITION为具体的查询条件,其详细描述参见《MOQL—过滤器(Filter)》。

GROUP BY子句

         描述查询的用哪些字段进行分组。使用该子句时,与SQL一致,在SELECT子句中描述的所有没有进行聚合计算的字段都必须包含在该子句中。

[group byCOLUMN [, ...]]

COLUMN

   COLUMN可以是一个出现在SELECT子句中的列、列的别名或列所处的索引位置,索引位置从1开始计数。一个GROUP BY子句可以包括一个或多个COLUMN如:

select count(a.id)  cnt, sum(a.num) sum, a.num%500 mod, a.id from BeanA a group by 3, a.id

 

项目地址:http://sourceforge.net/projects/moql/

代码路径:svn://svn.code.sf.net/p/moql/code/trunk

原创粉丝点击