学生联盟网为您提供优质参考范文! 体会工作报告法律咨询精彩演讲各类材料
当前位置: 学生联盟网 > 人文社科 > 广告 > 【《比喻句分三类:明喻句暗喻句借喻句》1000字】明喻暗喻借喻

【《比喻句分三类:明喻句暗喻句借喻句》1000字】明喻暗喻借喻

时间:2019-12-27 09:16:50 来源:学生联盟网
作文一:《比喻句分三类:明喻句暗喻句借喻句》1000字

比喻句/

思 考

室 enter

hink lus ducation

姓名:_________________

家長簽閱:___________________

中文修辭: 比喻句

比喻句分三類:

明喻句

暗喻句

借喻句

明 喻 句

明喻句由三部分組成: 本體 、 比喻詞 、 喻體

你要運用想像力 , 想 一下和本體有相似 的事物;你可從: 1. 本體的外形 2. 本體的動態

妹妹的臉兒紅得像一個熟透的蘋果。

本體 : 即是需要被比喻的事物。

兩方面去想。

喻體 : 即是另一件用作比喻的事物。

比喻詞:

即是把 本體 和 喻體 連接起來的字詞;在明喻句中 ,一般會用: 像 、 如 、 仿佛 、 仿似 等。

本體

比喻詞

喻體

例子:

在賽跑比賽中, 哥哥 跑得 如

本體 比喻詞 喻體

獵豹 一樣的快。

今天天氣十分好, 天空 藍得 仿似

海洋 。

第 1 頁,共 3 頁 思考教室編寫

比喻句/ 暗喻句

做暗喻句的時候,要記住下列三點:

暗 喻 句

暗喻句由三部分組成: 本體 、 比喻詞 、 喻體

暗喻句是把 本體

直接說成是

喻體

比喻詞 一般用 是 、 成了 、 變成 等字詞

以前頁明喻句的例子說明:

明喻句 兩句不同之地方是, 暗喻句中的比喻詞 ; 像 改為 是 ; 本體 和 喻體 都是一樣的。 妹妹的臉兒 像 一個熟透的 蘋果。

暗喻句 妹妹的臉兒 是 一個熟透的 蘋果。

明喻句 兩句不同之地方是, 暗喻句中的比喻詞;如改為變成 ; 本體 和 喻體 都是一樣的。 在賽跑比賽中,哥哥跑得如獵豹一樣的快。

暗喻句 在賽跑比賽中,哥哥變成了獵豹;跑得十分快。

第 2 頁,共 3 頁 思考教室編寫

比喻句/ 借喻句

借喻句的要點

借喻句中只會出現 喻體 ,並不會明顯出現 本體 。

喻 句

喻體直接代替本體;用喻體使讀者聯想出本體是什麼。

借喻句中亦不會出現 喻詞 , 即是說沒有『是』 、 『像』 、 『成了』 、 『似』等字詞。

明喻句 兩句不同之地方是, 暗喻句中的比喻詞 ; 像 改為 是 ; 本體 和 喻體 都是一樣的。

這孩子 好像猴子一樣整日東奔西跑 , 真難為他的母親 。

借喻句

本體 、 喻詞 都在借喻句中被抽走了

這猴子整日東奔西跑,真難為他的母親。

用喻體 ~ 猴子直接代替本體 ~ 孩子,而本體 ~ 孩子不會在句子中再出現, 使讀者由猴子聯想到孩子。

對着這羣怒吼失去本性的野獸,防暴警員只好採用武力驅趕他們了。

句式練習

用怒吼失去本性的野獸為借喻體,使人們聯想到暴亂中的暴徒。

一個大火盤掛在天空中,真叫人受不了。 思 考 教 室 用一個大火盤為借喻體,使人們聯想到太陽。

第 3 頁,共 3 頁 思考教室編寫

思考教室編寫

作文二:《比喻句的三种形式是明喻》5500字

比喻就是平常说的打比方,是用本质不同但具有相似点的另一事物说明或描绘事物的修辞格。比喻一般包括三部分:本体、喻体、喻词。构成比喻必须符合下列两个条件:

(1)本体和喻体是本质不同的两类事物,同类事物一般不能规程比喻。

(2)本体和喻体之间必须有相似点,即喻体必须在某一点上与本体相似,才能用来说明描绘本体。如“我们的祖国象花园”祖国和花园的相似点是美丽。相似点是比喻的灵魂。

比喻句的三种形式是明喻、暗喻和借喻。反过来说明喻、暗喻和借喻都是比喻句。下面分别举例说明这三种比喻形式:

1、明喻是本体、喻体、比喻词都出现,比喻词常用“好像、如、宛如、仿佛、好比”等,有时后面还用“一样、一般、似的”等词语呼应。

例如:长城像一条长龙。这个句子中,“长城”是本体,“像”是比喻词,“一条长龙”是喻体

他(本体)动也不动,彷如(喻词)石像(喻体)。

叶子(本体)出水很高,像(喻词)亭亭的舞女的裙(喻体)。(朱自清《荷塘月色》)

2、隐 喻 ( 暗喻)是从表面看来是判断、叙述或说明暗中包含着比喻关系。暗喻的本体和喻体都出现,与明喻的区别在于它的喻词由“是、成了、变为、当作、变成、构成”等词充当。  例如:山间的云雾构成了一幅精妙的山水画。

这个句子中“山间的云雾”是本体,“构成”是比喻词,“一幅精妙的山水画”是喻体。

母亲啊!你 (本体)是 荷叶(喻体), 我(本体) 是 红莲(喻体)。

更多的时候,乌云四合,层峦叠嶂(本体)都成了水墨山水(喻体)。(李健吾《雨中登泰山》)

3、 借喻是借用喻体代替本体,即只出现喻体,本体和比喻词均不出现。本体在上下文中有所交代,读者或听话人能理解两者的关系。

如“其缺点是见树木不见森林,拣了芝麻绿豆却丢了西瓜。”

例如:落光了叶子的柳树上挂满了毛茸茸、亮晶晶的银条儿。

以上这个句子中,本体、比喻词均没有出现,喻体是“银条儿”

天上张著灰色的幔(喻体)。 (「灰色的幔」是喻体。本体是「黑云」,但不写出来。)        我似乎打了一个寒噤;我就知道,我们之间已经隔了一层可悲的厚障壁(喻体)了,我再也说不出话。(鲁迅《故乡》)

而借代则是用人和事物的特征来代替人和事,借用相关的事物来代替所要表达的事物的修辞方式。区别于比喻的另一种修辞手法。即说话或写文章时不直接说出所要表达的人或事物,而是借用与它密切相关的人或事物来代替的修辞方法。   被替代的叫“本体”,替代的叫“借体”,“本体”不出现,用“借体”来代替。

借代的方法很多,主要有以下几种:

一、部分代整体。即用事物具有代表性的部分代本体事物。   例如:两岸青山相对出,孤帆一片日边来。(《望天门山》)   用船的一部分“帆”代替船。

二、特征代本体。即用借体(人或事物)的特征、标志去代替本体事物的名称。   例如:圆规一面愤愤的回转身,一面絮絮的说,慢慢向外走去„„(《故乡》)  因为杨二嫂长得细脚伶仃,故称之为“圆规”。

三、具体代抽象。例如:南国烽烟正十年。(《梅岭三章》)“烽烟”,原是古代边境用以报警的烟火,这里代指战争,把战争这个抽象的概念具体化、形象化了。

四、工具代本体。如:等到惊蛰一犁土的季节,十家已有八户亮了囤底,揭不开锅。(《榆钱饭》)“囤”是装粮食的工具,用“亮了囤底”代指缺了粮;“锅”是做饭的工具,用“揭不开锅”代指没饭吃。

五、专名代泛称。用具有典型性的人或事物的专用名称代替本体事物的名称。   例如:你们杀死一个李公朴,会有千百万个李公朴站起来!(《最后一次讲演》)   “李公朴”,代指不怕流血牺牲,为争取民主和平而战斗的人们。

比拟:根据想象把物当作人写或把人当作物写,或把甲物当作乙物来写的修辞格。

比拟分为拟人和拟物两大类。

拟人:把物当作人来写,赋予“物”以人的言行或思想感情。如:风儿清唱著歌,

唤醒了沉睡中的大地。

拟物:把“人”当作“物”来写,也就是使人具有物的情态或动作,或把甲物当

乙物写。

如:那肥大的荷叶下面,有一个人的脸,下半截身子长在水里。

比喻与比拟有某些相似点,比拟、比喻都是两事物相比。不同点是比喻重点在“喻”,即以乙事物“喻”甲事物,甲乙两事物一主一从;比拟的重点在“拟”,即将甲事物“当作”乙事物来写,也就是用写甲事物的词来写乙事物,甲乙两事物彼此交融,浑然一体。

比喻与拟人,比拟的区别,并举几个例句,

比拟

借助丰富的想象,把物当成人来写,或把人当成物来写,或把甲物当成乙物来

写,就是比拟。

写作时善用比拟,能启发读者想象,令文章更生动。

比拟分为拟人和拟物。

比拟离不开联想和想象.

比拟是根据本体事物和拟作事物之间的可拟性,借助联想和想象而形成的辞格,

因此联想是通向比拟的桥梁,想象是比拟的翅膀.

比拟具有很强的感情色彩,是作者用自己自然流露的强烈感情去感染读者的一

种辞格.

可以简单的将比拟看作是比喻和拟人的结合。

拟人

把事物当成人来写,赋予人的思想、感情、活动。

人具有会说话,会思想,会劳动,会创造和富有感情的本质特点,人类对自己的

这些本质特点最为熟悉,最为理解,最易接受,最易产生共鸣.为了表达的需要,将

人的本质特点转移于其他事物,让它们具有人的某些特点,可以将事物描写得具

体,生动,形象,使人感到亲切,容易受到感染.

以动物拟人:

(1)„„一只探险的蜜蜂正绕着布满的柳树枝头的金色的花朵嗡嗡着.看不见

的云雀在天鹅绒般的绿油油的田野和盖满了冰的,收割后的田地上颤巍巍地歌唱

着;田凫在那积满了塘水的洼地和沼泽上面哀鸣;鹤和鸿雁高高地飞过天空,发出

春的叫喊.脱落了的毛还没有全长起来的家畜在牧场上吼叫起来了;弯腿的小羊

在它们那掉了毛的咩咩地叫着的母亲身边跳跃;„„真正的春天已经到来了.②

(托尔斯泰《安娜·卡列尼娜》)

[简析] 列文处在失恋的苦闷中.可是,春风给他带来了安慰,希望和信心.上述文字具体地,有层次地描写了春天给动物带来的变化.作者将动物人格化,赋予它们以人的品格.蜜蜂在

以植物拟人:

(2)高粱好似一队队的

向日葵摇着头微笑着,望不尽太阳起处的红色天涯.

矮小而年高的垂柳,用苍绿的叶子抚摸着快熟的庄稼;

密集的芦苇,细心地护卫着脚下偷偷开放的野花.

(郭小川《团泊洼的秋天》)

[简析] 诗人满怀激情,以拟人的方式描绘了团泊洼色彩缤纷,生机勃勃的动人秋景:高粱在

(3)枪口对准星星,

星星大吃一惊!

看它呀,躲躲闪闪,

看它呀,跳跳蹦蹦.

星星,不要害怕,

战士的眼睛最清!

我们揍的是空中强盗,

瞄你,只是练功.

星星笑了,

笑着跳上了准星.

眼睛——星星,一条线,

牵来了多少黎明! (石祥《瞄星星》)

[简析] 星星,怎么会

以事理拟人:

(4)这里叫洋八股废止,有些同志却实际上还在提倡.这里叫空洞抽象的调头少唱,有些同志却硬要多唱.这里叫教条主义休息,有些同志却叫它起床.   (毛泽东《反对党八股》)

[简析]

各类事物无不具有自己的

拟物可分为以下几种:

一是把人当作动物,植物或无生物来描写,赋予人以动物,植物或无生物的某些特征.

人拟为动物:

(5)金色的太阳照耀着金色的麦浪,

丰收的歌儿在田野里荡漾;

维吾尔族姑娘插上金色的翅膀,

在广阔的天地里飞翔.(阿不都热西提《女拖拉机手》)

[简析] 翅膀是属于鸟类的.作者却赋予维吾尔族姑娘以翅膀,并热情地讴歌:维吾尔族女拖拉机手驾驶铁牛,在肥沃的田野上自由地飞驰.

人拟为植物:

(6)那肥大的荷叶下面,有一个人的脸,下半截身子长在水里.荷花变成了人 那不是我们的水生吗 又往左右看去,不久,各人便找到了各人丈夫的脸,啊,原来是他们! (孙犁《荷花淀》)

[简析] 几个妇女去前方看望丈夫.在荷花淀,看见荷叶下面的人

二是将物拟为物.包括以生物拟为无生物,以无生物拟为生物,以物拟为抽象事理,以抽象事理拟为物.

拟无生物为动物:

(7)予观夫巴陵胜状,在洞庭一湖.衔远山,吞长江,浩浩汤汤,横无际涯;朝晖夕阳,气象万千.此则岳阳楼之大观也.(范仲淹《岳阳楼记》)

[简析]

拟抽象事理为物:

(8)三百年过去了,台伯河还像当年一样淙淙地流着,亚平宁半岛上的阳光也像当年一样和煦.罗马经历过战争,流血,唯物主义者——战士布鲁诺的思想在自由的人民当中翱翔.(郑文光《火刑》)

[简析]

构成比拟的主要方法

比拟是以人的联想为基础,通过人和物,物和物之间的不同属性转嫁的关系而构成的修辞方式.构成比拟的方法主要有以下几种:

第一,感情性格的转嫁,把人的感情性格转用于物上.比如:

(9)井冈山上的毛竹,同井冈山人一样坚贞不屈.(袁鹰《井冈翠竹》)   第二,动作,行为的转嫁.有两种情况:

A 由人到物的转嫁:

(10)

(11)她在呢喃低语中朦胧睡去,窗口的两支红烛滴落着一滴一滴红色的泪.   (刘绍棠《两草一心》)

B 由物到人的转嫁:

(12)

第三,呼唤的转嫁,把适应于人的呼唤转用于物上.比如:

(13)英雄的纪念碑啊,你可曾看见,此刻,在北京,在全国,在全世界,为失去中华民族的优秀儿子,在哭泣,在沉思,在焦灼不宁.(韩瀚《写在祖国的江河和土地上》)

第四,称谓的转嫁,把适用于人的称谓转用于物上.比如:

(14)看,榕树老人捋着长髯,木瓜弟兄睁着大眼,候着出海的渔民哪,披风戴露满载鱼虾回家园.(郭小川《厦门风姿》)

第五,人称的转嫁,用指代人的代词指物.比如:

(15)是的,外面有和风,丽日,可小白杨,你是否知道什么叫严霜,冬雪,风雨霜雪中,你会结结实实地生长起来.(韩作荣《小白杨》)

第六,抽象转嫁于具体,使抽象事物具体化.比如:

(16)他们„„挥动竹枝扫把,在默默地扫着,默默地扫着.好像春天,夏天,秋天,冬天,都是在他们的竹枝扫帚下,一个接一个地被扫走了,又被扫来了.(古华《芙蓉镇》)

(17)他总结失败的教训,把失败接起来,焊上去,作为登山用的尼龙绳子和金属梯子.(徐迟《哥德巴赫猜想》)

构成比拟的手段绝不止以上几种,人们在运用中总是不断创新,使比拟方式不断发展变化.比如:

(18)民政干部回到区政府,从头到脚都是笑眯眯的.(古华《芙蓉镇》)

拟人一般是使人之外的事物具有人的属性,可是上面的例子却反把拟人方式用在人身上,让人从头到脚都具有笑眯眯的人的情态,这就使拟人方式出新,别致,语言也显得格外生气勃勃了.

[编辑本段]比拟的效果

第一,比拟的主要效果是使表达形象生动.比拟可以让静的变成动的,让死硬呆板的变成活泼和有生气的,让无性格的变成有性格的,让抽象的变成具体形象,活灵活现的.客观事物经过人们合理的属性转移和合乎规律的创造性想象,而变得富有艺术魅力.

比如:

(19)沙果笑得红了脸,西瓜笑得比蜜甜,花儿笑得分了瓣,豌豆笑得鼓鼓圆.   《红旗歌谣》

将植物

第二,通过比拟,还可以表现人们的想象力,思想倾向和感情色彩,并创造某种意境,

给人以强烈的感染力.

(20)秦淮河失去了往日的欢笑,莫愁湖发出了撕胆的哭声.(张天明《按照人民的命令》)

用拟人方法描写了中国人民失去总理的悲哀,连江河湖泊也发出了悲哀的哭声,表达出

了人民对周恩来同志无比热爱的真挚感情.

(21)速胜论者则不知道战争是力量的竞赛,在战争双方的力量对比没有一定的变化以前,就要举行战略的决战,就想提前达到解放之路,也是没有根据的.其意见实行起来,一定不免于碰壁.或者只是空谈快意,并不准备真正去做.最后则是事实先生跑将出来,给这些空谈家一瓢冷水,证明他们不过是一些贪便宜,想少费力多得收成的空谈主义者.

(毛泽东《论持久战》)

用拟人的手法生动形象的说明了一个道理:事实胜于雄辩,实践是检验真理的唯一手段.

[编辑本段]比拟的运用

运用比拟,应注意以下几点:

第一,本体事物和拟作事物之间必须有一定的联系.具有可拟性,符合事物的特点,能唤起人们的想象.如歌声可以传向四面八方,这与鸟会飞的特点近似.因此可以说

第二,要注意言语环境.比拟修辞在文艺性作品中用得较多,如寓言,童话,民间故事中便较多地运用,其他文体中则少见;书面语中用得多,口语中则少见.   第三,要注意感情色彩.比拟的目的之一是为了更好地抒发思想感情,因此比拟的感情色彩必须鲜明.说

比拟确实可以增强语言的表现力,但用得不当,还不如不用.比如,我们在叶圣陶的《前途》一文中看到原句运用了拟人格,当再版时,作者将拟人手法舍弃了:   原句:(22)嫁时的几件衣裳„„略为体面一点,藏在一只不充实的箱子里头,逢到天气好太阳老的时候,便取出来晒着,算是温温旧日的情谊,等一会,重又请它们回入箱子里.

《叶圣陶集》

改句:(22′)嫁时的几件衣裳„„略为体面一点,藏在一只不充实的箱子里头,逢到天气好太阳老的时候,便取出来晒着,算是温温旧日的情谊,等一会,重又塞进箱子里.

《叶圣陶文集》

改句去掉拟人手法,可以更好地表达出

[编辑本段]比拟同比喻的区别

郑业健《修辞学》

王希杰《修辞学通论》

两位专家都认为,从本质上讲,比拟确实可以看成是比喻的一种.因此,比拟和比喻的界限有时确实不好划分.这是因为把甲事物拟作乙事物时,甲乙两物往往存在某种相似之处.如

但比喻还是不同于比拟,主要体现在以下五个方面:

第一,比拟是直接把拟体当成本体来写,本体可以是人,也可以是物,拟体可以是物,也可以是人,也就是说,可以把人当作物也可以把物当作人写,本体和拟体的关系是重合,相融关系,彼此是混同的.因此,当物被拟作人或此物被拟作彼物时,我们很难确切地说出

第二,两者的性质和表达效果不同.比喻通过事物的相似点使本体也喻体联系起来,重在

第三,句法结构有明显的不同.无论哪一种比喻,都可以成为

第五,在比喻中,本体和喻体都是现实生活中存在的;比拟所描摹的是现实生活中不存在的现象.比如本文中的例(6)中所描写的人的下半截身子长在水里,变成了荷花,在现实生活中是不可能存在这样的现象的.

作文三:《明喻、暗喻》300字

【明喻】

1、山茶花的红,那是怎样的红啊!像五星红旗那样明亮耀眼。(苏宇轩)

2、一簇簇红茶就像一盏盏灯笼挂满枝头,给人带来喜庆。(黄韵璇)

3、那红色的山茶花,就像一簇簇熊熊燃烧的火焰,热烈奔放。(张皓南)

4、玫瑰花开得是那么的灿烂,红的像天空的朝霞。(李嘉辉)

5、茉莉花的白,那是怎样的白啊!像冬天从天而降的雪花那样洁白。(孙铭雨)

6、那金黄的菊花在阳光下闪着金色的光芒,像一把把金黄色的小伞。(谈静好)

7、那黄菊,像天空中又大又圆的太阳散发的灿烂阳光那样光彩夺目。(陈悠然)

【暗喻】

1、山茶花的紫色呢?那是刚刚采摘的带着露珠的紫葡萄,晶莹透明,真是美极了。(黄奕彬)

2、这是草坪吗?这分明是一块大大的绿色的柔软的地毯。(罗劼)

作文四:《病句大全(1)》1500字

病句大全(一)

  这是一座新兴的城市,除了北面,四面都畅通无阻。   林红非常爱护自己的学习时间。   海底世界有许多奇怪的稀奇的海洋动物。   我轻声默读了三遍课文。   尽管你进步了,因此不能骄傲。   大家都齐了,只有小明没到。   刘芳继续三年被评为三好学生。   大家陆续而又络绎不绝地走进会场。   妈妈已经四十岁了,看上去年纪还显得年轻。   我们应该改正某些缺点。   敬爱的老师无微不至地关怀。   没有上学以前,我就认识几百个字。   我走进学校,只见操场上挂着“庆祝国庆”。   同学们在小组讨论会上提出自己的决心。   老师今天讲的知识,我基本上全掌握了。   排着整齐的队伍去参加科技展览。   刘老师经常鼓舞我们好好学习。   我们要树立爱护公物的良好习惯。   为了夺取泸定桥,纷纷报名参加。   你如果有困难,但是我可以帮助你。   眼前的一切,使我想起了许多痛苦难过的往事。   今年的麦子丰收在望,长势喜人。   爸爸的办公桌上一盆鲜花。   昨天下午刮了一天的风。   我们认真讨论并听取了校长的报告。   王明的成绩虽然进步了,但是老师表扬了他。   中国女排又一次夺魁获得冠军的喜讯传遍了祖国各地。   星期天,我穿上洁净的衣服,脱下旧衣服。   教师在灯光下全神贯注。   我怀着愉快的心情和轻松的步伐走出校门。   参加这次“华杯赛”的有男学生女学生中学生和小学生。   今天下午,邓亚萍和乔红争夺乒乓球冠亚军。   雨水被我的衣服淋湿了。   三月里,学校里开展了“学雷锋十佳”。   小兴安蛉的秋天是个美丽的地方。   学习小学生行为规范,发生了巨大的变化。   我们必须讲究卫生习惯。   武汉的夏天是全国最热的城市之一。   公园里的花真美丽极了。   他在外国语学校工作,会说三四国英语。   书架上放着工具书,有字典词典新华字典等。   星期天,李叔叔又来到车站保持公共秩序。   蓝蓝的天空中挂着一轮金黄的圆月。

  观众的眼睛目不转睛的看着台上的精彩表演。   开学了,妈妈给我买了笔橡皮尺子等学习用品和许多本子。   我们做作业应该细心,尽量避免不发生错误。   国庆的夜晚,大街小巷,张灯结彩,十分热烈。   在元旦联欢会上,我班表演了文娱节目和舞蹈。   全国又一次学习雷锋的高潮。   我们打败了一次又一次敌人的进攻。   我们每天都能听到同学们的琅琅读书声和张张笑脸。   解放军叔叔击落了五架敌机和三艘军舰。   骄傲自满是学习上的阻碍。   这些是唐朝出土的文物。   看了这部电视剧,都留下了深刻的印象。   公园新设了由两个英国援建的游乐项目。   我估计他这道题一定做错了。   他兴冲冲地跑进教室,兴高采烈地宣布了明天去春游的好消息。   听了这段报告,使我们懂得了许多道理。   冬天,寒风呼啸着拂面而来,吹得人瑟瑟发抖。   即使你是天才,却同样离不开老师的培养教育。   《草原》的作者是老舍写的。   坚持写日记,写作能力就会迅速提高和扩大。   这种不爱惜劳动成果,任意浪费,是可耻的。   我们要增强克服困难的信心和方法。   报晓的公鸡是起床的信号。   我们要认真纠正自己的缺点和错误。   多读好书,可以丰富和提高我们的知识。   《小学生语文学习》和《中国少年报》是我最喜欢读的报纸。   少先队员要热爱祖国和公共财物。   任何一切困难都不能吓倒有坚强意志的少先队员。     听了报告,受到了教育。   早稻熟透了,田野里像铺上了绿色地毯。   我忍不住不禁笑了出来。

作文五:《sqlserver语句大全》9100字

Sql server 语句大全

创建数据库

创建之前判断该数据库是否存在

if exists (select * from sysdatabases where name='databaseName')    drop database databaseName

go

Create DATABASE databasename

删除数据库

drop database dbname

备份sql server

--- 创建备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack',

'c:\mssql7backup\MyNwind_1.dat'

--- 开始备份

BACKUP DATABASE pubs TO testBack

创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:go

use 原数据库名

go

select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)

B:create table tab_new as select col1,col2„ from tab_old definition only

创建序列

create sequence SIMON_SEQUENCE

minvalue 1 -- 最小值

maxvalue 999999999999999999999999999 -- 最大值

start with 1 -- 开始值

increment by 1 -- 每次加几

cache 20;

删除新表

drop table tabname

增加一个列

Alter table tabname add colname coltype

删除一个列

Alter table tabname drop column colname

添加主键

Alter table tabname add primary key(col)

说明:删除主键:Alter table tabname drop primary key(col)  创建索引

create [unique] index idxname on tabname(col„。)

删除索引:drop index idxname on tabname

注:索引是不可更改的,想更改必须删除重新建。

创建视图

create view viewname as select statement

删除视图:drop view viewname

简单基本的sql语句

(1) 数据记录筛选:

sql=

[desc]

sql=

sql=

sql=

sql=

(2) 更新数据记录:

sql=

sql=

(3) 删除数据记录:

sql=

sql=

(4) 添加数据记录:

sql=

sql=

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值

COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计    MAX(字段名) 取得一个表格栏最大的值

MIN(字段名) 取得一个表格栏最小的值

SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql=

用 rs(

查询去除重复值:select distinct * from table1

(5) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) „„ )

(6) 单列求和:

SELECT SUM(字段名) FROM 数据表

几个高级查询运算词

A:UNION 运算符

UNION 运算符通过组合其他两个结果表(例如TABLE1 和TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随UNION 一起使用时(即UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1 就是来自TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在TABLE1 中但不在TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。

C:INTERSECT 运算符

INTERSECT 运算符通过只包括TABLE1 和TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当ALL 随INTERSECT 一起使用时

(INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

使用外连接

A、left outer join:

左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

编辑本段判断对象是否存在

判断数据库是否存在

if exists (select* from sysdatabases where name= '数据库名')    dropdatabase[数据库名]

判断表是否存在

if not exists (select * from sysobjects where [name] = '表名' and xtype='U')

begin

--这里创建表

end

判断存储过程是否存在

if exists (select* from sysobjects whereid = object_id(N'[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

dropprocedure[存储过程名]

判断临时表是否存在

if object_id('tempdb..#临时表名') isnot null

droptable#临时表名

判断视图是否存在

--SQL Server 2000

IF EXISTS (SELECT* FROM sysviews WHEREobject_id = '[dbo].[视图名]'

--SQL Server 2005

IF EXISTS (SELECT* FROM sys.views WHERE object_id = '[dbo].[视图名]'

判断函数是否存在

if exists (select* from dbo.sysobjects where id =

object_id(N'[dbo].[函数名]') and xtype in (N'FN', N'IF', N'TF'))    dropfunction[dbo].[函数名]

获取创建信息

SELECT[name],[id],crdate FROM sysobjects where xtype='U'    /*

xtype 的表示参数类型,通常包括如下这些 C = CHECK约束 D = 默认值或DEFAULT约束 F = FOREIGNKEY约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARYKEY约束(类型是K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器U = 用户表 UQ = UNIQUE约束(类型是K) V = 视图 X = 扩展存储过程 */

判断列是否存在

if exists(select* from syscolumns whereid=object_id('表名') and name='列名')

altertable表名dropcolumn列名

判断列是否自增列

if columnproperty(object_id('table'),'col','IsIdentity')=1    print '自增列'

else

print '不是自增列'

SELECT* FROM sys.columns WHEREobject_id=OBJECT_ID('表名')    AND is_identity=1

判断表中是否存在索引

if exists(select* from sysindexes whereid=object_id('表名') and name='索引名')

print '存在'

else

print '不存在

查看数据库中对象

SELECT* FROM sysobjects WHEREname='对象名'

select * from table(所要查询的表名) where coloum(条件)  编辑本段提升

复制表

(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 11

法二:select top 0 * into b from a

拷贝表

(拷贝数据,源表名:a 目标表名:b) (Access可用)

insert into b(x, y, z) select d,e,f from a;

跨数据库之间表的拷贝

(具体数据使用绝对路径) (Access可用)

insert into b(x, y, z) select d,e,f from a in ‘具体数据库’ where 条件

例子:。.from b in '

(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b 或者: select a,b,c from a where a IN (1,2,3)

显示文章最后时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b  外连接查询

(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

在线视图查询

(表名1:a

select * from (Select a,b,c FROM a) T where t.a > 1;  between的用法

between为查询某字段的指定范围,限制查询数据范围时包括了边界值,not between不包括边界值

select * from table1 where time between time1 and time2    select a,b,c, from table1 where a not between 数值1 and 数值2

in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

删除主表没有的信息

两张关联表delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1

四表联查问题

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

日程安排提前五分钟

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

一条sql 搞定数据库页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段= a.主键字段 order by a.排序字段

前10条记录

select top 10 * from table1 where 范围

选择排名

选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等。)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

派生结果表

包括所有在TableA 中但不在TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA except (select a from tableB) except (select a from tableC)

随机取出10条数据

select top 10 * from tablename order by newid()

随机选择记录

select newid()

删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

列出数据库里的表名

select name from sysobjects where type='U'

列出表里的所有的

select name from syscolumns where id=object_id('TableName')  列示排列

列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0

end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type    显示结果:

type vender pcs

电脑A 1

电脑A 1

光盘B 2

光盘A 2

手机B 3

手机C 3

初始化表table1

TRUNCATE TABLE table1

选择从10到15的记录

select top 5 * from (select top10 * from (select top 15 * from table order by id asc) table_别名 order by id desc) table_2 order by id

数据类型转换

declare @numid int

declare @id varchar(50)

set @numid=2005

set @id=convert(varchar,@numid)

通过上述语句完成数据类型Int转换成varchar,其他转换类似,可参看convert函数

编辑本段技巧

1=1,1=2的使用

在SQL语句组合时用的较多

“where 1=1”是表示选择全部 “where 1=2”全部不选,

如:

if @strWhere !='

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere

end

else

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + ']'    end

我们可以直接写成

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 and '+ @strWhere

收缩数据库

--重建索引

DBCC REINDEX

DBCC INDEXDEFRAG

--收缩数据和日志

DBCC SHRINKDB

DBCC SHRINKFILE

压缩数据库

dbcc shrinkdatabase(dbname)

转移数据库给新用户以已存在用户权限

exec sp_change_users_login 'update_one','newname','oldname'    go

检查备份集

RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

修复数据库

Alter DATABASE [dvbbs] SET SINGLE_USER

GO

DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK    GO

Alter DATABASE [dvbbs] SET MULTI_USER

GO

日志清除

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USE tablename -- 要操作的数据库名

Select @LogicalFileName = 'tablename_log', -- 日志文件名    @MaxMinutes = 10, -- Limit on time allowed to wrap log.    @NewSize = 1 -- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

Select @OriginalSize = size

FROM sysfiles

Where name = @LogicalFileName

Select 'Original Size of ' + db_name() + ' LOG is ' +    CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +    CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

FROM sysfiles

Where name = @LogicalFileName

Create TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

Select @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'    DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)

AND (@OriginalSize * 8 /1024) > @NewSize

BEGIN -- Outer loop.

Select @Counter = 0

WHILE ((@Counter

Insert DummyTrans VALUES ('Fill Log')

Delete DummyTrans

Select @Counter = @Counter + 1

END

EXEC (@TruncLog)

END

Select 'Final Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

FROM sysfiles

Where name = @LogicalFileName

Drop TABLE DummyTrans

SET NOCOUNT OFF

更改某个表

exec sp_changeobjectowner 'tablename','dbo'

存储更改全部表

Create PROCEDURE dbo.User_ChangeObjectOwnerBatch    @OldOwner as NVARCHAR(128),

@NewOwner as NVARCHAR(128)

AS

DECLARE @Name as NVARCHAR(128)

DECLARE @Owner as NVARCHAR(128)

DECLARE @OwnerName as NVARCHAR(128)

DECLARE curObject CURSOR FOR

select 'Name' = name,

'Owner' = user_name(uid)

from sysobjects

where user_name(uid)=@OldOwner

order by name

OPEN curObject

FETCH NEXT FROM curObject INTO @Name, @Owner    WHILE(@@FETCH_STATUS=0)

BEGIN

if @Owner=@OldOwner

begin

set @OwnerName = @OldOwner + '.' + rtrim(@Name)    exec sp_changeobjectowner @OwnerName, @NewOwner    end

-- select @name,@NewOwner,@OldOwner

FETCH NEXT FROM curObject INTO @Name, @Owner    END

close curObject

deallocate curObject

GO

SERVER中循环写入数据

declare @i int

set @i=1

while @i

begin

insert into test (userid) values(@i)

set @i=@i+1

end

作文六:《hql语句大全》15100字

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

第 15 章 HQL: Hibernate查询语言

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

15.1. 大小写敏感性问题

除了Java类与属性的名称外,查询语句对大小写并不敏感。 所以 SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等价于

org.hibernate.eg.Foo 并且 foo.barSet 也不等价于 foo.BARSET。

本手册中的HQL关键字将使用小写字母. 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强, 但我们发现,当把查询语句嵌入到Java语句中的时候使用大写关键字比较难看。

15.2. from子句

Hibernate中最简单的查询语句的形式如下:

from eg.Cat

该子句简单的返回eg.Cat类的所有实例。 通常我们不需要使用类的全限定名, 因为 auto-import(自动引入) 是缺省的情况。 所以我们几乎只使用如下的简单写法:

from Cat

大多数情况下, 你需要指定一个别名, 原因是你可能需要 在查询语句的其它部分引用到Cat

from Cat as cat

这个语句把别名cat指定给类Cat 的实例, 这样我们就可以在随后的查询中使用此别名了。 关键字as 是可选的,我们也可以这样写:

from Cat cat

子句中可以同时出现多个类, 其查询结果是产生一个笛卡儿积或产生跨表的连接。

from Formula, Parameter

from Formula as form, Parameter as param

查询语句中别名的开头部分小写被认为是实践中的好习惯, 这样做与Java变量的命名标准保持了一致 (比如,domesticCat)。

15.3. 关联(Association)与连接(Join)

我们也可以为相关联的实体甚至是对一个集合中的全部元素指定一个别名, 这时要使用关键字join。

from Cat as cat     inner join cat.mate as mate    left outer join cat.kittens as kitten

from Cat as cat left join cat.mate.kittens as kittens

from Formula form full join form.parameter param

受支持的连接类型是从ANSI SQL中借鉴来的。 inner join(内连接)

 left outer join(左外连接)

 right outer join(右外连接) 

full join (全连接,并不常用)

语句inner join, left outer join 以及 right outer join 可以简写。

from Cat as cat     join cat.mate as mate    left join cat.kittens as kitten 

还 有,一个

from Cat as cat     inner join fetch cat.mate    left join fetch

cat.kittens

一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。

注意fetch构造变量在使用了scroll() 或 iterate()函数 的查询中是不能使用的。最后注意,使用full join fetch 与 right join fetch是没有意义的。

如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),可以使用 fetch all properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。

from Document fetch all properties order by name

from Document doc fetch all properties where lower(doc.name) like '%cats%'

15.4. select子句

select 子句选择将哪些对象与属性返 回到查询结果集中. 考虑如下情况:

select mate from Cat as cat     inner join cat.mate as mate

该语句将选择mates of other Cats。(其他猫的配偶) 实际上, 你可以更简洁的用以下的查询语句表达相同的含义:

select cat.mate from Cat cat

查询语句可以返回值为任何类型的属性,包括返回类型为某种组件(Component)的属性: select cat.name from DomesticCat catwhere cat.name like 'fri%'

select cust.name.firstName from Customer as cust

查询语句可以返回多个对象和(或)属性,存放在 Object[]队列中,

select mother, offspr, mate.name from DomesticCat as mother    inner join mother.mate as mate    left outer join mother.kittens as offspr 或存放在一个List对象中,

select new list(mother, offspr, mate.name)from DomesticCat as mother    inner join mother.mate as mate    left outer join mother.kittens as offspr

也可能直接返回一个实际的类型安全的Java对象,

select new Family(mother, mate, offspr)from DomesticCat as mother    join mother.mate as mate    left join mother.kittens as offspr

假设类Family有一个合适的构造函数.

你可以使用关键字as给“被选择了的表达式”指派别名:

select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as nfrom Cat cat

这种做法在与子句select new map一起使用时最有用:

select new map( max(bodyWeight) as max, min(bodyWeight) as min,

count(*) as n )from Cat cat

该查询返回了一个Map的对象,内容是别名与被选择的值组成的名-值映射。

15.5. 聚集函数

HQL查询甚至可以返回作用于属性之上的聚集函数的计算结果:

select avg(cat.weight), sum(cat.weight), max(cat.weight),

count(cat)from Cat cat

受支持的聚集函数如下:

avg(...), sum(...), min(...), max(...)

 count(*) 

 count(...), count(distinct ...), count(all...)

你可以在选择子句中使用数学操作符、连接以及经过验证的SQL函数:

select cat.weight + sum(kitten.weight) from Cat cat     join

cat.kittens kittengroup by cat.id, cat.weight

select firstName||' '||initial||' '||upper(lastName) from Person

关键字distinct与all 也可以使用,它们具有与SQL相同的语义.

select distinct cat.name from Cat catselect count(distinct cat.name), count(cat) from Cat cat

15.6. 多态查询

一个如下的查询语句:

from Cat as cat

不仅返回Cat类的实例, 也同时返回子类 DomesticCat的实例. Hibernate 可以在from子句中指定任何 Java 类或接口. 查询会返回继承了该类的所有持久化子类 的实例或返回声明了该接口的所有持久化类的实例。下面的查询语句返回所有的被持久化的对象: from java.lang.Object o

接口Named 可能被各种各样的持久化类声明:

from Named n, Named m where n.name = m.name

注意,最后的两个查询将需要超过一个的SQL SELECT.这表明order by子句 没有对整个结果集进行正确的排序. (这也说明你不能对这样的查询使用Query.scroll()方法.) 15.7. where子句

where子句允许你将返回的实例列表的范围缩小. 如果没有指定别名,你可以使用属性名来直接引用属性:

from Cat where name='Fritz'

如果指派了别名,需要使用完整的属性名:

from Cat as cat where cat.name='Fritz'

返回名为(属性name等于)'Fritz'的Cat类的实例。

select foo from Foo foo, Bar barwhere foo.startDate = bar.date

将返回所有满足下面条件的Foo类的实例: 存在如下的bar的一个实例,其date属性等于 Foo的startDate属性。 复合路径表达式使得where子句非常的强大,考虑如下情况:

from Cat cat where cat.mate.name is not null

该查询将被翻译成为一个含有表连接(内连接)的SQL查询。如果你打算写像这样的查询语句

from Foo foo  where foo.bar.baz.customer.address.city is not null 在SQL中,你为达此目的将需要进行一个四表连接的查询。

=运算符不仅可以被用来比较属性的值,也可以用来比较实例:

from Cat cat, Cat rival where cat.mate = rival.mate

select cat, mate from Cat cat, Cat matewhere cat.mate = mate

特殊属性(小写)id可以用来表示一个对象的唯一的标识符。(你也可以使用该对象的属性名。)

from Cat as cat where cat.id = from Cat as cat where cat.mate.id = 69

第二个查询是有效的。此时不需要进行表连接!

同样也可以使用复合标识符。比如Person类有一个复合标识符,它由country属性 与medicareNumber属性组成。

from bank.Person personwhere person.id.country = 'AU'     and

person.id.medicareNumber = 456

from bank.Account accountwhere account.owner.id.country = 'AU'     and account.owner.id.medicareNumber = 456

第二个查询也不需要进行表连接。

同样的,特殊属性class在进行多态持久化的情况下被用来存取一个实例的鉴别值

(discriminator value)。 一个嵌入到where子句中的Java类的名字将被转换为该类的鉴别值。

from Cat cat where cat.class = DomesticCat

你也可以声明一个属性的类型是组件或者复合用户类型(以及由组件构成的组件等等)。永远不要尝试使用以组件类型来结尾的路径表达式(path-expression) (与此相反,你应当使用组件的一个属性来结尾)。 举例来说,如果store.owner含有一个包含了组件的实体address

store.owner.address.city    // 正确store.owner.address         // 错误!

一个“任意”类型有两个特殊的属性id和class, 来允许我们按照下面的方式表达一个连接(AuditLog.item 是一个属性,该属性被映射为)。

from AuditLog log, Payment payment where log.item.class = 'Payment' and log.item.id = payment.id

注意,在上面的查询与句中,log.item.class 和 payment.class 将涉及到完全不同的数据库中的列。

15.8. 表达式

在where子句中允许使用的表达式包括 大多数你可以在SQL使用的表达式种类:

 数学运算符+, -, *, /

 二进制比较运算符=, >=, , !=, like

 逻辑运算符and, or, not

in, not in, between, is null, is not null, is empty, is not empty, m

ember of and not member of

 字符串连接符...||... or concat(...,...)

 current_date(), current_time(), current_timestamp() 

 second(...), minute(...), hour(...), day(...), month(...), year

(...),

 EJB-QL 3.0定义的任何函数或操作:substring(), trim(), lower(), upp

 er(), length(), locate(), abs(), sqrt(), bit_length() coalesce() 和 nullif() cast(... as ...), 其第二个参数是某Hibernate类型的名字,以及extract(... from ...),只要ANSI cast() 和extract() 被底层数据库支持 任何数据库支持的SQL标量函数,比如sign(), trunc(), rtrim(), sin() JDBC参数传入 ? 命名参数:name, :start_date, :x1 SQL 直接常量 'foo', 69, '1970-01-01 10:00:01.0'

 Java public static final 类型的常量 eg.Color.TABBY

关键字in与between可按如下方法使用:

from DomesticCat cat where cat.name between 'A' and 'B'

from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )

而且否定的格式也可以如下书写:

from DomesticCat cat where cat.name not between 'A' and 'B'

from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' ) 同样, 子句is null与is not null可以被用来测试空值(null).

在Hibernate配置文件中声明HQL“查询替代(query substitutions)”之后, 布尔表达式(Booleans)可以在其他表达式中轻松的使用:

系统将该HQL转换为SQL语句时,该设置表明将用字符 1 和 0 来 取代关键字true 和 false:

from Cat cat where cat.alive = true

你可以用特殊属性size, 或是特殊函数size()测试一个集合的大小。

from Cat cat where cat.kittens.size > 0

from Cat cat where size(cat.kittens) > 0

对于索引了(有序)的集合,你可以使用minindex 与 maxindex函数来引用到最小与最大的索引序数。 同理,你可以使用minelement 与 maxelement函数来 引用到一个基本数据类型的集合中最小与最大的元素。

from Calendar cal where maxelement(cal.holidays) > current date

from Order order where maxindex(order.items) > 100

from Order order where minelement(order.items) > 10000

在传递一个集合的索引集或者是元素集(elements与indices 函数) 或者传递一个子查询的结果的时候,可以使用SQL函数any, some, all, exists, in

select mother from Cat as mother, Cat as kitwhere kit in

elements(foo.kittens)

select p from NameList list, Person pwhere p.name = some

elements(list.names)

from Cat cat where exists elements(cat.kittens)

from Player p where 3 > all elements(p.scores)

from Show show where 'fizard' in indices(show.acts)

注意,在Hibernate3种,这些结构变量- size, elements, indices, minindex, maxindex, minelement, maxelement - 只能在where子句中使用。

一个被索引过的(有序的)集合的元素(arrays, lists, maps)可以在其他索引中被引用(只能在where子句中):

from Order order where order.items[0].id = 4

select person from Person person, Calendar calendarwhere

calendar.holidays['national day'] = person.birthDay    and

person.nationality.calendar = calendar

select item from Item item, Order orderwhere

order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11 select item from Item item, Order orderwhere

order.items[ maxindex(order.items) ] = item and order.id = 11

在[]中的表达式甚至可以是一个算数表达式。

select item from Item item, Order orderwhere

order.items[ size(order.items) - 1 ] = item

对于一个一对多的关联(one-to-many association)或是值的集合中的元素, HQL也提供内建的index()函数,

select item, index(item) from Order order     join order.items

itemwhere index(item)

如果底层数据库支持标量的SQL函数,它们也可以被使用

from DomesticCat cat where upper(cat.name) like 'FRI%'

如果你还不能对所有的这些深信不疑,想想下面的查询。如果使用SQL,语句长度会增长多少,可读性会下降多少:

select custfrom Product prod,    Store store    inner join

store.customers custwhere prod.name = 'widget'    and

store.location.name in ( 'Melbourne', 'Sydney' )    and prod = all elements(cust.currentOrder.lineItems)

提示: 会像如下的语句

SELECT cust.name, cust.address, cust.phone, cust.id,

cust.current_orderFROM customers cust,    stores store,    locations

loc,    store_customers sc,    product prodWHERE prod.name = 'widget'    AND store.loc_id = loc.id    AND loc.name IN ( 'Melbourne', 'Sydney' )    AND sc.store_id = store.id    AND sc.cust_id = cust.id    AND prod.id = ALL(        SELECT item.prod_id        FROM line_items item, orders o        WHERE item.order_id = o.id            AND cust.current_order = o.id    )

15.9. order by子句

查询返回的列表(list)可以按照一个返回的类或组件(ponents)中的任何属性

(property)进行排序:

from DomesticCat catorder by cat.name asc, cat.weight desc,

cat.birthdate

可选的asc或desc关键字指明了按照升序或降序进行排序.

15.10. group by子句

一个返回聚集值(aggregate values)的查询可以按照一个返回的类或组件

(ponents)中的任何属性(property)进行分组:

select cat.color, sum(cat.weight), count(cat) from Cat catgroup by cat.color

select foo.id, avg(name), max(name) from Foo foo join foo.names

namegroup by foo.id

having子句在这里也允许使用.

select cat.color, sum(cat.weight), count(cat) from Cat catgroup by cat.color having cat.color in (eg.Color.TABBY, eg.Color.BLACK)

如果底层的数据库支持的话(例如不能在MySQL中使用),SQL的一般函数与聚集函数也可以出现 在having与order by 子句中。

select catfrom Cat cat    join cat.kittens kittengroup by cathaving avg(kitten.weight) > 100order by count(kitten) asc, sum(kitten.weight) desc

注意group by子句与 order by子句中都不能包含算术表达式(arithmetic

expressions).

15.11. 子查询

对于支持子查询的数据库,Hibernate支持在查询中使用子查询。一个子查询必须被圆括号包围起来(经常是SQL聚集函数的圆括号)。 甚至相互关联的子查询(引用到外部查询中的别名的子查询)也是允许的。

from Cat as fatcat where fatcat.weight > (     select avg(cat.weight) from DomesticCat cat )

from DomesticCat as cat where cat.name = some (     select

name.nickName from Name as name )

from Cat as cat where not exists (     from Cat as mate where mate.mate = cat )

from DomesticCat as cat where cat.name not in (     select

name.nickName from Name as name )

在select列表中包含一个表达式以上的子查询,你可以使用一个元组构造符(tuple constructors):

from Cat as cat where not ( cat.name, cat.color ) in (     select cat.name, cat.color from DomesticCat cat )

注意在某些数据库中(不包括Oracle与HSQL),你也可以在其他语境中使用元组构造符, 比如查询用户类型的组件与组合:

from Person where name = ('Gavin', 'A', 'King')

该查询等价于更复杂的:

from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')

有两个很好的理由使你不应当作这样的事情:首先,它不完全适用于各个数据库平台;其次,查询现在依赖于映射文件中属性的顺序。

15.12. HQL示例

Hibernate查询可以非常的强大与复杂。实际上,Hibernate的一个主要卖点就是查询语句的威力。这里有一些例子,它们与我在最近的 一个项目中使用的查询非常相似。注意你能用到的大多数查询比这些要简单的多!

下面的查询对于某个特定的客户的所有未支付的账单,在给定给最小总价值的情况下,返回订单的id,条目的数量和总价值, 返回值按照总价值的结果进行排序。为了决定价格,查询使用了当前目录。作为转换结果的SQL查询,使用了ORDER, ORDER_LINE, PRODUCT, CATALOG 和PRICE 库表。

select order.id, sum(price.amount), count(item)from Order as order    join order.lineItems as item    join item.product as product,    Catalog as catalog    join catalog.prices as pricewhere order.paid = false    and order.customer = :customer    and price.product = product    and catalog.effectiveDate

catalog.effectiveDate >= all (        select cat.effectiveDate         from Catalog as cat        where cat.effectiveDate

sysdate    )group by orderhaving sum(price.amount) > :minAmountorder by sum(price.amount) desc

这简直是一个怪物!实际上,在现实生活中,我并不热衷于子查询,所以我的查询语句看起来更像这个:

select order.id, sum(price.amount), count(item)from Order as order    join order.lineItems as item    join item.product as product,    Catalog as catalog    join catalog.prices as pricewhere order.paid = false    and order.customer = :customer    and price.product = product    and catalog = :currentCataloggroup by orderhaving sum(price.amount) > :minAmountorder by sum(price.amount) desc

下面一个查询计算每一种状态下的支付的数目,除去所有处于AWAITING_APPROVAL状态的支付,因为在该状态下 当前的用户作出了状态的最新改变。该查询被转换成含有两个内连接以及一个相关联的子选择的SQL查询,该查询使用了表 PAYMENT,

PAYMENT_STATUS 以及 PAYMENT_STATUS_CHANGE。

select count(payment), status.name from Payment as payment     join payment.currentStatus as status    join payment.statusChanges as statusChangewhere payment.status.name

PaymentStatus.AWAITING_APPROVAL    or (        statusChange.timeStamp = (             select max(change.timeStamp)             from PaymentStatusChange change             where change.payment = payment        )        and statusChange.user

:currentUser    )group by status.name, status.sortOrderorder by status.sortOrder

如果我把statusChanges实例集映射为一个列表(list)而不是一个集合(set), 书写查询语句将更加简单.

select count(payment), status.name from Payment as payment    join payment.currentStatus as statuswhere payment.status.name  PaymentStatus.AWAITING_APPROVAL    or

payment.statusChanges[ maxIndex(payment.statusChanges) ].user  :currentUsergroup by status.name, status.sortOrderorder by status.sortOrder

下面一个查询使用了MS SQL Server的 isNull()函数用以返回当前用户所属组织的组织帐号及组织未支付的账。 它被转换成一个对表ACCOUNT, PAYMENT, PAYMENT_STATUS, ACCOUNT_TYPE, ORGANIZATION 以及 ORG_USER进行的三个内连接, 一个外连接和一个子选择的SQL查询。

select account, paymentfrom Account as account    left outer join account.payments as paymentwhere :currentUser in

elements(account.holder.users)    and PaymentStatus.UNPAID =

isNull(payment.currentStatus.name, PaymentStatus.UNPAID)order by account.type.sortOrder, account.accountNumber, payment.dueDate 对于一些数据库,我们需要弃用(相关的)子选择。

select account, paymentfrom Account as account    join

account.holder.users as user    left outer join account.payments as paymentwhere :currentUser = user    and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)order by account.type.sortOrder, account.accountNumber, payment.dueDate 15.13. 批量的UPDATE & DELETE语句

HQL现在支持UPDATE与DELETE语句. 查阅 第 14.3 节 “大批量更新/删除(Bulk  以获得更多信息。

15.14. 小技巧 & 小窍门

你可以统计查询结果的数目而不必实际的返回他们:

( (Integer) session.iterate(

from ....

若想根据一个集合的大小来进行排序,可以使用如下的语句:

select usr.id, usr.namefrom User as usr     left join usr.messages as msggroup by usr.id, usr.nameorder by count(msg)

如果你的数据库支持子选择,你可以在你的查询的where子句中为选择的大小(selection size)指定一个条件:

from User usr where size(usr.messages) >= 1

如果你的数据库不支持子选择语句,使用下面的查询:

select usr.id, usr.namefrom User usr.name    join usr.messages msggroup by usr.id, usr.namehaving count(msg) >= 1

因为内连接(inner join)的原因,这个解决方案不能返回含有零个信息的User 类的实例, 所以这种情况下使用下面的格式将是有帮助的:

select usr.id, usr.namefrom User as usr    left join usr.messages as msggroup by usr.id, usr.namehaving count(msg) = 0

JavaBean的属性可以被绑定到一个命名查询(named query)的参数上:

Query q = s.createQuery(

通过将接口Query与一个过滤器(filter)一起使用,集合(Collections)是可以分页的:

Query q = s.createFilter( collection,

通过使用查询过滤器(query filter)可以将集合(Collection)的原素分组或排序: Collection orderedCollection = s.filter( collection,

不用通过初始化,你就可以知道一个集合(Collection)的大小:

( (Integer) session.iterate(

from ....

作文七:《Oracle语句大全》26300字

select * from all_tab_ments

-- 查询所有用户的表,视图等

select * from user_tab_ments

-- 查询本用户的表,视图等

select * from all_col_ments

--查询所有用户的表的列名和注释.

select * from user_col_ments

-- 查询本用户的表的列名和注释

select * from all_tab_columns

--查询所有用户的表的列名等信息(详细但是没有备注).

select * from user_tab_columns

--查询本用户的表的列名等信息(详细但是没有备注).

--一般使用1:

select t.table_name,t.ments from user_tab_ments t

--一般使用2:

select r1, r2, r3, r5

from (select a.table_name r1, a.column_name r2, a.ments r3

from user_col_ments a),

(select t.table_name r4, t.ments r5 from user_tab_ments t) where r4 = r1

以上就是oracle查询用户所有表的语句介绍。

Oracle 语句大全 (全)

Oracle 语句大全

1. Oracle安装完成后的初始口令?

internal/oracle

sys/change_on_install

system/manager

scott/tiger

sysman/oem_temp

2. ORACLE9IAS WEB CACHE的初始默认用户和密码?

administrator/administrator

3. oracle 8.0.5怎么创建数据库?

用orainst。如果有motif界面,可以用orainst /m

4. oracle 8.1.7怎么创建数据库?

dbassist

5. oracle 9i 怎么创建数据库?

dbca

6. oracle中的裸设备指的是什么?

裸设备就是绕过文件系统直接访问的储存空间

7. oracle如何区分 64-bit/32bit 版本???

$ sqlplus '/ AS SYSDBA'

SQL*Plus: Release 9.0.1.0.0 - Production on Mon Jul 14 17:01:09 2003

(c) Copyright 2001 Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production

With the Partitioning option

JServer Release 9.0.1.0.0 - Production

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production

PL/SQL Release 9.0.1.0.0 - Production

CORE 9.0.1.0.0 Production

TNS for Solaris: Version 9.0.1.0.0 - Production

NLSRTL Version 9.0.1.0.0 - Production

SQL>

8. SVRMGR什么意思?

svrmgrl,Server Manager.

9i下没有,已经改为用SQLPLUS了

sqlplus /nolog

变为归档日志型的

9. 请问如何分辨某个用户是从哪台机器登陆ORACLE的?

SELECT machine , terminal FROM V$SESSION;

10. 用什么语句查询字段呢?

desc table_name 可以查询表的结构

select field_name,... from ... 可以查询字段的值

select * from all_tables where table_name like '%'

select * from all_tab_columns where table_name='??'

11. 怎样得到触发器、过程、函数的创建脚本?

desc user_source

user_triggers

12. 怎样计算一个表占用的空间的大小?

select owner,table_name,

NUM_ROWS,

BLOCKS*AAA/1024/1024

EMPTY_BLOCKS,

LAST_ANALYZED

from dba_tables

where table_name='XXX';

Here: AAA is the value of db_block_size ;

XXX is the table name you want to check

13. 如何查看最大会话数?

SELECT * FROM V$PARAMETER WHERE NAME LIKE 'proc%';

SQL>

SQL> show parameter processes

NAME TYPE VALUE

------------------------------------ ------- ------------------------------ aq_tm_processes integer 1

db_writer_processes integer 1

job_queue_processes integer 4

log_archive_max_processes integer 1

processes integer 200

这里为200个用户。

select * from v$license;

其中sessions_highwater纪录曾经到达的最大会话数

14. 如何查看系统被锁的事务时间?

select * from v$locked_object ;

15. 如何以archivelog的方式运行oracle。

init.ora

log_archive_start = true

RESTART DATABASE

16. 怎么获取有哪些用户在使用数据库

select username from v$session;

17. 数据表中的字段最大数是多少?

表或视图中的最大列数为 1000

18. 怎样查得数据库的SID ?

select name from v$database;

也可以直接查看 init.ora文件

19. 如何在Oracle服务器上通过SQLPLUS查看本机IP地址 ?

select sys_context('userenv','ip_address') from dual;

如果是登陆本机数据库,只能返回127.0.0.1,呵呵

20. unix 下怎么调整数据库的时间?

su -root

date -u 08010000

21. 在ORACLE TABLE中如何抓取MEMO类型字段为空的数据记录?

select remark from oms_flowrec where trim(' ' from remark) is not null ;

22. 如何用BBB表的数据去更新AAA表的数据(有关联的字段)

UP2003-10-17 AAA SET BNS_SNM=(SELECT BNS_SNM FROM BBB WHERE AAA.DPT_NO=BBB.DPT_NO) WHERE BBB.DPT_NO IS NOT NULL;

23. P4计算机安装方法

将SYMCJIT.DLL改为SYSMCJIT.OLD

24. 何查询SERVER是不是OPS?

SELECT * FROM V$OPTION;

如果PARALLEL SERVER=TRUE则有OPS能

25. 何查询每个用户的权限?

SELECT * FROM DBA_SYS_PRIVS;

26. 如何将表移动表空间?

ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;

27. 如何将索引移动表空间?

ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;

28. 在LINUX,UNIX下如何启动DBA STUDIO?

OEMAPP DBASTUDIO

29. 查询锁的状况的对象有?

V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;

查询锁的表的方法:

SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(REQUEST)) MODE_REQUESTED, O.CCBZZP||'.'||O.OBJECT_NAME||' ('||O.OBJECT_TYPE||')', S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;

30. 如何解锁?

ALTER SYSTEM KILL SESSION ‘SID,SERIR#’;

31. SQLPLUS下如何修改编辑器?

DEFINE _EDITOR=

来定义新的编辑器,也可以把这个写在$ORACLE_HOME/sqlplus/admin/glogin.sql里面使它永久有效。

32. ORACLE产生随机函数是?

DBMS_RANDOM.RANDOM

33. LINUX下查询磁盘竞争状况命令?

Sar -d

33. LINUX下查询CPU竞争状况命令?

sar -r

34. 查询当前用户对象?

SELECT * FROM USER_OBJECTS;

SELECT * FROM DBA_SEGMENTS;

35. 如何获取错误信息?

SELECT * FROM USER_ERRORS;

36. 如何获取链接状况?

SELECT * FROM DBA_DB_LINKS;

37. 查看数据库字符状况?

SELECT * FROM NLS_DATABASE_PARAMETERS;

SELECT * FROM V$NLS_PARAMETERS;

38. 查询表空间信息?

SELECT * FROM DBA_DATA_FILES;

39. ORACLE的INTERAL用户要口令?

修改 SQLNET.ORA

SQLNET.AUTHENTICATION_SERVICES=(NTS)

40. 出现JAVA.EXE的解决办法?

一般是将ORACLEORAHOMEXIHTTPSERVER改成手工启动可以的

X是8或9

41. 如何给表、列加注释?

SQL>ment on table 表 is '表注释';

注释已创建。

SQL>ment on column 表.列 is '列注释';

注释已创建。

SQL> select * from user_tab_ments where ments is not null;

42. 如何查看各个表空间占用磁盘情况?

SQL> col tablespace format a20

SQL> select

b.file_id 文件ID号,

b.tablespace_name 表空间名,

b.bytes 字节数,

(b.bytes-sum(nvl(a.bytes,0))) 已使用,

sum(nvl(a.bytes,0)) 剩余空间,

sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比

from dba_free_space a,dba_data_files b

where a.file_id=b.file_id

group by b.tablespace_name,b.file_id,b.bytes

order by b.file_id

43. 如把ORACLE设置为MTS或专用模式?

#dispatchers=

加上就是MTS,注释就是专用模式,SID是指你的实例名。

44. 如何才能得知系统当前的SCN号 ?

select max(ktuxesw * power(2, 32) + ktuxesb) from x$ktuxe;

45. 请问如何在ORACLE中取毫秒?

9i之前不支持,9i开始有timestamp.

9i可以用select systimestamp from dual;

__________________

风起云涌,一锅稀饭。

人生苦闷,开心就行。

向版主反映这个帖子 | IP: 已记录

10-13-03 01:20

开心果

资深会员

注册日期: Aug 2003

来自: 福建

发帖数: 525

大家在应用ORACLE的时候可能会遇到很多看起来不难的问题, 特别对新手来说, 今天我简单把它总结一下, 发布给大家, 希望对大家有帮助! 和大家一起探讨, 共同进步! 对ORACLE高手来说是不用看的.

46. 如何在字符串里加回车?

select 'Wele to visit'||chr(10)||'.CSDN.NET' from dual ;

47. 中文是如何排序的?

Oracle9i之前,中文是按照二进制编码进行排序的。

在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值

SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序

SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序

SCHINESE_PINYIN_M 按照拼音排序

48. Oracle8i中对象名可以用中文吗?

可以

49. 如何改变WIN中SQL*Plus启动选项?

SQL*PLUS自身的选项设置我们可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中设置。

50. 怎样修改oracel数据库的默认日期?

alter session set nls_date_format='yyyymmddhh24miss';

OR

可以在init.ora中加上一行

nls_date_format='yyyymmddhh24miss'

51. 如何将小表放入keep池中?

alter table xxx storage(buffer_pool keep);

52. 如何检查是否安装了某个patch?

check that oraInventory

53. 如何使select语句使查询结果自动生成序号?

select rownum,COL from table;

54. 如何知道数据裤中某个表所在的tablespace?

select tablespace_name from user_tables where table_name='TEST';

select * from user_tables中有个字段TABLESPACE_NAME,(oracle);

select * from dba_segments where „;

55. 怎么可以快速做一个和原表一样的备份表?

create table new_table as (select * from old_table);

55. 怎么在sqlplus下修改procedure?

select line,trim(text) t from user_source where name =’A’ order by line;

56. 怎样解除PROCEDURE被意外锁定?

alter system kill session ,把那个session给杀掉,不过你要先查出她的session id or

把该过程重新改个名字就可以了。

57. SQL Reference是个什么东西?

是一本sql的使用手册,包括语法、函数等等,oracle官方网站的文档中心有下载.

58. 如何查看数据库的状态?

unix下

ps -ef | grep ora

windows下

看服务是否起来

是否可以连上数据库

59. 请问如何修改一张表的主键?

alter table aaa

drop constraint aaa_key ;

alter table aaa

add constraint aaa_key primary key(a1,b1) ;

60. 改变数据文件的大小?

用 ALTER DATABASE .... DATAFILE .... ;

手工改变数据文件的大小,对于原来的 数据文件有没有损害。

61. 怎样查看ORACLE中有哪些程序在运行之中?

查看v$sessions表

62. 怎么可以看到数据库有多少个tablespace?

select * from dba_tablespaces;

63. 如何修改oracle数据库的用户连接数?

修改initSID.ora,将process加大,重启数据库.

64. 如何查出一条记录的最后更新时间?

可以用logminer 察看

65. 如何在PL/SQL中读写文件?

UTL_FILE包允许用户通过PL/SQL读写操作系统文件。

66. 怎样把“&”放入一条记录中?

insert into a values (translate ('at{&}t','at{}','at'));

67. EXP 如何加QUERY参数?

EXP USER/PASS FILE=A.DMP TABLES(BSEMPMS)

QUERY='

68. 关于oracle8i支持简体和繁体的字符集问题?

ZHS16GBK可以支

69. Data Guard是什么软件?

就是Standby的换代产品

70. 如何创建SPFILE?

SQL> connect / as sysdba

SQL> select * from v$version;

SQL> create pfile from spfile;

SQL> CREATE SPFILE FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora';

文件已创建。

SQL> CREATE SPFILE='E:\ora9i\database\SPFILEEYGLE.ORA' FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora';

文件已创建。

71. 内核参数的应用?

shmmax

含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多

可以使用的内存数目。这个设置也不影响操作系统的内核资源。

设置方法:0.5*物理内存

例子:Set shmsys:shminfo_shmmax=10485760

shmmin

含义:共享内存的最小大小。

设置方法:一般都设置成为1。

例子:Set shmsys:shminfo_shmmin=1:

shmmni

含义:系统中共享内存段的最大个数。

例子:Set shmsys:shminfo_shmmni=100

shmseg

含义:每个用户进程可以使用的最多的共享内存段的数目。

例子:Set shmsys:shminfo_shmseg=20:

semmni

含义:系统中semaphore identifierer的最大个数。

设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的那个值加10。

例子:Set semsys:seminfo_semmni=100

semmns

含义:系统中emaphores的最大个数。

设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。

例子:Set semsys:seminfo_semmns=200

semmsl:

含义:一个set中semaphore的最大个数。

设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。 例子:Set semsys:seminfo_semmsl=-200

72. 怎样查看哪些用户拥有SYSDBA、SYSOPER权限?

SQL>conn sys/change_on_install

SQL>select * from V_$PWFILE_USERS;

73. 如何单独备份一个或多个表?

exp 用户/密码 tables=(表1,„,表2)

74. 如何单独备份一个或多个用户?

exp system/manager owner=(用户1,用户2,„,用户n) file=导出文件

75. 如何对CLOB字段进行全文检索?

SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0;

76. 如何显示当前连接用户?

SHOW USER

77. 如何查看数据文件放置的路径 ?

col file_name format a50

SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

78. 如何查看现有回滚段及其状态 ?

SQL> col segment format a30

SQL> SELECT SEGMENT_NAME,CCBZZP,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS

79. 如何改变一个字段初始定义的Check范围?

SQL> alter table xxx drop constraint constraint_name;

之后再创建新约束:

SQL> alter table xxx add constraint constraint_name check();

80. Oracle常用系统文件有哪些?

通过以下视图显示这些文件信息:v$database,v$datafile,v$logfile v$controlfile v$parameter;

81. 内连接INNER JOIN?

Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no;

82. 如何外连接?

Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+);

Select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no;

83. 如何执行脚本SQL文件?

SQL>@$PATH/filename.sql;

84. 如何快速清空一个大表?

SQL>truncate table table_name;

85. 如何查有多少个数据库实例?

SQL>SELECT * FROM V$INSTANCE;

86. 如何查询数据库有多少表?

SQL>select * from all_tables;

87. 如何测试SQL语句执行所用的时间?

SQL>set timing on ;

SQL>select * from tablename;

88. CHR()的反函数是?

ASCII()

SELECT CHAR(65) FROM DUAL;

SELECT ASCII('A') FROM DUAL;

89. 字符串的连接

SELECT CONCAT(COL1,COL2) FROM TABLE ;

SELECT COL1||COL2 FROM TABLE ;

90. 怎么把select出来的结果导到一个文本文件中?

SQL>SPOOL C:\ABCD.TXT;

SQL>select * from table;

SQL >spool off;

91. 怎样估算SQL执行的I/O数 ?

SQL>SET AUTOTRACE ON ;

SQL>SELECT * FROM TABLE;

OR

SQL>SELECT * FROM v$filestat ;

可以查看IO数

92. 如何在sqlplus下改变字段大小?

alter table table_name modify (field_name varchar2(100));

改大行,改小不行(除非都是空的)

93. 如何查询某天的数据?

select * from table_name where trunc(日期字段)=to_date('2003-05-02','yyyy-mm-dd');

94. sql 语句如何插入全年日期?

create table BSYEAR (d date);

insert into BSYEAR

select to_date('20030101','yyyymmdd')+rownum-1

from all_objects

where rownum

95. 如果修改表名?

alter table old_table_name rename to new_table_name;

96. 如何取得命令的返回状态值?

sqlcode=0

97. 如何知道用户拥有的权限?

SELECT * FROM dba_sys_privs ;

98. 从网上下载的ORACLE9I与市场上卖的标准版有什么区别?

从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于 商业用途,否则侵权。

99. 怎样判断数据库是运行在归档模式下还是运行在非归档模式下?

进入dbastudio,历程--〉数据库---〉归档查看。

100. sql>startup pfile和ifile,spfiled有什么区别?

pfile就是Oracle传统的初始化参数文件,文本格式的。

ifile类似于c语言里的include,用于把另一个文件引入

spfile是9i里新增的并且是默认的参数文件,二进制格式

startup后应该只可接pfile

101. 如何搜索出前N条记录?

SELECT * FROM empLOYEE WHERE ROWNUM

102. 如何知道机器上的Oracle支持多少并发用户数?

SQL>conn internal ;

SQL>show parameter processes ;

103. db_block_size可以修改吗?

一般不可以﹐不建议这样做的。

104. 如何统计两个表的记录总数?

select (select count(id) from aa)+(select count(id) from bb) 总数 from dual; 105. 怎样用Sql语句实现查找一列中第N大值?

select * from

(select t.*,dense_rank() over (order by sal) rank from employee)

where rank = N;

106. 如何在给现有的日期加上2年?(

select add_months(sysdate,24) from dual;

107. USED_UBLK为负值表示什么意思?

It is

108. Connect string是指什么?

应该是tnsnames.ora中的服务名后面的内容

109. 怎样扩大REDO LOG的大小?

建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。 110. tablespace 是否不能大于4G?

没有限制.

111. 返回大于等于N的最小整数值?

SELECT CEIL(N) FROM DUAL;

112. 返回小于等于N的最小整数值?

SELECT FLOOR(N) FROM DUAL;

113. 返回当前月的最后一天?

SELECT LAST_DAY(SYS2003-10-17) FROM DUAL;

114. 如何不同用户间数据导入?

IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW ROWS=Y INDEXES=Y ; 115. 如何找数据库表的主键字段的名称?

SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and table_name='TABLE_NAME';

116. 两个结果集互加的函数?

SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;

SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;

SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;

117. 两个结果集互减的函数?

SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;

118. 如何配置Sequence?

建sequence seq_custid

create sequence seq_custid start 1 incrememt by 1;

建表时:

create table cust

{ cust_id smallint not null,

...}

insert 时:

insert into table cust

values( seq_cust.nextval, ...)

日期的各部分的常用的的写法

119>.取时间点的年份的写法:

SELECT TO_CHAR(SYS2003-10-17,'YYYY') FROM DUAL;

120>.取时间点的月份的写法:

SELECT TO_CHAR(SYS2003-10-17,'MM') FROM DUAL;

121>.取时间点的日的写法:

SELECT TO_CHAR(SYS2003-10-17,'DD') FROM DUAL;

122>.取时间点的时的写法:

SELECT TO_CHAR(SYS2003-10-17,'HH24') FROM DUAL;

>.取时间点的分的写法:

SELECT TO_CHAR(SYS2003-10-17,'MI') FROM DUAL;

124>.取时间点的秒的写法:

SELECT TO_CHAR(SYS2003-10-17,'SS') FROM DUAL;

125>.取时间点的日期的写法:

SELECT TRUNC(SYS2003-10-17) FROM DUAL;

126>.取时间点的时间的写法:

SELECT TO_CHAR(SYS2003-10-17,'HH24:MI:SS') FROM DUAL;

127>.日期,时间形态变为字符形态

SELECT TO_CHAR(SYS2003-10-17) FROM DUAL;

128>.将字符串转换成日期或时间形态:

SELECT TO_2003-10-17('2003/08/01') FROM DUAL;

129>.返回参数的星期几的写法:

SELECT TO_CHAR(SYS2003-10-17,'D') FROM DUAL;

130>.返回参数一年中的第几天的写法:

SELECT TO_CHAR(SYS2003-10-17,'DDD') FROM DUAL;

131>.返回午夜和参数中指定的时间值之间的秒数的写法:

SELECT TO_CHAR(SYS2003-10-17,'SSSSS') FROM DUAL;

132>.返回参数中一年的第几周的写法:

SELECT TO_CHAR(SYS2003-10-17,'WW') FROM DUAL;

虚拟字段

133. CURRVAL 和 nextval

为表创建序列

CREATE SEQUENCE EMPSEQ ... ;

SELECT empseq.currval FROM DUAL ;

自动插入序列的数值

INSERT INTO emp

VALUES (empseq.nextval, 'LEWIS', 'CLERK',

7902, SYS2003-10-17, 1200, NULL, 20) ;

134. ROWNUM

按设定排序的行的序号

SELECT * FROM emp WHERE ROWNUM

135. ROWID

返回行的物理地址

SELECT ROWID, ename FROM emp WHERE deptno = 20 ;

136. 将N秒转换为时分秒格式?

set serverout on

declare

N number := 1000000;

ret varchar2(100);

begin

ret := trunc(n/3600) || '小时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi

dbms_output.put_line(ret);

end;

137. 如何查询做比较大的排序的进程?

SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#, a.username, a.osuser, a.status

FROM v$session a,v$sort_usage b

WHERE a.saddr = b.session_addr

ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ;

138. 如何查询做比较大的排序的进程的SQL语句?

select /*+ ORDERED */ sql_text from v$sqltext a

where a.hash_value = (

select sql_hash_value from v$session b

where b.sid = &sid and b.serial# = &serial)

order by piece asc ;

139. 如何查找重复记录?

SELECT * FROM TABLE_NAME

WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D

WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

140. 如何删除重复记录?

DELETE FROM TABLE_NAME

WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D

WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

141. 如何快速编译所有视图?

SQL >SPOOL VIEW1.SQL

SQL >SELECT ‘ALTER VIEW ‘||TNAME||’

COMPILE;’ FROM TAB;

SQL >SPOOL OFF

然后执行VIEW1.SQL即可。

SQL >@VIEW1.SQL;

142. ORA-01555 SNAPSHOT TOO OLD的解决办法

增加MINEXTENTS的值,增加区的大小,设置一个高的OPTIMAL值。

143. 事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚段扩展到达参数 MAXEXTENTS的值(ORA-01628)的解决办法.

向回滚段表空间添加文件或使已有的文件变大;增加MAXEXTENTS的值。

144. 如何加密ORACLE的存储过程?

下列存储过程内容放在AA.SQL文件中

create or replace procedure testCCB(i in number) as

begin

dbms_output.put_line('输入参数是'||to_char(i));

end;

SQL>wrap iname=a.sql;

PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001 Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved.

Processing AA.sql to AA.plb

运行AA.plb

SQL> @AA.plb ;

145. 如何监控事例的等待?

select event,sum(decode(wait_Time,0,0,1))

sum(decode(wait_Time,0,1,0))

from v$session_Wait

group by event order by 4;

146. 如何回滚段的争用情况?

select name, waits, gets, waits/gets

from v$rollstat C, v$rollname D

where C.usn = D.usn;

147. 如何监控表空间的 I/O 比例?

select B.tablespace_name name,B.file_name

A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw

from v$filestat A, dba_data_files B

where A.file# = B.file_id

order by B.tablespace_name;

148. 如何监控文件系统的 I/O 比例?

select substr(C.file#,1,2)

C.status, C.bytes, D.phyrds, D.phywrts

from v$datafile C, v$filestat D

where C.file# = D.file#;

149. 如何在某个用户下找所有的索引?

select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name from user_ind_columns, user_indexes

where user_ind_columns.index_name = user_indexes.index_name

and user_ind_columns.table_name = user_indexes.table_name

order by user_indexes.table_type, user_indexes.table_name,

user_indexes.index_name, column_position;

150. 如何监控 SGA 的命中率?

select a.value + b.value

round(100 * ((a.value+b.value)-c.value) / (a.value+b.value))

where a.statistic# = 38 and b.statistic# = 39

and c.statistic# = 40;

151. 如何监控 SGA 中字典缓冲区的命中率?

select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100

from v$rowcache

where gets+getmisses 0

group by parameter, gets, getmisses;

152. 如何监控 SGA 中共享缓存区的命中率,应该小于1% ?

select sum(pins)

sum(reloads)/sum(pins) *100 libcache

from v$librarycache;

select sum(pinhits-reloads)/sum(pins)

percent

from v$librarycache;

153. 如何显示所有数据库对象的类别和大小?

select count(name) num_instances ,type ,sum(source_size) source_size ,

sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size,

sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required from dba_object_size

group by type order by 2;

154. 监控 SGA 中重做日志缓存区的命中率,应该小于1%

SELECT name, gets, misses, immediate_gets, immediate_misses,

Decode(gets,0,0,misses/gets*100) ratio1,

Decode(immediate_gets+immediate_misses,0,0,

immediate_misses/(immediate_gets+immediate_misses)*100) ratio2

FROM v$latch WHERE name IN ('redo allocation', 'redo copy');

155. 监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size

SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)'); 156. 如何监控当前数据库谁在运行什么SQL语句?

SELECT osuser, username, sql_text from v$session a, v$sqltext b

where a.sql_address =b.address order by address, piece;

157. 如何监控字典缓冲区?

SELECT (SUM(PINS - RELOADS)) / SUM(PINS)

SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS)

SELECT SUM(PINS)

后者除以前者,此比率小于1%,接近0%为好。

SELECT SUM(GETS)

158. 监控 MTS

select busy/(busy+idle)

此值大于0.5时,参数需加大

select sum(wait)/sum(totalq)

select count(*) from v$dispatcher;

select servers_highwater from v$mts;

servers_highwater接近mts_max_servers时,参数需加大

159. 如何知道当前用户的ID号?

SQL>SHOW USER;

OR

SQL>select user from dual;

160. 如何查看碎片程度高的表?

SELECT segment_name table_name , COUNT(*) extents

FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name

HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name); 162. 如何知道表在表空间中的存储情况?

select segment_name,sum(bytes),count(*) ext_quan from dba_extents where

tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;

163. 如何知道索引在表空间中的存储情况?

select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner'

group by segment_name;

164、如何知道使用CPU多的用户session?

11是cpu used by this session

select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value

from v$session a,v$process b,v$sesstat c

where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc; 165. 如何知道监听器日志文件?

以8I为例

$ORACLE_HOME/NETWORK/LOG/LISTENER.LOG

166. 如何知道监听器参数文件?

以8I为例

$ORACLE_HOME/NETWORK/ADMIN/LISTENER.ORA

167. 如何知道TNS 连接文件?

以8I为例

$ORACLE_HOME/NETWORK/ADMIN/TNSNAMES.ORA

168. 如何知道Sql*Net 环境文件?

以8I为例

$ORACLE_HOME/NETWORK/ADMIN/SQLNET.ORA

169. 如何知道警告日志文件?

以8I为例

$ORACLE_HOME/ADMIN/SID/BDUMP/SIDALRT.LOG

170. 如何知道基本结构?

以8I为例

$ORACLE_HOME/RDBMS/ADMIN/STANDARD.SQL

171. 如何知道建立数据字典视图?

以8I为例

$ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL

172. 如何知道建立审计用数据字典视图?

以8I为例

$ORACLE_HOME/RDBMS/ADMIN/CATAUDIT.SQL

173. 如何知道建立快照用数据字典视图?

以8I为例

$ORACLE_HOME/RDBMS/ADMIN/CATSNAP.SQL

本讲主要讲的是SQL语句的优化方法! 主要基于ORACLE9I的.

174. /*+ALL_ROWS*/

表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.

例如:

SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 175. /*+FIRST_ROWS*/

表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化. 例如:

SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 176. /*+CHOOSE*/

表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量; 表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;

例如:

SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 177. /*+RULE*/

表明对语句块选择基于规则的优化方法.

例如:

SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 178. /*+FULL(TABLE)*/

表明对表选择全局扫描的方法.

例如:

SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='CCBZZP'; 179. /*+ROWID(TABLE)*/

提示明确表明对指定表根据ROWID进行访问.

例如:

SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA' AND EMP_NO='CCBZZP';

180. /*+CLUSTER(TABLE)*/

提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.

例如:

SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS

WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

181. /*+INDEX(TABLE INDEX_NAME)*/

表明对表选择索引的扫描方法.

例如:

SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';

182. /*+INDEX_ASC(TABLE INDEX_NAME)*/

表明对表选择索引升序的扫描方法.

例如:

SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='CCBZZP'; 183. /*+INDEX_COMBINE*/

为指定表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的

布尔组合方式.

例如:

SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIRE2003-10-17_BMI)*/ * FROM BSEMPMS WHERE SAL

184. /*+INDEX_JOIN(TABLE INDEX_NAME)*/

提示明确命令优化器使用索引作为访问路径.

例如:

SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIRE2003-10-17_BMI)*/ SAL,HIRE2003-10-17 FROM BSEMPMS WHERE SAL

185. /*+INDEX_DESC(TABLE INDEX_NAME)*/

表明对表选择索引降序的扫描方法.

例如:

SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='CCBZZP'; 186. /*+INDEX_FFS(TABLE INDEX_NAME)*/

对指定的表执行快速全索引扫描,而不是全表扫描的办法.

例如:

SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305'; 187. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/

提示明确进行执行规划的选择,将几个单列索引的扫描合起来.

例如:

SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='CCBZZP' AND DPT_NO='TDC306';

188. /*+USE_CONCAT*/

对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询.

例如:

SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M'; 189. /*+NO_EXPAND*/

对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展.

例如:

SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M'; 190. /*+NOWRITE*/

禁止对查询块的查询重写操作.

191. /*+REWRITE*/

可以将视图作为参数.

192. /*+MERGE(TABLE)*/

能够对视图的各个查询进行相应的合并.

例如:

SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;

193. /*+NO_MERGE(TABLE)*/

对于有可合并的视图不再合并.

例如:

SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO

AND A.SAL>V.AVG_SAL;

194. /*+ORDERED*/

根据表出现在FROM中的顺序,ORDERED使ORACLE依此顺序对其连接.

例如:

SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

195. /*+USE_NL(TABLE)*/

将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.

例如:

SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

196. /*+USE_MERGE(TABLE)*/

将指定的表与其它行源通过合并排序连接方式连接起来.

例如:

SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE

BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

197. /*+USE_HASH(TABLE)*/

将指定的表与其它行源通过哈希连接方式连接起来.

例如:

SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE

BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

198. /*+DRIVING_SITE(TABLE)*/

强制与ORACLE所选择的位置不同的表进行查询执行.

例如:

SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

199. /*+LEADING(TABLE)*/

将指定的表作为连接次序中的首表.

200. /*+CACHE(TABLE)*/

当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端

例如:

SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

201. /*+NOCACHE(TABLE)*/

当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端

例如:

SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

202. /*+APPEND*/

直接插入到表的最后,可以提高速度.

insert /*+append*/ into test1 select * from test4 ;

203. /*+NOAPPEND*/

通过在插入语句生存期内停止并行模式来启动常规插入.

insert /*+noappend*/ into test1 select * from test4 ;

ORACLE内部函数篇

204. 如何得到字符串的第一个字符的ASCII值?

ASCII(CHAR)

SELECT ASCII('ABCDE') FROM DUAL;

结果: 65

205. 如何得到数值N指定的字符?

CHR(N)

SELECT CHR(68) FROM DUAL;

结果: D

206. 如何连接两个字符串?

CONCAT(CHAR1,CHAR2)

SELECT CONCAT('ABC','DEFGH') FROM DUAL;

结果: 'ABCDEFGH'

207. 如何将列中的数值代替为字符串?

DECODE(CHAR,N1,CHAR1,N2,CHAR2...)

SELECT DECODE(DAY,1,'SUN',2,'MON') FROM DUAL;

208. INITCAP(CHAR)

将字符串CHAR的第一个字符为大写,其余为小写.

SELECT INITCAP('ABCDE') FROM DUAL;

209. LENGTH(CHAR)

取一字符串CHAR的长度.

SELECT LENGTH('ABCDE') FROM DUAL;

210. LOWER(CHAR)

将字符串CHAR全部变为小写.

SELECT LOWER('ABCDE') FROM DUAL;

211. LPAD(CHAR1,N,CHAR2)

用字符串CHAR2包括的字符左填CHAR1,使其长度为N.

SELECT LPAD('ABCDEFG',10'') FROM DUAL;

结果: 'ABCDEFG'

212. LTRIM(CHAR,SET)

从字符串CHAR的左边移去字符串SET中的字符,直到第一个不是SET中的字符为止. SELECT ('CDEFG','CD') FROM DUAL;

结果: 'EFG'

213. NLS_INITCAP(CHAR)

取字符CHAR的第一个字符大写,其余字符为小写.

SELECT NLS_INITCAP('ABCDE') FROM DUAL;

214. NLS_LOWER(CHAR)

将字符串CHAR包括的字符全部小写.

SELECT NLS_LOWER('AAAA') FROM DUAL;

215. NLS_UPPER(CHAR)

将字符串CHAR包括的字符全部大写.

SELECT NLS_UPPER('AAAA') FROM DUAL;

216. REPLACE(CHAR1,CHAR2,CHAR3)

用字符串CHAR3代替每一个列值为CHAR2的列,其结果放在CHAR1中.

SELECT REPLACE(EMP_NO,'','456') FROM DUAL;

217. RPAD(CHAR1,N,CHAR2)

用字符串CHAR2右填字符串CHAR1,使其长度为N.

SELECT RPAD('234',8,'0') FROM DUAL;

218. RTRIM(CHAR,SET)

移去字符串CHAR右边的字符串SET中的字符,直到最后一个不是SET中的字符为止. SELECT RTRIM('ABCDE','DE') FROM DUAL;

219. SUBSTR(CHAR,M,N)

得到字符串CHAR从M处开始的N个字符. 双字节字符,一个汉字为一个字符的. SELECT SUBSTR('ABCDE',2,3) FROM DUAL;

220. SUBSTRB(CHAR,M,N)

得到字符串CHAR从M处开始的N个字符. 双字节字符,一个汉字为二个字符的. SELECT SUBSTRB('ABCDE',2,3) FROM DUAL;

221. TRANSLATE(CHAR1,CHAR2,CHAR3)

将CHAR1中的CHAR2的部分用CHAR3代替.

SELECT TRANSLATE('ABCDEFGH','DE','MN') FROM DUAL;

222. UPPER(CHAR)

将字符串CHAR全部为大写.

223. ADD_MONTHS(D,N)

将N个月增加到D日期.

SELECT ADD_MONTHS(SYS2003-10-17,5) FROM DUAL;

224. LAST_DAY(D)

得到包含D日期的月份的最后的一天的日期.

SELECT LAST_DAY(SYS2003-10-17) FROM DUAL;

225. MONTH_BETWEEN(D1,D2)

得到两个日期之间的月数.

SELECT MONTH_BETWEEN(D1,D2) FROM DUAL;

226. NEXT_DAY(D,CHAR)

得到比日期D晚的由CHAR命名的第一个周日的日期.

SELECT NEXT_DAY(TO_2003-10-17('2003/09/20'),'SATDAY') FROM DUAL; 227. ROUNT(D,FMT)

得到按指定的模式FMT舍入到的最进的日期.

SELECT ROUNT('2003/09/20',MONTH) FROM DUAL;

228. SYS2003-10-17

得到当前系统的日期和时间.

SELECT SYS2003-10-17 FROM DUAL;

229. TO_CHAR(D,FMT)

将日期D转换为FMT的字符串.

SELECT TO_CHAR(SYS2003-10-17,'YYYY/MM/DD') FROM DUAL;

230. TO_2003-10-17(CHAR,FMT)

将字符串CHAR按FMT的格式转换为日期.

SELECT TO_2003-10-17('2003/09/20','YYYY/MM/DD') FROM DUAL;

231. ABS(N)

得到N的绝对值.

SELECT ABS(-6) FROM DUAL; 232. CEIL(N)

得到大于或等于N的最大整数. SELECT CEIL(5.6) FROM DUAL; 233. COS(N)

得到N的余弦值.

SELECT COS(1) FROM DUAL; 234. SIN(N)

得到N的正弦值.

SELECT SIN(1) FROM DUAL; 235. COSH(N)

得到N的双曲余弦值.

SELECT COSH(1) FROM DUAL; 236. EXP(N)

得到N的E的N次幂.

SELECT EXP(1) FROM DUAL; 237. FLOOR(N)

得到小于或等于N的最小整数. SELECT FLOOR(5.6) FROM DUAL; 238. LN(N)

得到N的自然对数.

SELECT LN(1) FROM DUAL; 239. LOG(M,N)

得到以M为底N的对数.

SELECT LOG(2,8) FROM DUAL; 240. MOD(M,N)

得到M除以N的余数.

SELECT MOD(100,7) FROM DUAL;

作文八:《vb语句大全》2000字

VisualBasic是微软公司推出的简单易学、功能强大编程工具,是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,使用VB能轻而易举地开发适合在Windows环境下各类应用程序。

语句是程序的基本功能单位,每条语句都有确切的含义,能完成一定的任务。熟练掌握语句,是开发应用程序的基础。VB共有语句77个,这里给出72个,另外5个由于很少用到没有给出,它们是Width#语句,设置文件的输出行宽度。Implements语句,指定要在包含该语句的类模块中实现的接口或类。其余3个用于声明Property过程的名称,参数以及构成其主体的代码,PropertyGet语句,该Property过程获取一个属性的值;PropertyLet语句,该Property过程给一个属性赋值;PropertySet语句,该Property过程设置一个对象引用。 点击相关语句看详细内容 语句 描述

激活其它应用程序。

通过计算机喇叭发出声音。

调用一个子程序或函数。

改变当前的路径(目录或文件夹)。

ChDrive语句 改变当前的驱动器。

关闭用Open语句打开的文件。

声明常量。

设置当前系统日期。

用于在模块或窗体中声明对动态链接库(DLL)中外部过程的引用,在 引用API函数时经常用到。

在模块或窗体,为变量和传给过程的参数,设置缺省数据类型,以及 为其名称以指定的字符开头的Function和PropertyGet过程,设置返

回值类型。

删除指定的Windows注册表的子键。

声明局部变量并分配存储空间。

循环语句,有两种变形,一种是当条件为True时,重复执行一个语句

块中的命令。另一种重复执行一个语句块中的命令,直到条件变为

True时。

结束程序、过程或语句。

定义枚举类型。

重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。  模拟错误的发生。

定义用户自定义的事件。

提前退出控制结构、循环或过程的语句体。

复制一个文件。

以指定次数来重复执行一组语句。

针对一个数组或集合中的每个元素,重复执行一组语句。  声明Function过程的名称,参数以及构成其主体的代码。  将一个已打开的磁盘文件读入一个变量之中。

在一个过程中跳到另一个子程序中执行,执行后再返回。  无条件地转移到过程中指定的行。

条件语句,根据表达式的值有条件地执行一组语句。

从已打开的顺序文件中读出数据并将数据指定给变量。

删除磁盘文件。 将表达式的值赋给变量或属性。 从已打开的顺序文件中读出一行并将字符串变量指定给变量。 把窗体或控件加载到内存中。 锁定或解锁用Open语句打开的全部文件或一部分文件,控制其它进程是否可以修改文件。 将某字符串插入到另一字符串变量的最左边,或是将一用户定义类型变量复制到另一用户自定义类型变量。 用另一个字符串中指定数量的字符替换Variant或String变量中的字符。 创建一个新的目录或文件夹。 重新命名一个文件、目录或文件夹。 根据表达式的值,转到特定行执行。 启动一个错误处理程序并指定该子程序在一个过程中的位置;也可用来禁止一个错误处理程序。 打开磁盘文件。 在模块或窗体级别中使用,用来声明数组下标的缺省下界。 在模块或窗体级别中使用,用于声明字符串比较时所用的缺省比较方法。 在模块或窗体级别中使用,强制显式声明模块或窗体中的所有变量。 强制声明某个模块为该模块所属工程的私有模块。 将格式化显示的数据写入顺序文件中。 在模块或窗体级别中使用,用于声明私有变量及分配存储空间。 在模块或窗体级别中使用,用于声明全局变量(公用变量)和分配存储空间。 将一个变量的数据写入磁盘文件中。 引发在一个类、窗体、或者文档中的模块级中声明的一个事件。 初始化随机数发生器。 在过程级别中使用,用于为动态数组变量重新分配存储空间。 注释语句。 关闭所有用Open语句打开的磁盘文件。 在On...Error的错误处理程序或On...GoSub的特定程序区段结束后,恢复原先的运行。 删除一个存在的目录或文件夹。 在一字符串变量中将一字符串往右对齐。 将窗体或控件中的图形保存到文件中。 在Windows注册表中保存或建立应用程序项目。 在Open语句打开的文件中,设置下一个读/写操作的位置。 多分支语句。 将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。 将对象引用赋给变量或属性。 为一个文件设置属性信息。

在过程级别中使用,用于声明变量并分配存储空间。在整个代码运行期间都能保留使用Static语句声明的变量的值。通俗的讲,就是声明静态变量。 暂停执行。 声明子过程的名称,参数,以及构成其主体的代码。 设置系统时间。 在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。 从内存中卸载窗体或控件。 只要指定的条件为True,则会重复执行一系列的语句。 在一个单一对象或一个用户定义类型上执行一系列的语句。 将数据写入顺序文件。

作文九:《c#语句大全》2100字

C# 语句大全![转]

2009-04-24 10:31

转载地址:://aspx2008.blogs./archive/2005/05/10/152636.aspx

C# 中的大多数语句都是直接从 C 和 C++ 借用的,但有一些值得注意的添加和修改。下表列出了可用的语句类型,并提供了每种类型的示例。

语句

示例

语句列表和块语句

static void Main() {

F();

G();

H();

I();

标记语句和 goto 语句

static void Main(string[] args) {

if (args.Length == 0)

goto done;

Console.WriteLine(args.Length);

done:

Console.WriteLine(

局部常数声明

static void Main() {

const float pi = 3.14f;

const int r = ;

Console.WriteLine(pi * r * r);

局部变量声明

static void Main() {

int a;

int b = 2, c = 3;

a = 1;

Console.WriteLine(a + b + c);

表达式语句

static int F(int a, int b) {

return a + b;

static void Main() {

F(1, 2); // Expression statement  }

if 语句

static void Main(string[] args) {

if (args.Length == 0)

Console.WriteLine(

Console.WriteLine(

switch 语句

static void Main(string[] args) {

switch (args.Length) {

case 0:

Console.WriteLine(

case 1:

Console.WriteLine(

default:

int n = args.Length;

Console.WriteLine(

while 语句

static void Main(string[] args) {

int i = 0;

while (i

Console.WriteLine(args[i]);

i++;

do 语句

static void Main() {

string s;

do { s = Console.ReadLine(); }

while (s !=

for 语句

static void Main(string[] args) {

for (int i = 0; i

foreach 语句

static void Main(string[] args) {

foreach (string s in args)

Console.WriteLine(s);

break 语句

static void Main(string[] args) {

int i = 0;

while (true) {

if (i == args.Length)

break;

Console.WriteLine(args[i++]);      }

continue 语句

static void Main(string[] args) {

int i = 0;

while (true) {

Console.WriteLine(args[i++]);         if (i

continue;

break;

return 语句

static int F(int a, int b) {

return a + b;

static void Main() {

Console.WriteLine(F(1, 2));

return;

throw 语句和 try 语句

static int F(int a, int b) {

if (b == 0)

throw new Exception(

static void Main() {

try {

Console.WriteLine(F(5, 0));

catch(Exception e) {

Console.WriteLine(

checked 和 unchecked 语句

static void Main() {

int x = Int32.MaxValue;

Console.WriteLine(x + 1);      // Overflow     checked {

Console.WriteLine(x + 1); // Exception      }

unchecked {

Console.WriteLine(x + 1); // Overflow      }

lock 语句

static void Main() {

A a = ...;

lock(a) {

a.P = a.P + 1;

using statements

static void Main() {

using (Resource r = new Resource()) {          r.F();

作文十:《SQL语句大全》16500字

SQL分类:

DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)

DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)

DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,简要介绍基础语句:

1、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创建 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

--- 开始 备份

BACKUP DATABASE pubs TO testBack

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2… from tab_old definition only

5、说明:

删除新表:drop table tabname

6、说明:

增加一个列:Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:

添加主键:Alter table tabname add primary key(col)

说明:

删除主键:Alter table tabname drop primary key(col)

8、说明:

创建索引:create [unique] index idxname on tabname(col….)

删除索引:drop index idxname

注:索引是不可更改的,想更改必须删除重新建。

9、说明:

创建视图:create view viewname as select statement

删除视图:drop view viewname

10、说明:几个简单的基本的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count * as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、说明:几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABL

E1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

12、说明:使用外连接

A、left outer join:

左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

其次,大家来看一些不错的sql语句

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 11

法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录

select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

18、说明:随机选择记录

select newid()

19、说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名

select name from sysobjects where type='U'

21、说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

显示结果:

type     vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)

对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:

Randomize

RNumber = Int(Rnd*499) +1

While Not objRec.EOF

If objRec("ID") = RNumber THEN

... 这里是执行脚本 ...

end if

objRec.MoveNext

Wend

这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一

遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?

采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:

Randomize

RNumber = Int(Rnd*499) + 1

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber

set objRec = ObjConn.Execute(SQL)

Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")

不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。

再谈随机数

现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。

为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3

假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):

SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

随机读取若干条记录,测试过

Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)

Sql server:select top n * from 表名 order by newid()

mysql select * From 表名 Order By rand() Limit n

Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)

语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

使用SQL语句 用...代替过长的字符串显示

语法:

SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename

Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;

Conn.Execute说明

Execute方法

该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:

1.执行SQL查询语句时,将

返回查询得到的记录集。用法为:

Set 对象变量名=连接对象.Execute("SQL 查询语言")

Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:

连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]

·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。

·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

·BeginTrans、RollbackTrans、CommitTrans方法

这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。

事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。

BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。

SQL语句大全精要

2006/10/26 13:46

DELETE语句

DELETE语句:用于创建一个删除查询,可从列在 FROM 子句之中的一个或多个表中删除记录,且该子句满足 WHERE 子句中的条件,可以使用DELETE删除多个记录。

语法:DELETE [table.*] FROM table WHERE criteria

语法:DELETE * FROM table WHERE criteria='查询的字'

说明:table参数用于指定从其中删除记录的表的名称。

criteria参数为一个表达式,用于指定哪些记录应该被删除的表达式。

可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过,若用这种方法删除表,将会失去表的结构。不同的是当使用 DELETE,只有数据会被删除;表的结构以及表的所有属性仍然保留,例如字段属性及索引。

UPDATE

有关UPDATE,急!!!!!!!!!!!

在ORACLE数据库中

表 A ( ID ,FIRSTNAME,LASTNAME )

表 B( ID,LASTNAME)

表 A 中原来ID,FIRSTNAME两个字段的数据是完整的

表 B中原来ID,LASTNAME两个字段的数据是完整的

现在要把表 B中的LASTNAME字段的相应的数

据填入到A表中LASTNAME相应的位置。两个表中的ID字段是相互关联的。

先谢谢了!!!!

update a set a.lastname=(select b.lastname from b where a.id=b.id)

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。

SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统

中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000);

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,200000);

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000);

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL);

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis');

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column { ,column})]

VALUES

(columnvalue [{,columnvalue}]);

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接 SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可

以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables;

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES;

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES;

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

这里我们进行了多

列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES;

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [{, columns}])| *

FROM table [ {, table}]

[ORDER BY column [ASC] | DESC

[ {, column [ASC] | DESC }]];

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates];

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于

小于

大于 >

小于或等于

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY > 50000;

这一查询将返回年薪高于$50,000.00的职员(参见表7)。

逻辑连接符

有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员 Davy Jones的记录,用户可以输入如下语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';

在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';

有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:

SELECT * FROM EMPLOYEES

WHERE NOT(BRANCH_OFFICE = 'Boston');

关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。

断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:

SELECT * FROM EMPLOYEES

WHERE (LAST_NAME = 'Jones'

AND FIRST_NAME = 'Indiana')

OR (LAST_NAME = 'Smith'

AND FIRST_NAME = 'Bessie');

SQL沿用数学上标准的表达式求值的约定—圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。

以上对逻辑连接符进行了说明,在对下面的内容进行说明之前,我们再一次对SELECT语句的语法进行更新:

SELECT [DISTINCT]

(column [{, column } ] )| *

FROM table [ { , table} ]

[ORDER BY column [ASC] | [DESC

[{ , column [ASC] | [DESC } ] ]

WHERE predicate [ { logical-connector predicate } ];

NULL和三值逻辑

在SQL中NULL是一个复杂的话题,关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理,并且你也很可能会遇到它,所以我们还是简略地进行一下说明。

首先,在断言中进行NULL判断时需要特殊的语法。例如,如果用户需要显示所有年薪未知的职员的全部信息,用户可以使用如下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE SALARY IS NULL;

相反,如果用户需要所有已知年薪数据的职员的信息,你可以使用以下语句:

SELECT * FROM EMPLOYEES

WHERE SALARY IS NOT NULL;

请注意我们在列名之后使用了关键字IS NULL或IS NOT NULL,而不是标准的比较形式:COLUMN = NULL、COLUMN  NULL或是逻辑操作符NOT(NULL)。

这种形式相当简单。但当你不明确地测试NULL(而它们确实存在)时,事情会变得很混乱。

例如,回过头来看我们图1中的EM-PLOYEES表,可以看到In

diana Jones的工薪等级或年薪值都是未知的。这两个列都包含NULL。可以想象运行如下的查询:

SELECT * FROM EMPLOYEES

WHERE GRADE

此时,Indiana Jones应该出现在结果表中。因为NULL都是相等的,所以可以想象它们是能够通过GRADE小于等于SALARY的检查的。这其实是一个毫无疑义的查询,但是并没有关系。SQL允许进行这样的比较,只要两个列都是数字类型的。然而,Indiana Jones并没有出现在查询的结果中,为什么?

正如我们早先提到过的,NULL表示未知的值(而不是象某些人所想象的那样表示一个为NULL的值)。对于SQL来说意味着这个值是未知的,而只要这个值为未知,就不能将其与其他值比较(即使其他值也是NULL)。所以SQL允许除了在true 和false之外还有第三种类型的真值,称之为“非确定”(unknown)值。

如果比较的两边都是NULL,整个断言就被认为是非确定的。将一个非确定断言取反或使用AND或OR与其他断言进行合并之后,其结果仍是非确定的。由于结果表中只包括断言值为“真”的行,所以NULL不可能满足该检查。从而需要使用特殊的操作符IS NULL和IS NOT NULL。

UPDATE语句

UPDATE语句允许用户在已知的表中对现有的行进行修改。

例如,我们刚刚发现Indiana Jones的等级为16,工资为$40,000.00,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。

UPDATE EMPLOYEES

SET GRADE = 16, SALARY = 40000

WHERE FIRST_NAME = 'Indiana'

AND LAST_NAME = 'Jones';

上面的例子说明了一个单行更新,但是UPDATE语句可以对多行进行操作。满足WHERE条件的所有行都将被更新。如果,你想让Boston办事处中的所有职员搬到New York,你可以使用如下语句:

UPDATE EMPLOYEES

SET BRANCH_OFFICE = 'New York'

WHERE BRANCH_OFFICE = 'Boston';

如果忽略WHERE子句,表中所有行中的部门值都将被更新为'New York'。

UPDATE语句的语法流图如下面所示:

UPDATE table

SET column = value [{, column = value}]

[ WHERE predicate [ { logical-connector predicate}]];

DELETE语句

DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是 “你确认删除吗?”之类的警告,在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:

DELETE FROM EMPLOYEES

WHERE BRANCH_OFFICE = 'Los Angeles';

如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。

DELETE

语句的语法流图如下面所示:

DELETE FROM table

[WHERE predicate [ { logical-connector predicate} ] ];

本文来自CSDN博客,转载请标明出处:://blog.csdn.net/hackervs/archive/2008/12/17/3537445.aspx