Web开拓电子刊物2008年第5期
分类:pc28.am

本文实例讲述了JavaScript生成SQL查询表单的方法。分享给大家供大家参考。具体如下:

一、SELECT 语句的各个关键词的顺序及作用简解(这个我简略点写~)

Phoenix - Hbase与SQL

2016-10-23 杜亦舒

图片 1

这里使用JavaScript生成复杂的SQL查询表单,运行一下就明白了,它可以根据选择的查询条件,自动修改你的SQL语句,是一个很典型的应用。

1.SELECT

Phoenix是什么

简单来说,Phoenix 是一个可以让我们通过SQL的方式操作HBase数据库的框架。

HBase是一个NoSQL数据库,shell客户端只支持一些简单的操作,而且看起来容易晕。

例如下面这个图,返回的是一张表的所有数据:

图片 2

是不是很难看,而且如果对HBase进行复杂查询的话,只能通过HBase的原生API编写查询程序,这样就比较麻烦。

使用Phoenix的话,就可以使用SQL来查询,便捷高效,同时还可以为HBase添加二级索引,提升查询性能,还有其他一些方便的特性。

Phoenix 支持通过编写JDBC代码来操作HBase,比原生API更方便。

欢迎下载我们的Web开发技术期刊

查询条件表单*{ font-size:12px; padding:0; margin:0;}body{ padding:40px;}#MainBox{ border:#666 1px solid; background-color:#eee; width:700px;}#MainBox td{ padding:4px;}#ConditionBox{ height:150px; width:100%; overflow-y:auto; border:#bbb 1px solid; padding:2px; background-color:#fff;}.tmFrame{ border:#eee 1px solid; padding:2px; width:100%;}.tmFrame_highlight{ border:#666 1px solid; padding:2px; width:100%; background-color:#f7f7f7;}.fname{ float:left; width:200px;}.conn{ float:left; width:100px;}.fvalue{ float:left; width:100px;}.handlebox{ float:right; width:180px; display:none;}.handlebox_view{ float:right; width:180px; display:block;}.rbox{ float:right; margin:1px; background-color:#999; color:#fff; padding:1px; width:15px; cursor:hand;}legend{ border:#bbb 1px solid; padding:4px;}fieldset{ border:#bbb 1px solid; padding:4px;}.sqlwords{ margin:2px; border:#bbb 1px solid; width:100%;}////构造函数function ce{return document.createElement}/* Example:* var a = cex("DIV", {onmouseover:foo, name:'div1', id:'main'});*/function cex; for { a[prop] = x[prop]; } return a;}/** function ge* Shorthand function for document.getElementById{return document.getElementById}/** function ac* Example: ac( house, ac, ac(floor, ac*/function ac(){ if (ac.arguments.length > 1){ var a = ac.arguments[0]; for (i=1; i<ac.arguments.length; i  ){ if  a.appendChild; } return a; } else { return null; }}/////ID增量function guid window.__id = 0; return   window.__id;}//======建立条件类function term(tname,fname,conn,fvalue,ttype){ this.tname=tname; this.fname=fname; this.conn=conn; this.fvalue=fvalue; this.id= guid(); this.ttype=ttype;}term.prototype.getHTML = function(){ var termFrame = cex("DIV", { id:this.id, className:'tmframe', onmouseover:this.fc_term_onmouseover(), onmouseout:this.fc_term_onmouseout; //var module = cex("DIV", { //id:'module' this.id, //className:'module' //}); var tttt=this.tname "." this.fname; if tttt=this.tname; var mtt = cex("input", { id:'tp' this.id, name:'fname' this.id, type:"hidden", value:this.ttype }); var fname = cex("DIV", { id:'fname' this.id, className:'fname', innerHTML:tttt }); var conn = cex("DIV", { id:'conn' this.id, className:'conn', innerHTML:this.conn }); var fvalue = cex("DIV", { id:'fvalue' this.id, className:'fvalue', innerHTML:this.fvalue }); var handlebox = cex("div", { id:'handlebox' this.id, className:"handlebox" }); var mdel = cex("div", { id:'tmdel' this.id, onclick:this.fc_mdel_onclick(), className:"rbox", title:"删除此条件", innerHTML: 'X' }); var mup = cex("div", { id:'tmup' this.id, onclick:this.fc_mup_onclick(), className:"rbox", title:"向上移动", innerHTML: '↑' }); var mdown = cex("div", { id:'tmdown' this.id, onclick:this.fc_mdown_onclick(), className:"rbox", title:"向下移动", innerHTML: '↓' }); var mzkh = cex("div", { id:'tzkh' this.id, onclick:this.fc_mzkh_onclick(), className:"rbox", title:"添加左括号", innerHTML: '; var mykh = cex("div", { id:'tykh' this.id, onclick:this.fc_mykh_onclick(), className:"rbox", title:"添加右括号", innerHTML: ')' }); var mand = cex("div", { id:'tand' this.id, onclick:this.fc_mand_onclick(), className:"rbox", title:"添加并条件", innerHTML: 'and' }); var mor = cex("div", { id:'tor' this.id, onclick:this.fc_mor_onclick(), className:"rbox", title:"添加或条件", innerHTML: 'or' }); // Build DIV ac (termFrame, mtt, ac (handlebox, mdel, mup, mdown, mykh, mzkh, mand, mor ), fname, conn, fvalue ); return termFrame;}term.prototype.highlight = function(){ ge.className = 'handlebox_view'; ge.className = 'tmFrame_highlight';}term.prototype.lowlight = function(){ ge.className = 'handlebox'; ge.className = 'tmFrame';}term.prototype.remove = function(){ var _this = ge; _this.parentNode.removeChild;}term.prototype.moveup = function(){ var _this = ge; var pre_this = _this.previousSibling; if{ _this.parentNode.insertBefore; this.lowlight(); }}term.prototype.movedown = function(){ var _this = ge; var next_this = _this.nextSibling; if{ _this.parentNode.insertBefore; this.lowlight(); }}term.prototype.addzkh = function(){ var _this = ge; var tzkh = new term('╭----------------','','','','zkh'); var node_zkh = tzkh.getHTML(); _this.parentNode.insertBefore;}term.prototype.addykh = function(){ var _this = ge; var tykh = new term('╰----------------','','','','ykh'); var node_ykh = tykh.getHTML(); if(_this.nextSibling!=null) _this.parentNode.insertBefore(node_ykh,_this.nextSibling); else _this.parentNode.appendChild;}term.prototype.addand = function(){ var _this = ge; var tand = new term(' 并且','','','','tand'); var node_and = tand.getHTML(); if(_this.nextSibling!=null) _this.parentNode.insertBefore(node_and,_this.nextSibling); else _this.parentNode.appendChild;}term.prototype.addor = function(){ var _this = ge; var tor = new term; var node_or = tor.getHTML(); if(_this.nextSibling!=null) _this.parentNode.insertBefore(node_or,_this.nextSibling); else _this.parentNode.appendChild;}///对象控制函数term.prototype.fc_term_onmouseover = function(){ var _this = this; return function(){ //if  _this.highlight(); }}term.prototype.fc_term_onmouseout = function(){ var _this = this; return function(){ //if  _this.lowlight(); }}term.prototype.fc_mdel_onclick = function(){ var _this = this; return function; }}term.prototype.fc_mup_onclick = function(){ var _this = this; return function; }}term.prototype.fc_mdown_onclick = function(){ var _this = this; return function; }}term.prototype.fc_mzkh_onclick = function(){ var _this = this; return function; }}term.prototype.fc_mykh_onclick = function(){ var _this = this; return function; }}term.prototype.fc_mand_onclick = function(){ var _this = this; return function; }}term.prototype.fc_mor_onclick = function(){ var _this = this; return function; }}/////插入页面function insertterm(){ var tname = document.all.tname.value; var fname = document.all.fname.value; var conn = document.all.conn.value; var fvalue = document.all.fvalue.value; //xl(tname "|" fname "|" conn "|" fvalue); var tm = new term(tname,fname,conn,fvalue,"fset"); var tmHTML = tm.getHTML(); ac,tmHTML); //ZA.addterm;}var tt = new Array();function addtofrom{ var ttexit="no"; for(var i=0;i<tt.length;i  ){ if ttexit="yes"; } if{ tt[i]=tname; //alert; }}//====条件控制窗口函数function CBadd(){ var h = document.all.ConditionBox.offsetHeight; document.all.ConditionBox.style.height = h   20   "px";}function CBcut(){ var h = document.all.ConditionBox.offsetHeight; if document.all.ConditionBox.style.height = h - 20   "px"; else return false;}function getSQL(){ var sql=""; var ma = ge.childNodes; for{ var id = ma[i].getAttribute; var tp = ge.value; if{ //sql =" " ge.innerHTML; //sql =" " ge.innerHTML; //sql =" "" ge.innerHTML """; var fname=ge.innerHTML; var conn=ge.innerHTML; var fvalue=ge.innerHTML; sql =" " fname; if sql =" = " "'" fvalue "'"; if sql =" > " "'" fvalue "'"; if sql =" < " "'" fvalue "'"; if sql =" <> " "'" fvalue "'"; if sql =" is null "; if sql =" is not null "; if sql =" like '%" fvalue "%'"; } else{ //sql =" " ge.innerHTML; if sql ="  sql =" )"; if sql =" and"; if sql =" or"; } //var mn = ma.childNodes; } var ffrom = "FROM " getFrom.value ="Select * "  ffrom " Where " sql;}function getFrom(){ var ff=tt.toString(); return ff;}

2.FROM

用法示例

本期共摘选文章63篇,感谢所有原创文章的作者.同时感谢所有支持本刊发展的朋友们。

复杂查询表单

3.WHERE

建表

CREATE TABLE IF NOT EXISTS us_population (
      state CHAR(2) NOT NULL,
      city VARCHAR NOT NULL,
      population BIGINT
      CONSTRAINT my_pk PRIMARY KEY (state, city));

新版网站已经发布,相关错误正在不断修正中。同时新增订阅期刊功能,欢迎大家使用。

65

4.GROUP BY ---对结果集进行分组,通常与聚合函数一起使用

查看表

0: jdbc:phoenix:localhost> !tables

图片 3

到 HBase 中查看:

hbase(main):041:0> list

结果信息:

TABLE
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.SEQUENCE
SYSTEM.STATS
US_POPULATION    
...

成功生成了 US_POPULATION 表。

点击下载本月期刊

SQL表达式

5.HAVING

添加数据

先新建一个测试数据文件 us_population.csv,内容如下:

NY,New York,8143197
CA,Los Angeles,3844829
IL,Chicago,2842518
TX,Houston,2016582
PA,Philadelphia,1463281
AZ,Phoenix,1461575
TX,San Antonio,1256509
CA,San Diego,1255540
TX,Dallas,1213825
CA,San Jose,912332

执行命令,把文件中的数据导入到数据库:

./psql.py localhost us_population.csv

查询表数据:

0: jdbc:phoenix:localhost> select * from US_POPULATION; 

图片 4

1.    Net
2.    最少的代码从一个字符串中找到出现频率最高的字符
3.    对oracle大对象(Blob,Clob)操作(增,删,改)
4.    C#写日志类
5.    编程方式执行包的任务
6.    JavaScript调用C#变量实例
7.    C#编写Windows服务的基本过程
8.    TreeView菜单,MenuStrip菜单递归动态生成例子
9.    Asp.net客户端缓存
10.    使用ASP.NET 2.0进行记录错误
11.    网页中按下回车键激发指定的按钮
12.    GridView 循环判断是否有重复,并循环保存
13.    如何分割web.config
1.    JAVA
2.    Java中的编码理论
3.    Spring中的定时任务介绍
4.    JSP开发的安全编程实例详细解析
5.    Linux下JSP运行 开发环境的建立
6.    三角形求周长和面积完整的解决方案
7.    java TimeTask类
8.    在Eclipse中构建备忘单
9.    WebService开发常见问题
10.    Java中调用Oracle包
11.    Spring中事件处理的小技巧
12.    eclipse.ini中各个参数的作用
13.    调用C/C 生成的DLL
1.    MS SQL
2.    SQL Server的链接服务器技术小结
3.    数据库设计原则
4.    按照IN语句里的顺序进行排序
5.    SQL Server开发人员应聘常被问的问题
6.    启动SQL服务脚本
7.    SQL Server中的MERGE同时插入、更新和删除
8.    SQL查询时生成的临时文件
9.    SQL语句优化汇总
10.    按照条件合并多行的数据
11.    各种字符串分拆处理函数
1.    oracle
2.    orACLE 异机恢复
3.    orACLE分区表操作
4.    orACLE 性能调整初步
5.    oracle DBA常用sql
6.    oracle 数据库优良性能
7.    oracle 数据库碎片整理
8.    orACLE用户管理
9.    oracle-主键约束、唯一约束与外键约束
10.    oracle表空间传输
11.    orACLE中的几个基本概念
1.    Javascript
2.    JavaScript实现更复杂的交互
3.    Dojo Javascript 编程规范
4.    JavaScript中实现命名空间
5.    JS访问操作框架里iframe的DOM节点对象
6.    获取Javscript执行函数名称的方法
7.    仿腾讯首页选项卡设计制作的效果
8.    Javascript匿名函数的使用
9.    JavaScript5种调用函数的方法
10.    一段JS调用解决IE6-IE8的兼容性问题
11.    JS兼容Firefox
1.    生活
2.    结婚前看看,离婚前看看
3.    80后成熟的表现30条
4.    出卖你性格的16个小动作
5.    水平思考:跳出思维定式
6.    5个步骤制定自己的健康计划
7.    很好的保健常识
8.    如何快速地学习
9.    每天一分钟来坚持你的学习计划
10.    让你越休越累的几种不良的习惯

定义条件

6.ORDER BY

示例

Phoenix自带了一个web统计的小示例,先执行命令把他导入进来:

bin/psql.py localhost examples/WEB_STAT.sql examples/WEB_STAT.csv

先执行了建表sql,然后导入数据文件csv。

查询表数据:

0: jdbc:phoenix:localhost> select * from WEB_STAT;

图片 5

COREDB字段是CPU和数据库使用量。

根据DOMAIN分组,查看每组平均CUP、数据库使用情况:

SELECT DOMAIN, AVG(CORE) Average_CPU_Usage, AVG(DB) Average_DB_Usage
FROM WEB_STAT
GROUP BY DOMAIN
ORDER BY DOMAIN DESC;

图片 6

查看各个domain的访问数,从高到低排序:

select domain,count(1) num 
from web_stat 
group by domain 
order by num desc;  

图片 7

表1 表2 表3 表4 表5 字段 字段1 字段2 字段3 字段4 字段5 字段6 字段7 关系 大于 等于 小于 不等于 为空 不为空 包含

举个例子如下:

小结

Phoenix 的基础功能就是在 HBase 之上添加了 SQL 层,可以让我们更方便的使用 HBase。

Phoenix 有很多优秀特性,例如:二级索引、命名空间映射、视图、多租户、动态列、事务 ……

而且现在已经发展的非常完善,可以集成 Spark、Hive、Pig、MapReduce,还有 Flume 插件。

 

select item_name,count(item_name) from lab_item_dict  where price='25'  group by item_name  having count(item_name)>1 order by count(item_name);

图片 8

注意这个顺序。

二、**SELECT语句基本执行过程**详解

当执行SELECT语句时,DBMS的执行步骤可以表示如下:

  step1:首先执行FROM子句,组装来自不同数据源的数据,及根据FROM子句中的一个或多个表创建工作表。如果在FROM子句中有两个或多个表,DBMS将执行 CROSS JOIN运算对表进行交叉连接,作为工作表。

  step2:若果有WHERE子句,实现基于制定的条件对记录进行筛选,即DBMS将WHERE子句列出的搜索条件作用于step1中生成的工作表。DBMS将保留哪些满座搜索条件的行,删除那些不满足条件的行。

  step3:若果有GROUP BY子句,它讲把数据划分为多个分组。DBMS将step2生成的结果表中的行分成多个组,每个组中有行的group_by_expression字段具有相同的值。接着,DBMS将每组减少到单行,而后将其添加到新的结果表中,用以代替step1的工作表。

  step4:如果有HAVING子句,他将筛选分组。DBMS将HAVING子句列出的搜索条件作用于step3生成的“组合”表中的每一行。DBMS将保留哪些满足搜索条件的行,删除那些不满足条件的行。

  step5:将SELECT子句作用于结果表,删除表中不包含再select_list中的列。如果SELECT子句包含DISTINCT关键词,DBMS将从结果中删除重复的行。

  step6:如果有ORDER BY子句,则按指定的排序规则对结果进行排序。

  step7:对于交互式的SELECT语句,在屏幕上出现结果;对于嵌入式的SQL,使用游标将结果传递给宿主程序。

以上就是SELECT语句的基本执行过程。理解它对于提高SQL查询的效率将有帮助。

3、PL/SQL中的rownum在查询中用法举例

主要是最近项目遇到,很实用的一些功能,给大家分享:

有表如下:

图片 9

 (1)查询表中价格最大的药品记录

select distinct * from LAB_ITEM_DICT t where price in (select max(price) from lab_item_dict);

图片 10

(2)查询表中的前5行记录

select * from lab_item_dict where rownum<=5;

select * from lab_item_dict where lnnvl(rownum>5);

select * from CLINIC_MASTER where rownum!=6;

注意第二条:lnnvl 排除指定条件;第三条:理解关键点为rownum是伪列,先计算结果集,然后在结果集上加上rowmun列。

上面3条语句,等价。

图片 11

(3)查询表中第6-10行数据

select * from lab_item_dict where item_code not in (select item_code from lab_item_dict where rownum<=5) and rownum<=5

 或者:

select * from lab_item_dict where lnnvl(item_code in (select item_code from lab_item_dict where rownum<=5)) and rownum<=5;

图片 12

(4)查询表中价格前5大的数据

select distinct * from lab_item_dict where price in(select distinct price from (select distinct price from lab_item_dict order by price desc) where rownum<=5)and rownum<=5 order by price desc;

图片 13

(5)查询另一张表中,就诊序号分别为‘1’和‘4’的两个病人日期最近的各前5条数据(这个是百度上面有人提问的一道淘宝网的面试题,类似的意思~

select * from (select * from OUTP_PRESC t where visit_no='1' order by visit_date desc ) where rownum<=5
union all
select * from (select * from OUTP_PRESC t where visit_no='4' order by visit_date desc ) where rownum<=5

图片 14

暂时,想到常用的这么多~有空续。。。

请点击下面的“绿色通道”--“关注DebugLZQ”,共同交流进步~

本文由pc28.am发布于pc28.am,转载请注明出处:Web开拓电子刊物2008年第5期

上一篇:React中使用ajax获取数据在移动浏览器中不显示问 下一篇:没有了
猜你喜欢
热门排行
精彩图文