精华内容
下载资源
问答
  • Java 如何使用 SQL 查询文本

    千次阅读 2019-01-31 09:13:42
    【摘要】  使用 SQL 查询语言,你只能查询位于数据库里面的...去乾学院看个究竟:Java 如何使用 SQL 查询文本!   Ø 引言  作为一名数据库开发程序员,使用 SQL 语言查询数据是再普通不过的一件事。而 SQ...

    【摘要】         

            使用 SQL 查询语言,你只能查询位于数据库里面的数据,但是当你面对的数据是一些 Excel 表格或者 Txt 文本格式时,有什么办法能直接对着文件进行 Select 查询呢?去乾学院看个究竟:Java 中如何使用 SQL 查询文本!

     

    Ø 引言

            作为一名数据库开发程序员,使用 SQL 语言查询数据是再普通不过的一件事。而 SQL 语言是基于数据库的查询语言,这就要求被查询的数据只能位于数据库中。但在实际工作中,时常会碰到一些不是来源于数据库的数据,特别是很多来自一些 Excel 表格或者 TXT 文本文件。如果要对它们进行 SQL 查询,通常做法是在数据库中创建临时表,然后导入数据后再使用 SQL 对其查询。这种做法本身未尝不可,但是有几点不妥:

            首先,比较麻烦,数据的来源五花八门,格式不同,表结构也各不相同。导入操作往往只能由数据库管理员手动维护,其面临的复杂度可想而知。

            其次,数据库常常会涉及敏感数据或安全考虑,就算你不怕麻烦,愿意去维护,也未必有权限进行这类操作。

            最后,这些数据往往可能是临时的、突发的,根本不适合往数据库里添加,否则会搞得数据库越来越臃肿,最终导致整体访问性能低下。

            有了这些不妥,程序员一般也就不得不放弃 SQL 式查询了,只能通过程序实现一些简单的关键字搜索等功能,毕竟自己去实现 SQL 语法的查询不仅难度大而且完全没必要。

            但是 SQL 查询有时候真的很好用啊……那么,有没有一种第三方软件能实现 SQL 式查询文本,让程序员在享受便利的同时,不需要考虑上面这些烦心的问题呢?

            答案自然是有,那就是本文要介绍的——集算器

    Ø 开始

            下面就来介绍一下,如何在 Java 中利用集算器实现 SQL 式查询文本文件。当然,此处的文本文件不是指完全自由的文本文件,而是有格式规定的,类似于数据表的文件。

            从官网下载并安装好集算器,将 dm.jar 及其依赖的配置文件 raqsoftConfig.xml 加入到当前程序的类路径。然后使用集算器提供的 JDBC 类,便可将文本文件当成数据库中的数据表来进行 SQL 式查询了。

            示例用到两个文件,第一个 student.txt 数据内容如下:

            数据格式为:第一行为字段名,后续行是数据,各列之间用 Tab 键分开。这个表是各个班级的学生基本情况。

            第二个 score.txt 数据内容如下:

            这个文件通过‘班级’,‘学生 ID’两个关键字段,记录每个学生的各科成绩。

    Ø JDBC 示例

            对于熟悉 JDBC 的同学来说,Java 调用集算器使用 SQL 查询文本的过程很简单,下面贴出示例代码:

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.ResultSetMetaData;

    import java.sql.SQLException;

    import java.sql.Statement;

    public class SQLDemo {

    public static void main(String[] args) {

    Connection con = null;// 连接

    Statement stmt = null;// 执行语句

    ResultSet rst = null;// 结果集

    try {

    /********* 通过 JDBC 连接到 集算器 *********/

    Class.forName(“com.esproc.jdbc.InternalDriver”);

    con = DriverManager.getConnection(“jdbc:esproc:local://”);

    /******************* 执行语句方法 ********************/

    stmt = con.createStatement();

    rst = stmt.executeQuery(“SELECT * FROM score.txt”);

    /******************* 执行语句方法结束 ****************/

    ResultSetMetaData meta = rst.getMetaData();

    for (int i = 0; i < meta.getColumnCount(); i++) {

    System.out.print(meta.getColumnName(i + 1) + “\t”);

    }

    System.out.println();

    // 输出结果

    while (rst.next()) {

    for (int i = 0; i < meta.getColumnCount(); i++) {

    System.out.print(rst.getObject(i + 1) + “\t”);

    }

    System.out.println();

    }

    stmt.close();

    con.close();

    } catch (ClassNotFoundException cnf) {

    System.out.println(“没找到驱动程序”);

    cnf.printStackTrace();

    } catch (SQLException se) {

    se.printStackTrace();

    }

    }

    }

            示例中可以看到加粗的 SQL 语句跟普通 SQL 语法基本一致,仅仅是表名不一样,这里直接写 TXT 文件名。执行后结果如下:

            可以看到,使用集算器的 JDBC,完全可以将具有表结构的文本文件直接当成数据表来查询。而集算器除了支持 TXT 格式之外,还支持 CSV、XLS、XLSX 甚至 JSON。另外,集算器自身也有两种数据存储格式:BTX 和 CTX,也是可以直接查询的。

            好,进一步的问题来了,集算器对 SQL 的各种命令能够支持到何种程度呢?

            首先需要说明的是,集算器不是一个数据库产品,所以对 SQL 中一些数据库维护命令是不支持的,比如 Create、Delete 等。

            那么对于 Select 可以支持到什么程度呢?

    Ø 分组统计

            下面来看看 SQL 查询中最普遍的查询,将 student.txt 跟 score.txt 关联起来,并分组统计出每名学生的总成绩。将上面示例代码中加粗的 SQL 语句替换为如下语句:

    SELECT A. 班级,A. 姓名,sum(B. 成绩) 总分 FROM student.txt A JOIN score.txt B ON A. 班级 =B. 班级 AND A. 学生 ID=B. 学生 ID GROUP BY A. 班级,A. 姓名

            执行后,得到每班学生的总分表:

            可以看到,集算器用 SQL 查询文本时,对于常规的分组、表的联合都没问题。那么带参数的查询,又该如何写呢?

    Ø 使用参数

            只需将执行语句方法块里的代码替换为以下代码:

    /******************* 执行语句方法 ********************/

    CallableStatement cs = null; // 定义 CallableStatement 对象 String

    String sql = “SELECT 姓名, 性别 FROM student.txt WHERE 班级 =?”;

    cs = con.prepareCall(sql);

    cs.setString(1, “一班”);

    rst = cs.executeQuery();

    /******************* 执行语句方法结束 ****************/

            换完后,注意要引入 CallableStatement 类。执行后结果如下:

            带参数的句子仍然没问题,调用方法也跟数据库标准是一致的。不过上述结果中,性别显示为数字,集算器 SQL 能不能支持转换语法呢?

    Ø CASE 语句

            将上面的 SQL 语句替换成带 CASE 的 SQL 语句:

    SELECT 姓名,CASE 性别 WHEN 0 THEN ‘男’ ELSE ‘女’ END 性别 FROM student.txt WHERE 班级 =?

            结果如下:

            通过上面这几个例子可以看到,集算器对常用查询的支持还是比较全面的。鉴于篇幅原因,这里就不继续一一列举了。更多集算器查询文件时的详细语法以及函数,请参考文档:http://doc.raqsoft.com.cn/esproc/func/dbquerysql.html#db_sql_

    展开全文
  • SQL查询使用IN

    千次阅读 2018-12-20 11:09:36
    进行SQL查询时,若使用IN进行条件筛选,注意IN的筛选有长度限制,不能超过1000条,若多于1000条则需要对条件进行分割,方法如下: parameter in (‘list901’,‘list902’,…,‘list1800’) or ...

    参考:https://blog.csdn.net/wangjin890620/article/details/52097013

    SQL查询使用IN注意事项:

    在进行SQL查询时,若使用IN进行条件筛选,注意IN的筛选有长度限制,不能超过1000条,若多于1000条则需要对条件进行分割,方法如下:

    parameter in (‘list901’,‘list902’,…,‘list1800’) or parameter in (‘list1801’,‘list1802’,…,)

    展开全文
  • 【HQL】Hive SQL查询使用中文别名

    千次阅读 2019-07-22 15:56:17
    使用反单引号–Tab键上面的键即可,eg: select max(company_times) as `公司申请次数` from tableA

    使用反单引号–Tab键上面的键即可,eg:

    select 
    	max(company_times) as `公司申请次数`
    from 
    	tableA
    
    展开全文
  • SQL中的子查询使用

    万次阅读 多人点赞 2018-06-11 13:05:46
    把一个查询的结果另一个查询中使用就叫做子查询 初始数据 有五个表:学生表,老师表,课程表,学院表,课程成绩表。 表结构 初始数据 学生表 老师表 课程表 学院表 课程成绩表 单行子...

    这篇文章讲述了SQL中的子查询,如有错误或者不妥之处,还请各位大佬批评指正。

    什么是子查询?

    把一个查询的结果在另一个查询中使用就叫做子查询

    初始数据

    有五个表:学生表,老师表,课程表,学院表,课程成绩表。

    表结构

    这里写图片描述

    初始数据

    1. 学生表
      这里写图片描述
    2. 老师表
      这里写图片描述
    3. 课程表
      这里写图片描述
    4. 学院表
      这里写图片描述
    5. 课程成绩表
      这里写图片描述

    单行子查询

    返回的结果集为单个的子查询,叫做单行子查询。单行比较符有 >、>=、<、<=、!=。

    • 查询平均成绩比‘王五’大的学生id,姓名,平均成绩
    select s.s_id , s.s_name , avg(score)
    from t_student s join t_grade g on s.s_id = g.s_id
    group by s.s_id , s.s_name
    having avg(score) > (select avg(score)
                         from t_student s join t_grade g on s.s_id = g.s_id
                         where s.s_name = '王五'
                         group by s.s_id)  

    查询结果:
    这里写图片描述

    注:子查询中可以嵌套函数,多行子查询不能使用单行比较符。

    多行子查询

    返回的结果集为多个的子查询,为多行子查询,多行子比较符有 IN(等于列中任意一个)、ANY(和子查询返回的某个值比较),ALL(和子查询返回的所有值比较)。

    • 查询其他课程中比课程id为‘400004’课程的任一分数低的学生的学号、姓名、课程号、课程名、分数(ANY)
    select s.s_id , s_name , c.c_id , c_name , score
    from t_grade g join t_student s on g.s_id = s.s_id
                   join t_course c on g.c_id = c.c_id
    having c.c_id != 400004 and avg (score) < any (
                                            select avg(score)
                                            from t_grade 
                                            where c_id = 400004
                                            group by (c_id)
                                            )
    group by c.c_id , s.s_id , s.s_name , c_name ,score

    查询结果:
    这里写图片描述

    • 查询其他课程中比课程id为‘400004’课程的所有分数高的学生的学号、姓名、课程号、课程名、分数(ALL)
    select s.s_id , s_name , c.c_id , c_name , score
    from t_grade g join t_student s on g.s_id = s.s_id
                   join t_course c on g.c_id = c.c_id
    having c.c_id != 400004 and score > all (
                                            select score
                                            from t_grade 
                                            where c_id = 400004
                                            )
    group by c.c_id , s.s_id , s.s_name , c_name ,score

    查询结果:
    这里写图片描述

    总结:ANY相当于和结果集中的任一一个作比较、若满足则返回,ALL相当于和结果集中的所有结果作比较,若满足则返回。

    展开全文
  • sql在where查询语句中使用变量

    万次阅读 2018-04-10 18:10:03
    好气啊,sql语句在查询变量时一直使用的是字符串模板${变量},可是这次查询一个日期时,却失败了,如:2018-04-13 最后网上终于找到解决办法了 如下: "select * from records where brr_time='"+ ...
  • sql语句左连接查询使用

    千次阅读 2020-07-01 20:29:10
    左连接查询的关键字为:LEFT JOIN + ON 这里是一条左连接的查询语句 select * from SXS_BOOK_INFO a left join SXS_TEST_BOOK b on a.book_name = b.book_name 查询之后的效果: 上述查询查询两个表书名(字段名...
  • Excel中使用SQL语句查询和筛选

    万次阅读 2018-08-22 10:34:08
    今天微博上看到@数据分析精选 分享的一篇文章,是关于《Excel中使用SQL语句实现精确查询》,觉得非常受用,分享给大家。 微博上有人回复评论说直接用vlookup、或者导入数据库进行查询处理就好了,岂不是更高效...
  • sql server中查询视图

    千次阅读 2019-09-27 13:33:42
    sql server中查询视图 1. 信息系学生的视图找到年龄<20岁的学生 select sname,sage from is_student where sage<20 2. 查询选修了1号课程的信息系的学生 select is_student.sno,sname from is_student,...
  • sql在where查询语句中使用文本值、数值、变量
  • MaxCompute SQL查询优化解析

    千人学习 2016-12-22 14:37:53
    MaxCompute是阿里云的大数据解决方案,它跨数据中心的超大规模分布式系统上提供多种编程...这个分享会专注于SQL领域,介绍MaxCompute SQL近的发展,如何利用基于代价的优化器以及代码生成技术大幅提高了SQL查询效率。
  • sql查询语句中使用if示例

    万次阅读 2017-03-18 21:14:55
    条件:查询严格金额大于0 select sum(if(money>0,money,0)) from tmz_userinfo; 2,示例: hits点击量 如果空的话,就默认为0 select message.id id , message.title title , if(message.'hits' is null , 0 , ...
  • sqlalchemy 中使用 sql 查询数据库 背景 有时候 ,我们希望通过原生 sql查询数据库,这个时候 应该怎么办呢? sqlalchemy 已经给我们提供了这样的接口, 通过 text 就可以轻松实现了。 例1 #!/usr/bin/env ...
  • 在SQL查询条件中使用case when取数据堪称SQL里的ifelse用法第一步的id是业务信息的id,除第一步外,步骤id最大的表示当前步骤,每次取当前步骤id存入意见表中,例如:select ID, --唯一标识(与步骤id一致) ...
  • SQL查询单表数据(一)

    千次阅读 2020-02-17 21:21:48
    SQL ,字符 “*” 具有特殊的含义,使用用它,将从指定的表返回每一列,这里由于没有使用 where 子句,所以将会返回每一行,即是 查询所有的行与列,就是所有的数据 。 还有一种写法就是分别列出每一列...
  • SQL 如何查询 ID 某个List的语法

    千次阅读 2020-06-09 09:24:32
    最近 有个刚入行的朋友 经常问我一些SQL 先贴个 比较常用的 这是dao层的方法 Xml 里 我这边返回类型 以map丢出去 ,所以resultType 写了 map 正码来了 这个就是查出 如果ID 某个List的方法 ...
  • 什么是位数?...比如,我学校的最后一次考试中得了 D (或 80),那么我的全班同学的排名是否前 50%? 举一个具体的例子,我们看看从学校的这些测试分数找到位数的过程:[55, 80, 95, 100, 99
  • WHERE子句,通过AND、OR运算符可以同时连接多个条件,当然AND、OR运算符也可以同时使用。但是当AND、OR运算符同时存在时,其优先级如何确定呢?与大多数语言一样,SQL语言认为AND运算符的运...
  • 查询某个表被哪些存储过程(以下简称 SP)使用 查找那些过程对该表做了更新操作
  • excel执行Sql语句,实现复杂查询

    万次阅读 2019-07-06 11:10:41
    实事上excel支持对Sheet上的数据进行sql查询,这时Sheet名就是要查询的数据表的名字,只不过要加上括号。 为了方便用sql语句直接操作sheet上的数据,特地用VBA写了一个小程序。 实例操作 程序的文件结构如下: ...
  • SqlServer Studio Sql语句美化

    万次阅读 2019-07-22 11:07:49
    sql语句的美化sql语句过程比较重要,可以清晰的查看语句结构,快速对语句进行修改。...4、弹出“添加命令”对话框,左侧选择“查询”,右侧选择“编辑器设计查询”,选择“确定” 添加后该按钮为美化...
  • sql查询字段的换行符

    千次阅读 2019-05-23 16:15:41
    开发过程,有时候发现有些数据使用看似对的查询条件,死活就是查不出来,上网查阅了下,有可能是因为之前保存数据是存入了脏数据进去比如换行符
  • SQLServer数据库基础

    万人学习 2017-03-10 16:58:42
    本套课程非常适合初级学员学习,课程内容并非参考书式的简单罗列,而是结合...那些较偏且不常用的的内容本课程并未涉及。这样既能降低学员学习难度、增强学员学习的信心又能利用所学知识完成对数据库的基本操作。
  • SQL查询语句的基本使用方法

    万次阅读 多人点赞 2018-10-30 17:13:23
    以下通过几个实例来演示sql语句的基本查询和多表联查,以及统计查询 假设目前已经创建好名成为’JXGL’的数据库,并且已经存在了三张表,分别是’S’表,保存学生的基本信息、’C’表,保存课程信息、’SC’表,...
  • SQL岗位30个面试题,SQL面试问题及答案

    万次阅读 多人点赞 2019-06-19 17:42:34
    SQL(结构化查询语言)是一种设计用于检索和操作数据的数据库。它属于美国国家标准协会(ANSI)的一种标准,可用于执行Select(选择)、Update(更新)、Delete(删除)和Insert(插入)等数据任务。 数据库的表...
  • SQL语句的嵌套子查询

    万次阅读 多人点赞 2019-06-20 21:29:52
    SQL语句;相关子查询;求选修了所有课程的学生的学号
  • sqlserver- 查询条件是中文查不出来

    千次阅读 2018-11-14 17:21:48
    数据库是中文,但是查询条件是中文怎么也查不出来 原来客户的数据库是英文版本的,所以数据库的字段值是unicode编码的 ...然后在查询时加入N:select * form table where city=N'上海' ok了 ---------------...
  • SQL中的distinct的使用方法

    万次阅读 2019-10-13 18:47:25
    1. distinct含义与使用方法 distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的... 只能SELECT 语句中使用,不能 INSERT, DELETE, U...
  • sql 查询 数组 in 的使用

    千次阅读 2018-01-03 22:04:34
    $platform_ministry = M('platform_ministry')->where(array('platform_id'=>$platform_id))->select(); // 所有科室id // array_column() 函数 从记录集中取出指定的列 array_column(记录集,字段名) ...
  • SQL查询优化

    万次阅读 多人点赞 2019-05-03 12:53:51
    SQL查询优化 一、获取有性能问题SQL的三种方法 通过用户反馈获取存在性能问题的SQL 通过慢查询日志获取存在性能问题的SQL 实时获取存在性能问题的SQL 二、慢查询日志介绍 1、使用慢查询日志获取有性能问题...
  • SQL SERVER2008查询分析器的基本使用

    千次阅读 2019-11-03 09:57:33
    以一个简单的药品信息库为例: 题目: 1 利用sql建立药品信息...2 三个表输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 首先,打开SQLSERVER2008,打开查询分析器 建库: 药品信息库.sq...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,710,863
精华内容 684,345
关键字:

在sql查询中使用