编写sql语句输出句

查看: 13014|回复: 61
【大话IT】玩转SQL:如何写出好的SQL语句
认证徽章论坛徽章:127
每一条SQL语句对数据库来说就是一条命令或指令,SQL与其它编程语言的却别在于它是要处理数据集合而不是一行一行的数据。不管你是刚开始写SQL语句还是已经写很多年了,要想学会写出“好的”SQL,这个过程有许多经验,还需要高手支招。本期话题希望通过大家举例,总结出如何写好SQL语句的经验。
《精通Oracle SQL(第2版)》主要介绍了如何掌握在Oracle数据库中实现的强大SQL特性,所涵盖的内容涉及SQL核心、SQL执行、分析函数、联结、测试与质量保证等,并提供了大量实用的建议,总结出方方面面的“技巧”,帮助读者快速消化重要知识点。本书讲述清晰,可操作性强,是一本难得的Oracle SQL教程。
话题讨论:1.超过几百万行数据的多维、多变量计算,如果不是10亿级数据量,都可以很容易地通过MODEL自居来实现,而电子表格就不行。传统的SQL语句与MODEL字句有哪些区别?2.以下3条语句是否返回完全相同的结果,到底有什么不同?SQL&select *from employees where department_id=60SQL&SELECT*FROM EMPLOYEES WHERE DEPARTMENT_ID=60SQL&select/*a_comment*/*from employees where department_id=60
3.Oracle提供了两种机制,一是锁存器,另一个是互斥锁,锁存器与典型的锁到底有哪些不同?4.SQL语言有很多不同的语句,但在整个职业生涯中,你可能只会用到其中很少的一部分,其中有五个最核心的SQL语句,您知道是哪五个吗?请分别举例写5条SQL语句。5.请大家发表《精通Oracle SQL(第2版)》的观后感。
活动时间:日-日活动奖励:欢迎大家回复以上任意问题,活动结束后我们将评选出获奖会员赠送图书一本
图书详情:
购买地址:
Oracle SQL.jpg (16.27 KB, 下载次数: 19)
17:20 上传
获奖会员:(请获奖会员站内信联系楼主)wmxcn2000aio_o
, , , , , , , ,
认证徽章论坛徽章:764
以下3条语句是否返回完全相同的结果,到底有什么不同?
SQL&select *from employees where department_id=60
SQL&SELECT*FROM EMPLOYEES WHERE DEPARTMENT_ID=60
SQL&select/*a_comment*/*from employees where department_id=60
返回的结果一样的;不同的是游标不同,彼此间不能共享
认证徽章论坛徽章:764
Oracle提供了两种机制,一是锁存器,另一个是互斥锁,锁存器与典型的锁到底有哪些不同?
锁存器是用来保护对内存结构的访问的;Oracle的锁是用来保护数据访问的,锁的限制比锁存器要更宽松
锁存器不可以在进程间共享,锁存器的申请要么成功要么失败,没有锁存器申请队列;锁的申请可以按照被申请的顺序来排队等候,然后依次应用
认证徽章论坛徽章:764
SQL语言有很多不同的语句,但在整个职业生涯中,你可能只会用到其中很少的一部分,其中有五个最核心的SQL语句,您知道是哪五个吗?请分别举例写5条SQL语句。
SELECT、INSERT、UPDATE、DELETE以及MERGE
论坛徽章:729
支持。。。。。
论坛徽章:10000
跟第一版有啥区别啊?
求职 : 招聘 : 认证徽章论坛徽章:5226
先,占个楼。
求职 : 招聘 : 认证徽章论坛徽章:5226
model 语句,一般使用不到。特别是OLTP 类型的系统开发过程中基本遇不到。
虽然学过,但是这个语法长期处于遗忘的状态。
model 应该属于oracle 的特殊语法,没有相应的ANSI 标准。这就是与普通SQL 的最大区别。
求职 : 招聘 : 认证徽章论坛徽章:5226
SQL&select *from employees where department_id=60
SQL&SELECT*FROM EMPLOYEES WHERE DEPARTMENT_ID=60
SQL&select/*a_comment*/*from employees where department_id=60
在同一个用户下执行的话,结果是相同的。
由于查询不完全一致,导致三次硬解析。
求职 : 招聘 : 认证徽章论坛徽章:5226
其中有五个最核心的SQL语句:
不是6个么??
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
【精品】如何编写SQL查询语句
下载积分:750
内容提示:【精品】如何编写SQL查询语句
文档格式:PPT|
浏览次数:95|
上传日期: 01:30:06|
文档星级:
该用户还上传了这些文档
【精品】如何编写SQL查询语句
官方公共微信您所在的位置: &
在PL/SQL Developer中编写语句
在PL/SQL Developer中编写语句
电子工业出版社
《Oracle PL/SQL宝典》第2章认识PL/SQL本章将介绍有关SQL和PL/SQL的一些基础知识,这样初学者对PL/SQL的概念和使用方式就会有一个总体的认识。本节为大家介绍在PL/SQL Developer中编写语句。
2.4.3& 在PL/SQL Developer中编写语句
使用PL/SQL Developer工具编写PL/SQL语句块比使用SQL*Plus更加轻松,在该工具中编写语句就像在记事本中操作一样,可以随意地修改和添加注释,还增加了可视化操作,避免了处处利用脚本来完成。
由于PL/SQL Developer不是本书学习PL/SQL的主要工具,所以,有关它的特性和使用在这里不做过多说明,在后面的章节中会适当地给读者演示该工具的部分功能。下面用一个实例来演示如何使用它执行PL/SQL语句块。
【实例2-26】演示如何使用PL/SQL Developer执行PL/SQL语句块。
要求参照【实例2-25】,在PL/SQL Developer中完成同样的操作。具体步骤如下:
登录PL/SQL Developer。
在该工具中新建SQL窗口,具体步骤是单击【File】|【New】|【SQL Window】命令。
在新建的SQL窗口中,编写【实例2-26】的脚本,如图2.39所示。
图2.39& 编写函数脚本
执行该脚本。单击图2.39中的标记部分,如果没有错误提示,则表示该程序块成功执行。
在PL/SQL Developer中也可以选择使用"命令窗口",该窗口和SQL*Plus很相似,但更多的开发人员喜欢用如图2.39所示的界面编写脚本。
【责任编辑: TEL:(010)】&&&&&&
关于&&的更多文章
Java EE(以前叫做Java 2平台,企业版)是一个为支持企业级应用
网友评论TOP5
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
本书根据中央电视台《奋斗》栏目改编,选取80后的知名
本书是由51CTO调研中心撰写的2011年度移动开发者生存
厌倦了让人昏昏欲睡的网络术语?想学网络管理却苦于无
本书全面介绍了Ubuntu Linux的相关知识,内容详实,论述清晰。主要内容包括Ubuntu介绍、文件系统管理、进程管理、压缩与查询
51CTO旗下网站Oracle中SQL语句块的编写方法 - wdmcln - ITeye技术网站
博客分类:
配置信息中存在着大量的SQL语句块。在此主要讲述语句块的写法和我们在写语句块的过程中须遵循的规则。&o:p&&/o:p&
&o:p& &/o:p&
系统中的语句块大体可以分为两类:&o:p&&/o:p&
只是让数据库执行某些功能&o:p&&/o:p&
这种SQL语句存在于文书关系中新加时的特殊数据操作、编辑时的特殊数据操作、删除时的特殊数据操作、审批点设置中同意的特别操作、不同意的特别操作、更多操作的设定、审批完后的数据处理、管理员修改审批意见时的特殊操作
&o:p&&/o:p&
要想使这种语句块能够在Oracle里正确执行,必须做相应的处理,有以下几个方面:&o:p&&/o:p&
必须以begin开头,并且以结尾; &o:p&&/o:p&
如果语句块中有变量申明,须把变量声明在最前面;为了区分,我们约定语句块中用到的所有变量均以v_开头;&o:p&&/o:p&
必须遵照Oracle语法,Oracle用的是PL-SQL。有关PL-SQL和T-SQL的区别请参见附录。&o:p&&/o:p&
下面给出一个语句块的模板:(嫌疑人新增时的特殊操作)
VARCHAR2(20);
v_MaxNumber
NVARCHAR2(6);
v_MingCheng
VARCHAR2(2000);
v_XYR_XingMing
VARCHAR2(100);
v_AnJianID
VARCHAR2(100);
CALLINGPROCASSIGNTEMP1 VARCHAR2(33);
CALLINGPROCASSIGNTEMP2 VARCHAR2(33);
v_quhao := GetSystemValue('quhao');
/*取当前的年份*/
SELECT TO_NUMBER(TO_CHAR((SYSDATE), 'YYYY')) INTO v_Year FROM DUAL;
/*从库中取最大的年份*/
FOR REC IN (SELECT NVL(MAX(CAST(SUBSTR(SUBSTR(BianHao,
LENGTH(BianHao) - 11 + 1,
4) as int)),
0) TEMP_ALIAS_0
FROM XZ_XianYiRen) LOOP
v_MaxYear := REC.TEMP_ALIAS_0;
IF v_Year & v_MaxYear THEN
SELECT 'Y' || v_quhao || CAST(v_Year as char(4)) || '0000001'
INTO v_bianhao
FROM DUAL;
FOR REC IN (SELECT NVL(MAX(SUBSTR(BianHao,
LENGTH(BianHao) - 7 + 1,
0) TEMP_ALIAS_0
FROM XZ_XianYiRen
WHERE SUBSTR(RTRIM(LTRIM(BianHao)), 0, 11) =
'Y' || v_quhao || CAST(v_Year as char(4))) LOOP
v_MaxNumber := REC.TEMP_ALIAS_0;
v_TempStr := lpad(v_MaxNumber + 1, 7, '0');
SELECT 'Y' || v_quhao || CAST(v_Year as char(4)) || v_TempStr
INTO v_bianhao
FROM DUAL;
UPDATE xz_xianyiren SET bianhao = v_bianhao WHERE IIDD = '[TableIIDD]';
FOR REC IN (SELECT XingMing, AnJianID
FROM xz_xianyiren
WHERE IIDD = '[TableIIDD]') LOOP
v_XYR_XingMing := REC.XingM
v_AnJianID
:= REC.AnJianID;
FOR REC IN (SELECT MingCheng FROM GG_AnJian WHERE AnJianID = v_AnJianID) LOOP
v_MingCheng := REC.MingC
UPDATE GG_AnJian
SET MingCheng = v_XYR_XingMing || v_MingCheng
WHERE AnJianID = v_AnJianID;
CALLINGPROCASSIGNTEMP1 := '[TableName]';
CALLINGPROCASSIGNTEMP2 := '[TableIIDD]';
SET_XZ_OtherUpdate(CALLINGPROCASSIGNTEMP1, CALLINGPROCASSIGNTEMP2);
让数据库执行某些功能并且返回不定数目的数据集&o:p&&/o:p&
这种SQL语句块广泛存在于管理数据列中触发变化的SQL语句、默认值,文书关系中&o:p&&/o:p&
首次读取时的特殊操作,文书浏览、添加、编辑、删除、LOAD权限设置,审批点设置中开始特殊判断、同意进入下一步的通知内容格式、不同意进入下一步通知内容格式、通知内容格式、更多操作的选择值设定、下级【是否同意】默认值、下级【更多操作】默认值、【是否同意】触发变化的SQL语句、【是否同意更多操作】触发变化的SQL语句&o:p&&/o:p&
同样,这种语句块需要遵循第一种语句块的所有规则。另外,它还有一些特殊的写法:&o:p&&/o:p&
1、所有返回数据集的SQL语句需要修改为已隐式游标返回数据集:&o:p&&/o:p&
原来的Select * from CertainTable语法,需要写成open :cur_REC1 for Select * from CertainT 其中cur_REC1是游标的名称,转换过程中,游标名称必须以cur_开头,并且在游标的名称前面加冒号,加冒号表明声明了一个隐式的游标。&o:p&&/o:p&
2、在实际运行过程中,语句块中的某些返回游标可能没有被执行,例如&o:p&&/o:p&
trim(‘[InValue]’) is null then
Open :cur_RCT1 for select ‘1’ from
Open :cur_RCT2 for select ‘2’ from
Open :cur_RCT3 for select ‘3’ from
这种语句块,在运行过程中,最终返回的游标数量是不确定的,而.net在执行oracle语句块返回记录集的时候要求不论程序走哪条路径,返回的记录集的数量是相等的。这就需要我们做一些特别的处理:&o:p&&/o:p&
只要语句块中需要返回数据集的地方,我们都用一个新的游标来返回,就象上面的语句块一样,每一个游标的名称都是不重复的。但是需要在语句块的最开始的时候先打开所有下面要用到的游标。&o:p&&/o:p&
改造后的语句块如下:
Open :cur_RCT1 for select ‘’ from
Open :cur_RCT2 for select ‘’ from
Open :cur_RCT3 for select ‘’ from
trim(‘[InValue]’) is null then
Open :cur_RCT1 for select ‘1’ from
Open :cur_RCT2 for select ‘2’ from
Open :cur_RCT3 for select ‘3’ from
同一个游标可以被重复打开,并且以最后一次打开时选择出的资料为准。&o:p&&/o:p&
语句块最开始时统一打开所有游标的时候,打开顺序必须跟后面的游标在语句块中出现的物理顺序一致。例如,上面的语句块在最初打开时就不能先打开cur_RCT2再打开cur_RCT1&o:p&&/o:p&
3、为了节省资源,在有的比较简单并且结构很清晰的语句块中,可以不遵循第2条所讲述的方法。上面的方法是在逻辑比较复杂的时候不得已而采用的方法。&o:p&&/o:p&
例如:&o:p&&/o:p&
trim(‘[InValue]’) is null then
Open :cur_RCT1 for select ‘1’ from
Open :cur_RCT2 for select ‘2’ from
以上语句块就可以只使用一个游标,并且不用在最开始的时候先打开。可以修改为:
trim(‘[InValue]’) is null then
Open :cur_RCT1 for select ‘1’ from
Open :cur_RCT1 for select ‘2’ from
4、所有文书的IIDD触发变化的SQL语句的最前端需要增加对退查的特别处理&o:p&&/o:p&
-----------------退查的处理,所有文书的IIDD触发都需要增加此段
SP_OnChange_TuiCha('[TableName]','[TableIIDD]','[Obj=Session]BianHao[/Obj]',
'[Obj=QueryString]AnJianID[/Obj]',v_IsTuiCha);
if v_IsTuiCha='1' then
open :cur_RCT1 for select 'AllControl' as EnableControl from
IIDD触发变化的SQL语句块模板:(刑事,接受案件登记表)
varchar2(1);
varchar2(1000);
v_XianShiBuMenGongZhang
varchar2(10);
v_XianShiGongAnJuGongZhang varchar2(10);
v_IsTuiCha
varchar2(1) := '0';
open :cur_RCT1 for select '' from
open :cur_RCT2 for select '' from
open :cur_RCT3 for select '' from
open :cur_RCT4 for select '' from
open :cur_RCT5 for select '' from
open :cur_RCT6 for select '' from
open :cur_RCT7 for select '' from
open :cur_RCT8 for select '' from
SP_OnChange_TuiCha('[TableName]',
'[TableIIDD]',
'[Obj=Session]BianHao[/Obj]',
'[Obj=QueryString]AnJianID[/Obj]',
v_IsTuiCha);
if v_IsTuiCha = '1' then
open :cur_RCT1 for
select 'AllControl' as EnableControl from
if ('[InValue]' = '0') then
open :cur_RCT2 for
select 'ChuLiJieGuo' as DisableControl from
open :cur_RCT3 for
select 'SunDun_OnChange(''JieShouLeiXing'');' as command from
sp_Check_ShenPi_IsRole('[TableName]',
'[TableIIDD]',
'[Obj=Session]BianHao[/Obj]',
v_isrole);
IF v_isrole = '0' then
open :cur_RCT4 for
select 'AllControl' as DisableControl from
v_result := '';
GetColumnValue('[TableName]',
'[TableIIDD]',
'ChuLiJieGuo',
v_result);
if (trim(v_result) is null) then
open :cur_RCT5 for
select 'ChuLiJieGuo' as EnableControl from
open :cur_RCT6 for
select 'ChuLiJieGuo' as DisableControl from
for REC in (select XianShiBuMenGongZhang, XianShiGongAnJuGongZhang
from TableName
where iidd = '[InValue]') loop
v_XianShiBuMenGongZhang
:= REC.XianShiBuMenGongZ
v_XianShiGongAnJuGongZhang := REC.XianShiGongAnJuGongZ
if trim(v_XianShiBuMenGongZhang) is null and
trim(v_XianShiGongAnJuGongZhang) is null then
open :cur_RCT7 for
select 'document.all.LingDaoPiShi1.style.display="none";
document.all.LingDaoPiShi2.style.display="none";
document.all.LingDaoPiShi3.style.display="none";' as command
if instr('[Obj=Session]Roles[/Obj]', '000001') & 0 then
open :cur_RCT8 for
select 'AllControl' as EnableControl from
&o:p&&/o:p&
&o:p&&/o:p&&/o:p&
浏览 10398
浏览: 100350 次
求源码:qiaole@
那这里是在哪里传参的?
源码怎么都没有啊?

我要回帖

更多关于 编写sql语句输出 的文章

 

随机推荐