從制造到創(chuàng)造
軟件工程師成長之路 |
SQL分類:
DDL—數(shù)據(jù)定義語言(CREATE,ALTER,DROP,DECLARE)
DML—數(shù)據(jù)操縱語言(SELECT,DELETE,UPDATE,INSERT)
DCL—數(shù)據(jù)控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,簡要介紹基礎(chǔ)語句:
1、說明:創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE database-name
2、說明:刪除數(shù)據(jù)庫
drop database dbname
3、說明:備份sql server
--- 創(chuàng)建 備份數(shù)據(jù)的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創(chuàng)建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據(jù)已有的表創(chuàng)建新表:
A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)
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中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:
添加主鍵:Alter table tabname add primary key(col)
說明:
刪除主鍵:Alter table tabname drop primary key(col)
8、說明:
創(chuàng)建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
9、說明:
創(chuàng)建視圖: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] 總數(shù):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 運算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。 B: EXCEPT 運算符 EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復(fù)行。 C: INTERSECT 運算符 INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復(fù)行。 注:使用運算詞的幾個查詢結(jié)果行必須是一致的。 12、說明:使用外連接 A、left outer join: 左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。 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: 右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。 C:full outer join: 全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。 其次,大家來看一些不錯的sql語句 1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1 法二:select top 0 * into b from a 2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b) (Access可用) insert into b(a, b, c) select d,e,f from b; 3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用) insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫’ 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、說明:顯示文章、提交人和最后回復(fù)時間 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限制查詢數(shù)據(jù)范圍時包括了邊界值,not between不包括 select * from table1 where time between time1 and time2 select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值2 9、說明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 11、說明:四表聯(lián)查問題: 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 語句搞定數(shù)據(jù)庫分頁 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值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.) select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b) 16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復(fù)行而派生出一個結(jié)果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、說明:隨機取出10條數(shù)據(jù) select top 10 * from tablename order by newid() 18、說明:隨機選擇記錄 select newid() 19、說明:刪除重復(fù)記錄 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 20、說明:列出數(shù)據(jù)庫里所有的表名 select name from sysobjects where type='U' 21、說明:列出表里的所有的 select name from syscolumns where id=object_id('TableName') 22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現(xiàn)多重選擇,類似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 顯示結(jié)果: type??? vender pcs 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 隨機選擇數(shù)據(jù)庫記錄的方法(使用Randomize函數(shù),通過SQL語句實現(xiàn)) 對存儲在數(shù)據(jù)庫中的數(shù)據(jù)來說,隨機數(shù)特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP“找個隨機數(shù)”然后打印出來。實際上常見的解決方案是建立如下所示的循環(huán): Randomize 這很容易理解。首先,你取出1到500范圍之內(nèi)的一個隨機數(shù)(假設(shè)500就是數(shù)據(jù)庫內(nèi)記錄的總數(shù))。然后,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執(zhí)行由THEN 關(guān)鍵字開始的那一塊代碼。假如你的RNumber 等于495,那么要循環(huán)一遍數(shù)據(jù)庫花的時間可就長了。雖然500這個數(shù)字看起來大了些,但相比更為穩(wěn)固的企業(yè)解決方案這還是個小型數(shù)據(jù)庫了,后者通常在一個數(shù)據(jù)庫內(nèi)就包含了成千上萬條記錄。這時候不就死定了? 采用SQL,你就可以很快地找出準確的記錄并且打開一個只包含該記錄的recordset,如下所示: Randomize 不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作“隨機”記錄。Recordset沒有包含其他內(nèi)容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。
|
?????????????????????????????????????? EasyJF開源團隊(www.easyjf.com) 大峽
原文出處:http://www.pconline.com.cn/pcedu/empolder/life/0609/859479.html
經(jīng)常會跟一些朋友討論怎么樣才能學(xué)好Java,學(xué)到什么程度才算撐握了Java的問題。其中有一個J2EE程序員層次及武功修為的問題,有點意思。這里就把討論的內(nèi)容大致整理一下發(fā)出來,大家繼續(xù)討論。
縱觀國內(nèi)的軟件行業(yè),靠Java吃飯的程序員還真不是少,而且Java程序員是有很大優(yōu)越感的,畢竟對于很多用b/s搞開發(fā)的業(yè)內(nèi)朋友來說,Java技術(shù)意味著難度大、門檻高,因此相對來說Java程序員比其它的程序員(如php、.net)收入高就理所當(dāng)然。然而J2EE所涉及到的范疇是很廣的,不能一個Java程序員就概括了事,而應(yīng)該具有層次及水平之分,很多時候經(jīng)常需要進行分類或評級,有時他評、有時自評。
談到國內(nèi)J2EE領(lǐng)域的程序員層次水平,當(dāng)前流行的稱謂及評級不外乎就下面幾種:
第一種是精通掌握記事本、Dreamweaver等工具來寫JSP+JavaBean數(shù)據(jù)庫應(yīng)用的是J2EE程序員;
第二種是用JBuilder、Eclipse等專用Java開發(fā)工具寫著一堆一堆過程式Java Bean,而且還能精通Struts+Spring+Hibernate等應(yīng)用框架的高級J2EE程序員;
第三種是用Together建模,然后生成一堆Java接口或代碼,開口閉口都是設(shè)計模式的資深Java程序同及高級系統(tǒng)分析、構(gòu)架師;
最后還有一種是整天在BlogJava或JavaEye上談經(jīng)論道的大師們,這些大師技術(shù)水平難以觸摸,武功門派也各具特色,不好歸類,有時不好稱為程序員(因為有的時候他們甚至不寫或者寫不出程序),但又做著與J2EE程序員密切相關(guān)的事情,我們暫且就歸為“牛牛”或“大師”。
稱謂畢竟只是稱謂,帶有點主觀或者功利色彩,有時很難鑒定一個人應(yīng)該屬于什么,因此,我們再從純技術(shù)的角度,也即武功修為的角度,作了一個簡單的分析及歸類,把2EE領(lǐng)域程序員大致分成以下幾個層次,可以作為大家自評的一個參考標(biāo)準:
第一個層次:精通掌握Java語法、能調(diào)試基本的程序錯誤,精通掌握JSP+Java Bean寫一些N年前ASP、PHP翻版的Java Web應(yīng)用程序(如論壇、網(wǎng)站新聞發(fā)布系統(tǒng)、OA、網(wǎng)上商城等),精通JDBC使用、精通SQL語句、精通XML等。
第二個層次:掌握設(shè)計模式原理及應(yīng)用,掌握基于OO的分析及設(shè)計方法,并能精通熟練使用幾種Java專業(yè)設(shè)計及開發(fā)工具,精通掌握流行的J2EE框架如Hibernate、EJB、Webwork、Spring的原理及應(yīng)用,精通J2EE中一兩個組成部分(如Servlet、EJB等)的工作原理及細節(jié)。
第三個層次:少林的高僧有兩種,禪僧及武僧。J2EE程序員的第三個層次也同樣有禪、武兩個分支,這里我們重點分析一下:
第一個分支屬于走的禪僧線路。在練完第二個層次中的各種武功基礎(chǔ)上,結(jié)合實際項目中的千奇百怪的用戶需求,游刃有余的選擇適合的技術(shù)方案為客戶解決問題,并形成自己的一套解決方案。達到這一個層次的J2EE程序員已經(jīng)不在乎使用任何工具、任何框架了,而是根據(jù)不同的對手,使用不同的武器或招式來應(yīng)對。好比小李飛刀一樣,只有達到了“手中無刀、心中有刀”的境界,才能達到“出手一刀,例不虛發(fā)”的效果。這一層次的武功屬于一個熟練度問題,刀練得多了、遇到的對手多了,再加上前面的武功修為,就算做不到例不虛發(fā),也可達到十發(fā)九中。
第二個分支屬于走的武僧線路,在撐握熟悉第一二個層次中涉及到的內(nèi)容后,進一步專研并撐握J2EE底層開發(fā),J2EE規(guī)范制訂、規(guī)范實現(xiàn)、Java虛擬機的工作原理、各種常見的J2EE服務(wù)器內(nèi)核工作機制、內(nèi)存管理、進程機制、源代碼等。因為涉及的很多東西都比較抽象,代碼也很多,練這一層的武功需要有很好的資質(zhì)及耐性、并具還得有一定的環(huán)境及條件。好比神雕大俠楊過拿起“玄鐵劍”,并練成“暗然銷魂掌”的成長過程,需要前面的武功修為作基礎(chǔ),更需那只威力神武神雕的幫助指點及他處處為民、懲奸除惡的俠之心態(tài)。
胡侃了這么多,現(xiàn)在來根據(jù)自己情況測算一下自己的份量,結(jié)果如下:
第一層 練到8成;
第二層 練到5成;
第三層 準備走禪僧線路,當(dāng)前算是練到1成;
唉,后面的武功提升越來越難,真不知道要到何年何月才能達到10成啊。你的武功練到哪一個層次了,不防亮出來大家切磋切磋。嘿嘿,要是有一天,咱們中國的Java程序員人手一把“玄鐵劍”、人人會使“暗然銷魂掌”,那還了得!汗...,寫著寫著居然做起白日夢了,不好意思,就此打住。
手中雞蛋先別扔,還要打個廣告:本人剛開始涉足Java開源,目前在EasyJF開源團隊中負責(zé)EasyJWeb(官網(wǎng)www.easyjf.com)項目,歡迎大家前來指導(dǎo)。
1、[Knowledge]安裝和使用JUnit
2、第一次親密接觸JUnit
3、java中的io系統(tǒng)總結(jié).
4、使用JSP面向?qū)ο體eb編程技術(shù)實現(xiàn)樹形控件
5、java 實現(xiàn)pop3 server 源碼
6、整合Struts 與Spring
7、三個JAVA文件完成你的MVC應(yīng)用
8、XML與JSP
9、網(wǎng)頁特效集錦
10、每個初學(xué)者都應(yīng)該搞懂的問題!
11、作為一個合格程序員每天該做的事
在數(shù)據(jù)庫中,某些表的字段很長,而且是自增的,但是由于有前綴,不能直接使用INT類型。
我們可以通過編寫存儲過程來實現(xiàn)自動生成Id的功能:
一、首先建立數(shù)據(jù)庫和表,并向其中插入一條數(shù)據(jù):
在數(shù)據(jù)類型的優(yōu)先順序中,int?比 varchar 高,計算時回得到int結(jié)果。
?
SQL Server沒有Oracle的DESC命令,在Orcale中,我們可以使用:DESC 表名; 來查詢表的結(jié)構(gòu),但SQL Server沒有提供這個命令,只有一個sp_help 表名;的存儲過程來查看表的所有信息。下面我們來通過SELECT語句查詢表的結(jié)構(gòu)。
查詢結(jié)果:
2、下面查詢某張?zhí)囟ū淼慕Y(jié)構(gòu)
查詢結(jié)果:
3、如果要查看視圖信息,只需要將SO.xtype = 'U'該為SO.xtype = 'V' 即可!
JavaScript 的基本語法
JavaScript的標(biāo)識符
標(biāo)識符是指JavaScript中定義的符號,例如,變量名、函數(shù)名、數(shù)組名等。
標(biāo)識符可以由字母、數(shù)字、下劃線(_)和美元($)
注意:標(biāo)識符不能以數(shù)字開頭
JavaScript大小寫敏感
JavaScript程序代碼的格式
以分號(;)結(jié)束
JavaScript程序的注釋
① // 單行注釋
② /*? ....? */ 中可以嵌套"http://",但是/*? */不能相互嵌套
基本數(shù)據(jù)類型與常量
整型常量
???a、十六進制:以0x或者0X開頭,例如:0x8a、0Xff
?? b、八進制:以0開頭,例如:0123
???c、十進制:例如:12345
實型常量(即浮點型):12.32、5E7、4e59
布爾值:true 和 false
字符串型常量:"a book of JavaScript"、"abc"、"a"、""。
字符串中的特殊字符,需要以反斜杠(\)后跟一個普通字符來表示,例如:\r、\n,\b,\',\",\\
null 常量 變量已經(jīng)有值而且值為空
undefined 常量:變量不存在或者類型未定義
?1?<html>
?2?????<head>
?3?????????<meta?http-equiv="Content-Type"?content="TEXT/HTML;?Charset=GB2312">
?4?????????<title>?未定義類型?</title>
?5?????</head>
?6?????<body?bgcolor="white">
?7?????????<script?language?=?JavaScript>
?8?????????????<!--
?9?????????????????var?number;
10?????????????????alert(number?+?"?abc");
11?????????????//-->
12?????????</script>
13?????</body>
14?</html>
?????????輸出結(jié)果為:undefined abc
???????????????????? ?
變量
定義一個變量,系統(tǒng)就會為之分配一塊內(nèi)存,程序可以用變量名來表示這塊內(nèi)存中的數(shù)據(jù)。
JavaScript為弱類型,所以不能指定變量類型,系統(tǒng)會自動指定類型
聲明變量要使用Var關(guān)鍵字
例如:var name
聲明變量的同時為其賦值
例如:var name=222222222;
對已賦值的變量賦予一個其他類型的數(shù)據(jù)
var name2 = "222";
name2 = 333;
name2 = name2 + 1;?// name2等于334
變量可以不先聲明直接使用
例如:x=1234
運算符
算術(shù)運算符
+ 加法運算符或正值運算符 例如,x+5,+6。
?+ 還能實現(xiàn)多個字符串的相連,而且也能將字符串與其它類型的數(shù)據(jù)類型相連成一個字符串,條件是該表達式中至少有一個字符串,例如:"x"+123的結(jié)果為"x123"。
?
%?求模運算符(算術(shù)中的求余)a%b結(jié)果中的符號取決于a 的符號。
?
?????????????? 運行結(jié)果:
????????????????????? ?
賦值運算符:
=????將一個值或表達式的結(jié)果賦給變量
???????例如:x=3
+=????將變量與所賦的值相加后的結(jié)果在賦給變量
比較運算符
==????當(dāng)左邊操作數(shù)等于右邊操作數(shù)相等時返回True
邏輯運算符
&&???邏輯與 兩邊只能是比較運算的結(jié)果(布爾型)
||???????邏輯或
!?????? 邏輯非
位運算符
&????? ?只有參加運算的兩位都為1,運算的結(jié)果才為1,否則就為0。
|???????? 只有參加運算的兩位都為0,運算的結(jié)果才為0,否則就為1。
^????????只有參加運算的兩位不相同,運算的結(jié)果才為1,否則就為0。
>>(右移運算符): 將左邊操作數(shù)在內(nèi)存中的二進制數(shù)據(jù)右移右邊操作數(shù)指定的位數(shù),左邊移空的部分補1
相對于除2
???????????????運行結(jié)果:8右移1位得到4,-8右移1位得到-4
????????????????????? ????? ?
<< (左移運算符):右邊空位補0
相對于乘2
>>>? 將左邊操作數(shù)在內(nèi)存中的二進制數(shù)據(jù)右移右邊操作數(shù)指定的位數(shù),左邊移空的部分補0
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |