简单 SQL

集算器ODBC中使用的外部数据,可以是txtcsvxlsxlsx这些常见数据文件,也可以是集算器的集文件,有关集文件的说明,可以阅读7.8集文件 中的内容。另外,外部数据还可以使用组表的基表,有关组表基表的说明,请阅读11.1组表的生成

使用外部数据查询时,使用的语法类似于从数据库中查询的SQL语句,称为简单SQL。外部数据类似能够类似普通序表一样用来查询,称为外部表。如:

 

A

1

=esProcOdbc.query("select PName, SalesID, Date from Order_Electronics.txt where Amount>200000 and month(Date)=5")

2

$(esProcOdbc) select Date, count(ID) as Count, sum(Quantity) as Sum from Order_Electronics.txt group by Date

3

$(esProcOdbc) select Date, count(ID) as Count, sum(Quantity) as Sum from Order_Electronics.txt group by 1

4

$(esProcOdbc) select Date, count(ID) Count, sum(Quantity) Sum from Order_Electronics.txt group by Date having Sum>110000 order by Sum

 

txt文件作为外部表时,需要使用制表符tab作为列分隔符。

A1中,在简单SQL中使用where限制了查询条件,查出5月份销售额大于200,000的订单数据,结果如下:

在简单SQL的查询条件里面,可以使用like, in, is null等关键字,以及case when else end语句,功能与SQL中相同。

A2的简单SQL中,用group by从句按Date分组,并用聚合函数countsum计算出每日订单总数和总销售件数,同时用as定义了一些结果字段的名称。在简单SQL中,除了countsum外,还可以使用max/min/distinct等聚合函数。另外,在简单SQL中,还可以用top n取出前n条记录,或者用limit n offset m在结果中跳过m条记录后取出n条记录。A2中查询结果如下:

 

A3的简单SQL中,group by后并未使用字段名,而是用序号1表示用select中的第1个表达式来分组,结果和A2中是相同的。

A4中的查询,在分组后,用having从句,从结果中选出Sum大于110,000的数据,另外语句中将as省略写为空格,并在最后用order by语句,将结果按照Sum升序排列。查询结果如下:

 

在简单SQL中,还可以将两个外部表执行连接,如:

 

A

1

$(esProcOdbc) select StateId, Name, Abbr from states.txt

2

$(esProcOdbc) select NAME,POPULATION,STATEID from Cities.txt

3

$(esProcOdbc) select C.NAME,C.POPULATION, S.StateId, S.Abbr from states.txt S join cities.txt C on S.StateId=C.STATEID

4

$(esProcOdbc) select C.NAME,C.POPULATION, S.StateId, S.Abbr from states.txt S left join cities.txt C on S.StateId=C.STATEID

 

A1A2中,从states.txtCities.txt中查询出数据,A1A2中结果分别如下:

 

 

A3中,用join语句将两个外部表关联,列出能找到对应州简称的城市信息,如下:

 

A4中执行关联时,使用了左连接left join,结果如下:

 

外部表的定义,也可以用with写在前面,如:

 

A

1

$(esProcOdbc) with C as (cities.txt), S as (states.txt) select C.NAME,C.POPULATION, S.StateID, S.Abbr from S join C on S.StateID=C.STATEID

2

$(esProcOdbc) with C as (cities.txt), S as (states.txt),T as (citiesInfo.txt) select C.NAME,C.POPULATION, S.StateID, S.Abbr into T from S join C on S.StateID=C.STATEID

3

$(esProcOdbc) select * from citiesInfo.txt

 

A1中的查询结果和上一个例子中A3中的结果是相同的。

A2中,用select…into T…语句,将查询结果存储入一个外部表T中。存储成功后,在A3中即可从对应的外部文件中读取出存储的结果: