简单 SQL

阅读(5099) 标签: 简单sql, 集文件, 组表基表, 外部表,

本章介绍简单SQL的基础使用和在集算器ODBC中使用简单SQL

简单 SQL 的基础使用

集算器可以直接使用txt文件、csv文件等直接用于查询,查询时使用的语法类似于从数据库中查询的SQL语句,称为简单SQL。这些数据文件称为外部数据,能够类似普通序表一样用来查询,称为外部表。如:

 

A

1

$select * from cities.txt

2

$select * from D:/files/txt/cities.txt where STATEID=5

3

$select STATEID, count(*) AS Cities from cities.txt group by STATEID

和已连接数据库时,使用SQL在数据库中查询数据类似,也可以在$符号后面直接使用类似SQL的语句从外部表中查询数据。如A1中从文件cities.txt中查询结果如下:

A1中使用的简单SQLSQL语句的不同之处主要就是表名是文件名。如果不写明文件路径,文件需要置于集算器的主路径中。

使用简单SQL,也可以添加筛选语句或者计算聚集计算的结果,如A2中查询STATEID5的城市信息,A3中查询每个州中记录的城市数。A2A3中的结果分别如下:

使用简单SQL在外部表中查询时,外部表的文件名也可以用全路经表示,如A2中使用的情况。

在集算器 ODBC 中使用简单 SQL

本节内容,非应用程序员可以跳过,不影响正常阅读。

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

除了在集算器中直接调用简单SQL以外,也可以在集算器ODBC中使用简单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(Quantity)>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(Quantity)大于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 (select * from cities.txt), S as (select * from 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 (select * from cities.txt), S as (select * from states.txt) select C.NAME Name,C.POPULATION Population, S.StateID StateID, S.Abbr Abbr into citiesInfo.btx from S join C on S.StateID=C.STATEID

3

$(esProcOdbc) select * from citiesInfo.btx

 

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

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